شناسایی و جلوگیری از انواع حملات سرریز بافر (Buffer Overflow)

  • نویسنده: سمیرا سروعلیشاه
  • تاریخ انتشار: شنبه ، ۰۲ مرداد ماه ۰۰
  • تعداد بازدید: 709
  • تعداد نظرها: 0
  • دسته بندی: ارزیابی امنیتی

سرریز بافر (Buffer overflow) یک آسیب‌پذیری نرم افزاری متداول است که بر اثر مقداردهی بیش از حد به بافر ایجاد می‌شود. زمانی که مقدار بیشتری از ظرفیت بافر به آن اعمال شود اطلاعات در فضای بیرون از بافر نوشته می‌شود و ممکن است اطلاعات قبلی از بین برود. از سوی دیگر این نوع آسیب پذیری به عنوان روشی جهت اعمال حملات منع سرویس (DoS) توسط مهاجمین مورد استفاده قرار می گیرد. در این مقاله به معرفی حملات سرریز بافر می پردازیم و بصورت مختصر درباره شناسایی و راه های مقابله و جلوگیری از این حملات صحبت خواهیم کرد.

تهدیدات نرم‌افزاری طی چند سال گذشته رشد چشمگیری داشته اند. آسیب‌پذیری‌های مربوط به نرم‌افزار و برنامه کاربردی باعث آسیب‌های بسیاری به سازمان‌ها و افراد مختلف شده است. نمودار زیر شدت آسیب‌پذیری‌های شناسایی شده در برنامه‌های کاربردی و شبکه را نشان داده شده است:

نرخ وقوع آسیب‌پذیری ها به عنوان یک درصد از همه آسیب‌پذیری ها کشف شده

1.Rate of occurrence of vulnerabilities detected.png

هنگام نوشتن کد نرم‌افزار، ایده‌آل‌ این است که کدی بدون اشکال(باگ) نوشته شود. با این حال، حتی اگر این امکان وجود داشت که نرم افزار بدون باگ نوشته شود، ماهیت مدولار توسعه‌نرم‌افزار، این کار را غیرممکن می‌سازد زیرا کتابخانه‌ها و قطعه‌های کد مورد استفاده که در طول توسعه به برنامه اضافه می‌شوند ممکن است باعث ایجاد اشکالات و آسیب‌پذیری‌های امنیتی گردند.

از سال 1960 که مسئله "سر و صدا پشته برای سرگرمی و سود(Smashing the stack for fun and profit)" توسط ALP1 مطرح شد تا کنون سرریزهای بافر یکی از آسیب‌پذیری‌های مهم در حوزه امنیت اطلاعات باقی مانده است.

بافر

بافر یک قطعه فیزیکی برای ذخیره اطلاعات موقت هست که بر روی رم قرار دارد. برخلاف حافظه کش(Cach) که برای بالابردن سرعت استفاده می‌شود، بافر برای هماهنگی سرعت بین دو سخت افزار بکار می‌رود. به عنوان مثال،  وقتی ویدئویی را آنلاین می‌بینیم در روند پخش ویدئو به طور همزمان، ویدئو دانلود و در بافر ذخیره می‌شود. بنابراین، کاهشی کوچک در سرعت اتصال یا وقفه سرویس، سریع بر عملکرد پخش ویدئو تاثیر نمی‌گذارد و یا زمان چاپ کردن اسناد، این بافر هست که بین سیستم و چاپگر قرار می‌گیرد و اطلاعات برای چاپ را با سرعت مناسب از سیستم می‌گیرد و سرعت انتقال اطلاعات را با سرعت چاپگر تنظیم می‌کند.

تفاوت STACK و HEAP

بر روی RAM دو مدل بافر وجود دارد Stack و Heap که حافظه پشته (Stack) بصورت LIFO و حافظه هیپ (Heap) بصورت تصادفی اطلاعات بر رویشان نوشته و خوانده می‌شود. سرعت استخراج اطلاعات از روی حافظه پشته سریع‌تر می‌باشد. حافظه پشته (Stack)، فضاهای ایستای (استاتیک) هستند ولی حافظه هیپ (Heap) جزء فضاهای پویای(دینامیک) هستند که زمان اجرای برنامه ساخته می‌شوند. زمانی که داده‌های پرکاربرد و با اندازه کوچک نیاز هست از پشته استفاده می‌شود و هر زمان به قطعات بزرگ داده و مدیریت آن‌ها نیاز هست از حافظه Heap استفاده می‌شود.

2.STACK vs HEAP.png

سرریز بافر (Buffer overflow)

سرریز بافر یک آسیب‌پذیری است که بر اثر مقداردهی بیش از حد به بافر ایجاد می‌شود. زمانی که مقدار بیشتری از ظرفیت بافر به آن اعمال شود اطلاعات در فضای بیرون از بافر نوشته می‌شود و اطلاعات قبلی از بین می‌رود. آسیب‌پذیری سرریز بافر معمولا زمانی رخ می‌دهد که کد:

  1. به داده‌های خارجی وابسته است تا رفتار خود را کنترل کند،
  2. وابسته به خواص داده‌ای است که فراتر از محدوده فوری آن اعمال می‌شود،
  3. پیچیده است که برنامه نویسان قادر به پیش‌بینی رفتار آن نیستند.

حمله سرریز بافر

حمله سرریز بافر زمانی رخ می‌دهد که نفوذگر اقدام به انجام سرریز بافر کرده و با برنامه‌ریزی دقیق قصد به خطر انداختن سیستم را دارد. این حمله جزء خطرناک‌ترین حملات حساب می‌شود و اکثر نفوذگران به قصد حمله به سیستم عامل از این آسیب‌پذیری بهره می‌برند. اهداف نفوذگران برای انجام این حمله به شرح زیر می‌باشد:

  • از کار انداختن سیستم: مانند حملات DoS این حمله با اختلال در فرآیند(Crash the process)ها و تغییر متغیرهای داخلی (Internal variables) باعث ایجاد حلقه‌های بینهایت و یا خارج از دسترس کردن برنامه‌ها می‌گردد. این کار نسبتاً راحت است.
  • گرفتن کنترل دسترسی: نفوذگر با اختلال در فرآیند(Crash the process) ها و کنترل اجرای فرآیند (Control the process execution) می‌تواند کد دلخواه خود را اجرا کند و سایر حملات ممکن را پیاده‌سازی نماید.
  • اجرای کد مخرب دلخواه: نفوذگر با اختلال در فرآیند(Crash the process) ها و با کنترل اجرای فرآیند (Control the process execution) می‌تواند کد مخرب دلخواه خود را اجرا کند و سایر حملات ممکن را پیاده‌سازی نماید.
  • از دست رفتن داده ها: حملات سرریز بافر را می توان برای SIPHON OFF داده ها(siphon off data) استفاده کرد- با دستکاری رفتار برنامه از طریق حملات سرریز بافر می‌تواند خروجی ها را هدایت کند و جریان داده های را به صورت غیرقانونی استخراج کند.

باید توجه داشت که حملات انکار سرویس(DoS) هدفشان فقط از کار انداختن سیستم قربانی است ولی در حملات سرریز بافر هدف اصلی بدست آوردن دسترسی به سیستم قربانی می‌باشد.

انواع حملات

حملات سرریز بافر از استراتژی‌های مختلفی استفاده می‌‌کنند و بخش‌های مختلفی از کد را مورد هدف قرار می‌دهند. در زیر به معرفی چند حمله شناخته شده سرریزبافر می‌پردازیم:

3.Stack overflow attack.jpg

  • حمله سرریز بافر پشته(Stack overflow attack): شایع‌ترین نوع حمله سرریز بافر می‌باشد، در برنامه‌های نوشته شده با زبان C کوتاهی برنامه‌نویس در استفاده از توابعی که محدوده پشته را بررسی نمی‌کنند مانند strcat() منجر به رخ دادن حمله سرریز بافر می‌شود. امروزه بدلیل وجود تکنیک‌های بسیار مقابله با حملات سرریز بافر بر پشته، نفوذگران به سراغ حملات سرریز بافر بر روی حافظه هیپ رفته اند.

4.Heap overflow attack.jpg

  • حمله سرریز بافر هیپ(Heap overflow attack): این حمله زمانی رخ می‌دهد که در یک قطعه از حافظه هیپ، داده‌ای بدون بررسی طول آن نوشته می‌شود. این امر ممکن است محتوای یکی از داده‌های ساختاری مهم مانند هدر هیپ و یا هر داده مبتنی بر هیپ مانند اشارگرهای شی پویا را تغییر دهد.

5.Integer overflow attack.png

  • حمله سرریز بافر عدد صحیح(Integer overflow attack): این حمله یا wraparound زمانی رخ می‌دهد که خروجی عملیات محاسباتی یک مقدار عددی است که از فضای حافظه اختصاص داده شده، خارج می‌شود و یا دامنه ارزش داده شده عدد صحیح را سرریز می‌کند. در بیشتر زبان‌های برنامه نویسی، فضای محدودی برای ذخیره سازی مقادیر اعداد صحیح، اختصاص داده می‌شود. حمله سرریز عدد صحیح در 2020 CWE Top 25 Most Dangerous Software Weaknesses به ‌عنوان 11امین آسیب‌پذیری خطرناک‌ نرم افزاری با شناسه CWE-190 مشخص شده است.

به عنوان مثال، یک عدد صحیح 16 بیتی وجود دارد که ممکن است یک عدد صحیح بدون علامت را از 0 تا 65535 و یا عدد صحیح علامت دار از -32768 تا 32767 را ذخیره کند. بنابراین، در طی عملیات محاسباتی، اگر نتایج بیش از فضای اختصاص داده شده باشد ( مانند 65535 + 1)، کامپایلر ممکن است خطا را به طور کامل نادیده بگیرید و یا برنامه را لغو کند. اکثر کامپایلرها، سرریز را نادیده می‌گیرند و خروجی یا خطا غیر منتظره را ذخیره می‌کنند. این امر منجر به حملات مختلفی مانند سرریز بافر می گردد که باعث اجرای برنامه‌های مخرب و یا افزایش سطح دسترسی می‌شود.

  • حمله سرریز بافر یونی‌کد(Unicode overflow): این حمله با قرار گرفتن کاراکترهای یونی‌کد به یک ورودی که منتظر کاراکترهای اسکی(ASCII) است، رخ می‌دهد. به عنوان مثال کاراکتر 'A' توسط شماره 97 در اسکی نشان داده می‌شود. در حالی که کد اسکی تنها کاراکترهای زبان انگلیسی را پوشش می‌دهد، یونی‌کد می‌تواند کاراکترهای تقریبا هر زبان نوشتاری موجود در دنیا را نمایش دهد. از آنجایی که کاراکترهای بیشتری در یونی‎‌کد وجود دارد، بسیاری از کاراکترهای یونی‌کد بزرگتر از بزرگترین کاراکتر اسکی هستند.
  • حمله سرریز بافر فرمت رشته(Format String): این حمله زمانی رخ می‌دهد که داده ورودی توسط کاربر بعنوان یک دستور اجرایی پردازش شود. نفوذگر با استفاده از این آسیب‌پذیری کد دلخواه خود را اجرا می‌کند و یا به بخش‌های دیگر حافظه دست میابد که باعث به خطر افتادن امنیت می‌گردد.

استفاده از توابع زیر منجر به رخ دادن حمله سرریز فرمت رشته می شوند:

6.Format String overFlow attack.png

تاریخچه

حملات سرریز بافر مسئول برخی از بزرگترین نقض داده ها در تاریخ هستند. برخی از نمونه های قابل توجه عبارتند از:

  • کرم موریس(Morris Worm): کرم موریس از سال 1988 یکی از اولین کرم‌های کامپیوتری توزیع شده در اینترنت بود. این یک آسیب‌پذیری سرریز بافر در UNIX در برنامه‌های Sendmail، Finger و RSH / REXEC مورد سوء‌استفاده قرار گرفت، 10٪ از اینترنت را ظرف دو روز آلوده کرد. کرم موریس بیش از 60،000 دستگاه را بین سال‌های 1988 تا 1990 آلوده کرد. به دنبال این حادثه بنیاد مقابله با حوادث امنیتی (IRST) شکل گرفت که وظیفه‌اش مقابله با حملات ضد‌امنیتی، آموزش و تجهیز شبکه‌ها و روش‌های پیشگیرانه می‌باشد. به کرم موریس لقب "کرم بزرگ"یا "پدر بزرگ" را نیز داده اند به خاطر تاثیر مخربی که بر روی اینترنت و سیستم های متصل به آن چه از نظر تعدد خرابی سیستم ها و چه از نظر تأثیر روانی بر روی درک امنیت و قابلیت اطمینان اینترنت گذاشت.

8.SQL Slammer.jpg

  • کرم SQL Slammer: نخستین ‌بار در ژانویه ۲۰۰۳ حملات قطع سرویس گسترده (DDoS) علیه ده‌ها هزار سرور در سراسر دنیا ترتیب داد و تنها در مدت ۱۰ دقیقه پس از پیدایش، بیش از ۷۵ هزار شبکه را اشغال کرد. این کرم که در حافظه مقیم می‌شود، با استفاده از نقص سرریزبافر در SQL Server2000 یا MSDE2000 یک درخواست به پورت 1434 UDP می‌فرستد تا سرور را آلوده کند. به محض وقوع این اتفاق، کرم به‌سرعت خودش را با ارسال payload به آدرس‌های IP‌ تصادفی و ایجاد حملات DDoS بیشتر تکثیر می‌کند.

9.Heartbleed vulnerability.jpg

  • باگ(نقص) Heartbleed: Heartbleed یک اشکال امنیتی به طور گسترده ای منتشر شده در OpenSSL است که در سال 2014 شناسایی شد. از یک آسیب‌پذیری بافر بیش از حد خواندن در کتابخانه رمزنگاری OpenSSL مورد استفاده برای پیاده سازی پروتکل امنیتی لایه انتقال (TLS) مورد استفاده قرار گرفت. علت اصلی دقیقا بررسی نکردن محدوده بافر و رخ دادن سرریز بافر است. ارزیابی کل خسارات Heartbleed به خاطر حملات چندگانه و نقض داده‌ها دشوار است. کارشناسان تخمین زده اند که دو سوم از وب سایت های فعال HTTPS در سراسر جهان تحت تاثیر قرار گرفتند. Eweek، 500میلیون دلار خسارت به عنوان نقطه شروع تخمین زده است. آسیب‌پذیری با به روز رسانی OpenSSL به یک نسخه پچ شده، حل می‌شود ولی پیشنهاد گردید کاربران همه رمزهای عبور خود را در وبسایت‌هایی مانند گوگل، باهو، توئیتر، فیسبوک و ... در اولین فرصت تغییر دهند.

10.Adobe Flash Player vulnerability.png

  • باگ(نقص) Adobe Flash Player: در سال 2016، یک آسیب‌پذیری سرریز بافر در Adobe Flash Player برای ویندوز، مکینتاش، لینوکس و سیستم عامل Chrome یافت شد. آسیب‌پذیری به علت خطا در تجزیه(پارسر) یک فایل SWF ویژه (SHOCKWAVE FLASH) بود. نفوذگر می‌تواند از این آسیب‌پذیری ها برای جلوگیری از محدودیت‌های امنیتی استفاده کند، کد دلخواه را اجرا کند و اطلاعات حساس را با استفاده از کاربران برای باز کردن فایل‌های SWF یا اسناد اداری با استفاده از محتویات مخرب فلش پخش شده از طریق ایمیل پخش کند. راه حل ادوبی برای این آسیب پذیری نصب وصله ارائه شده بود.

11.Whatsapp VoI vulnerability.jpg

  • باگ(نقص)Whatsapp VoIP: در ماه مه 2019، فیس بوک یک آسیب‌پذیری را برای تمام محصولات WhatsApp خود اعلام کرد. آسیب‌پذیری یک ضعف سرریز بافر را در پشته VoIP WhatsApp در گوشی‌های هوشمند مورد سوء استفاده قرار داد. این آسیب به نفوذگر اجازه می دهد تا کد دلخواه مخرب خود را از طریق یک سری ویژه بسته های SRTP (Secure Real-time Transport Protocol) به شماره تلفن قربانی ارسال کرده و از راه دور اجرا نماید. بیش از 1400 گوشی هوشمند از طریق WhatsApp Voice، حتی بدون پاسخ دادن به تماس گرفته شده، آلوده شدند. علت توجه رسانه‌ها به این آسیب‌پذیری آلوده شدن تلفن یک وکیل انگلستان بود که درگیر یک پرونده عالی مهم بود و اینگونه اطلاعاتش افشاء شد. فیسبوک با انتشار به‌روزرسانی های امنیتی و وصله مناسب این آسیب‌پذیری را برطرف کرده است. این اسیب پذیری با شناسه امنیتی  CVE-2019-3568ثبت گردیده است.

زبان‌های آسیب‌پذیر

در زبان‌های برنامه نویسی مانند C و C++  بدلیل اینکه اجازه دسترسی مستقیم به فضاهای حافظه داده می‌شود و شیء از نوع قوی (strong object types) وجود ندارد، به‌راحتی حملات سرریز بافر پیاده‌سازی می‌شود و کنترل دسترسی حافظه به دست نفوذگر می‌افتد. در زبان‌های برنامه نویسی سطح بالا مانند پایتون، پی اچ پی، پرل، جاوا، یا جاوا اسکریپت که اغلب برای ساخت برنامه‌های کاربردی وب استفاده می‌شوند، چنین حملاتی بدلیل ساختار این زبان‌ها کمتر رخ می‌دهد ولی بخاطر این‌که برنامه نوشته شده با این زبان‌ها در آخر باید بر روی سیستم عامل‌هایی که بر پایه C هستند و یا زمان اجرا از runtime های نوشته شده با زبان C استفاده می‌کنند، باید احتمال وقوع چنین حملاتی را داد و پیشگیری‌های لازم را اعمال کرد.

نظر owasp

اگر به وبسایت owasp سر بزنید در خصوص آسیب پذیری سرریز بافر خواهید دید این آسیب پذیری از نظر شدت آسیب پذیری(Severity ) رتبه خیلی بالا(Very High ) و از نظر احتمال بهره برداری، بالا رو به خیلی بالا (High to Very High) مشخص شده است.

روش‌های شناسایی

بهترین راه برای تشخیص این نوع آسیب پذیری، استفاده از یک تجزیه کننده کد استاتیک است. در زیر دو ابزار در این زمینه معرفی شده است:

14.Klocwork.png

  1. ابزار Klocwork: این نرم افزار یک ابزار تجزیه و تحلیل کد استاتیک است که کد منبع را در زمان واقعی تجزیه و تحلیل می‌کند، بررسی‌های کد peer را ساده می‌کند و حیات نرم‌افزار پیچیده را گسترش می‌دهد. این ابزار برای شناسایی مسایل امنیتی، ایمنی و قابلیت اطمینان در C، C + +، جاوا و C # استفاده می‌شود. محصول شامل پلاگین های دسکتاپ متعدد برای توسعه دهندگان، متریک و گزارش دهی هستند. در اصل، فن‌آوری Klocwork برای رسیدگی به الزامات تحلیل کد منبع در مقیاس بزرگ برای بهینه‌سازی معماری نرم‌افزار برای کد C در شبکه‌های Nortel در سال ۲۰۰۱ توسعه داده شد. در ژانویه ۲۰۱۲، Klocwork Insight منتشر شد. در سال ۲۰۰۷، Klocwork به عنوان بهترین تحلیل گر سورس کد در سال ۲۰۰۷ به او اهدا شد و در ماه مه ۲۰۱۴، Klocwork برنده جایزه Red ۱۰۰ آمریکای شمالی در بخش نرم‌افزار شد. Klocwork یک شرکت نرم‌افزاری مستقر در کانادا بود که برند Klocwork ابزار برنامه‌نویسی را برای توسعه دهندگان نرم‌افزار توسعه داد. این شرکت در سال ۲۰۱۹ به عنوان بخشی از اکتساب their Rogue شرکت نرم‌افزاری parent به نام perforce توسعه دهنده نرم‌افزار Minneapolis به دست آمد. دیگر به عنوان یک شرکت مستقل وجود ندارد، اما perforce همچنان به توسعه نرم‌افزار تحلیل کد ایستا برچسب دار ادامه می‌دهد.

15.Kiuwan.png

2. ابزار Kiuwan: این نرم افزار به عنوان یک نرم افزار خدمات استاتیک تجزیه و تحلیل نرم افزار چند تکنولوژی برای تجزیه و تحلیل نرم افزار، کیفیت و اندازه گیری امنیت و مدیریت است. در سال ۲۰۱۲ توسط شرکت firm که در سال ۲۰۰۸ تاسیس شد، منتشر شده است. این ابزار یکی از ابزارهای موجود در وب سایت امنیت وب سایت Open Web Application Security Project (OWASP) است و نیز فینالیست برای جایزه IBM Beacon 2015 بود. به عنوان یک ابزار چند تکنولوژی، Kiuwan از بسیاری از زبان‌های برنامه‌نویسی پشتیبانی می‌کند، مثل:

ABAP, C, C++, C#, Objective-C, COBOL, Java, Java Server Pages (JSP), JavaScript, JCL, PHP, PL/SQL, Transact-SQL, SQL, Visual Basic, Visual Basic .NET, RPG, SQL*Forms, Android or Hibernate.

روش‌های جلوگیری

روش‌های پیشگیری از حملات سرریز بافر به شرح زیر است:

  1. فضای آدرس با چیدمان تصادفی(ASLR - Address Space Layout Randomization): مکان فضاهای آدرس‌ که داده‌های مهمی در آن قرار می‌گیرد، بصورت تصادفی انتخاب شود. با توجه به آن‌که دانستن محل دقیق این فضاها برای اجرای کد مخرب برای نفوذگر مهم هست، با این کار دیگر شاهد حملات سرریز بافر نخواهیم بود.
  2. پیشگیری از اجرای داده(Data execution prevention): مناطق خاصی از حافظه را به صورت اجرایی یا غیر اجرایی علامت‌گذاری کردن تا مانع بهره‌برداری از اجرای کد موجود در یک منطقه غیر اجرایی شود.
  3. عدم استفاده از زبان های C و C++: این دو زبان سطح بالا نسبت به حملات سرریزبافر آسیب پذیرند، ترجیحاً از زبان‌هایی مانند پایتون، جاوا و کوبول استفاده کنید. این زبان ها اجازه دسترسی مستقیم به حافظه را نمی‌دهند.
  4. بررسی مرزها (Bounds Checking) و عدم استفاده از توابع کتابخانه ای استاندارد: عدم استفاده از توابعی که حجم بافر را بررسی نمی‌کنند احتمال وقوع حملات سرریز بافر را کاهش می‌دهد. در جدول زیر برخی از این توابع آمده است:

12.Vulnerable functions.png

5. محافظت از حافظه با کمک مکانیزم SEH(Structured exception handler overwrite protection/SEHOP): این ویژگی برای جلوگیری از سوء استفاده هایی که از تکنیک بازنویسی استثنایی ساختار یافته (SEH) استفاده می کنند، طراحی شده است. این مکانیزم برای حفاظت در زمان اجرا ارائه شده است. همانطور که در تصویر زیر مشخص است تابع FinalExceptionHandler در DLL به عنوان اولین کنترل کننده استثنا در همه چرخه‌ها ثبت شده است. همانطور که کنترل کننده های استثنای اضافی ثبت می شوند ، آنها یک لیست پیوندی را تشکیل می‌دهند که آخرین رکورد همیشه به FinalExceptionHandler اشاره دارد. توزیع کننده استثنا در این لیست پیوند یافته قرار می گیرد و تأیید می کند که آخرین رکورد هنوز به آن عملکرد اشاره دارد. اگر یک مهاجم قسمت بعدی یک رکورد کنترل کننده استثنا را رونویسی کند، حلقه اعتبارسنجی به آخرین رکورد نمی رسد و خرابی زنجیره SEH شناسایی می شود. با این تکنیک جلو اجرای کد مخرب گرفته می‌شود و دیگر نفوذگر نمی‌تواند روند اجرا را دستکاری کند و حمله سرریزبافر را پیاده سازی کند.

13.Structured exception handler overwrite protectionSEHOP.png

 6. اقدامات توسعه امنیتی(Secure development practices): با بررسی کد امن و نظارت مستمر می‌تواند برنامه را از سرریز بافر محافظت کند(با نرم افزارهایی که در بخش روش شناسایی اعلام شده است). وقتی برنامه و یا محصول جدیدی استفاده می‌شود، باید در مقاطع مختلف بررسی شود و اگر وصله(پچ) امنیتی برایش اعلام می‌گردد، در اسرع وقت اقدام شود. از سیستم عامل های جدید استفاده شود(سیستم عامل های جدید نسبت به حملات سرریز بافر حفاظت شده اند).

7. استفاده از مقدار کانری‌ها(Canaries): کانری ها مقادیر نگهبان هستند که می‌توانند از سرریز های بافر جلوگیری کنند. مقدار canary بین بافر و کنترل داده در پشته برای رصد کردن سرریز پشته قرار می‌گیرد. . در زمان سرریز بافر، معمولاً اولین داده‌ای که خراب می‌شود مقدار canary است. پس از خرابی مقدار canary هشدار سرریز بافر منتشر می‌شود و سپس می‌توان این خطا را مدیریت کرد. سه نوع مقدار canary وجود دارد: خاتمه‌دهنده، تصادفی، XOR تصادفی. نسخه فعلی StackGuard از هر سه نوع پشتیبانی می‌کند در حالی که ProPolice صرفاً از نوع خاتمه دهنده و تصادفی پشتیبانی می‌کند.

نتیجه گیری

در این مقاله با حمله سرریزبافر و انواع آن آشنا شدید و راه‌های پیشگیری از آن را آموختید. همواره پیشگیری بهتر از درمان هست.

به عنوان برنامه‌نویس و توسعه‌دهنده نرم‌افزارها باید توجه داشته باشید که با افزایش روزافزون حملات یکی از بهترین راه‌های جلوگیری از آن‌ها، کدنویسی امن، توجه به به‌روزکردن ابزارهای مورد استفاده و بالابردن سطح آگاهی خود است. ارزیابی امنیتی دوره‌ای کمک شایانی جهت جلوگیری از حملات دارد. می‌توان برای ارزیابی امنیتی برنامه های تحت وب، ارزیابی برنامه های دسکتاپی و یا ارزیابی برنامه های موبایل به سایت آشنا ایمن بخش آزمون نفوذپذیری مراجعه کنید.

به عنوان یک کاربر نیز باید همواره جدیدترین و به‌روزترین نرم افزارها را استفاده کنید و اخبار IT را دنبال کنید تا به محض اعلام کشف نقص امنیتی در ابزارها یا نرم افزارهای مورد استفاده، سریع اقدام به اعمال وصله امنیتی ارائه شده از سمت سازنده، کنید. در صورت علاقمندی به کسب اطلاعات بیشتر در مورد سایر حملات مانند حملات متداول در سطح شبکه و راه‌های امن سازی آن‌ها  و یا معرفی حملات APT و راه‌های شناسایی و مقابله با آن می‌توانید به مقالات تخصصی وبلاگ آشنا ایمن مراجعه کنید. 

 
نویسنده: سمیرا سروعلیشاه دسته بندی: ارزیابی امنیتی