سريز بافر از قديمي ترين مشكلات امنيتي سيستم هاي کامپيوتری بوده است. در این مقاله به بررسی حمله سر ریز بافر می پردازیم و سپس در پايان، روش هايي براي جلوگيري از اين نوع حملات ارائه خواهیم داد.
بافر رابط حافظه ای بین دو دستگاه یا سخت افزار می باشد. بافر وظیفه یکسان سازی و متعادل کردن سرعت پردازش های متفاوت را بر عهده دارد. برای مثال در هارددیسک ها، حافظه بافر وظیفه یکسان سازی سرعت انتقال اطلاعات از کامپیوتر به هارددیسک و بالعکس را عهده دار می باشد یا مثلا در رم برای ذخیره سازی اطلاعات موقت استفاده می شود.
در نوامبر سال ۱۹۹۶ مقاله ای توسط آقای آلف وان منتشر شد که نگاه جدیدی را در دنیای امنیت دیجیتال به وجود آورد. این مقاله توضیح می داد که چگونه ضعف در برنامه نویسی می تواند باعث دسترسی به یک نرم افزار یا از کارانداختن آن شود که این نوع حمله را سرریز بافر یا Buffer Overflow Attack می نامند.
بافر قسمتی از حافظه است که به طور موقت برای نگه داری اطلاعات یک نرم افزار اختصاص یافته است. اطلاعات پیش از رسیدن به محل اصلی در مکانی به نام بافر به صورت موقت ذخیره می شوند. بافر معمولا یک ظرفیت از پیش مشخص شده دارد که توسط برنامه نویس تعیین می شود.
Security Focus —–> حاوی ضعف هاي امنيتي نرم افزارهاي مختلف
بر طبق این سایت، حداقل 3/1 از اين ضعف ها مربوط به Buffer Overflow مي شوند. اين مشكل در تمام سيستم عامل ها ديده شده است.
تصور کنید نرم افزاری دارید که یک بافر با سایز ثابت ۱۲۸ بایت دارد. حال اگر مهاجم ۱۰۰۰ بایت دیتا برای این بافر ارسال کند، چه اتفاقی رخ می دهد؟ ظرف شما از آب پر می شود و سر ریز اتفاق می افتد. در چنین حالتی یک نرم افزار واکنش های متفاوتی از خودش بروز می دهد که قابل پیش بینی نیست.
در حمله سرریز بافر، یک فرآیند بیش از اندازه ی مورد نیاز خود اطلاعات دریافت می کند.
اگر این فرآیند به گونه ای طراحی نشده باشد که در چنین مواقعی از خود پاسخ درستی ارائه دهد، با به وجود آمدن چنین حالتی این امکان را برای مهاجم ایجاد می کند که از نرم افزار مربوطه سوء استفاده کند و موجب حمله سر ریز بافر شود. بعد از پر شدن بافر، برنامه دچار کرش می شود و بعد از آن می توان هر دستوری که میخواهیم به برنامه بدهیم (مثل تزریق کردن شل کد برای ایجاد دسترسی).
یک نوع حمله به نام Ping Of Death وجود دارد که در این نوع حمله مهاجم بسته های اطلاعاتی ICMP از نوع ECHO را با حجمی بیش از اندازه معمول آن، یعنی بیش تر از 65 کیلوبایت برای سرور مقصد ارسال می کند، اینکار می تواند باعث از کار افتادن سرور مقصد و به هم خوردن متغیرهای سیستم و در نهایت منجر به حمله سر ریز بافر شود.
Stack و Heap موقعیت های ذخیره سازی برای متغیرهای تامین شده توسط کاربر برای برنامه در حال اجرا هستند. متغیرها تا زمانی که برنامه به آنها نیاز داشته باشند در Heap و یا stack ذخیره سازی می شوند.
Stack فضاهای استاتیک و ایستای ذخیره سازی در حافظه هستند، در صورتی که Heaps فضاهای دینامیک و پویای ذخیره سازی هستند که وقتی برنامه اجرا می شود ایجاد می شوند.
به منظور تشخیص آسیب پذیری های سرریز بافر برنامه که در نتیجه سورس کد نوشته شده مخرب است، یک هکر مقادیر زیادی داده را از طریق وب فرم به اپلیکیشن ارسال می کند و نتیجه را مشاهده می کند.
اکثر هکرها نیازی به داشتن دانش درباره این کدها ندارند، زیرا کد های آماده زیادی در اینترنت وجود دارد.
سوء استفاده (Exploitation) از يك Stack بر مبناي Buffer overflow، در حالت كلي به فرآيند Overwrite كردن آدرسی از كد شل خودمان بر روي آدرس برگشت تابع اطلاق مي شود.
Heapview ابزاري است كه به كمك آن مي توان قسمت هايي از هيپ كه به برنامه اختصاص داده شده را به همراه تغييراتي كه در حين اجرای برنامه روي هيپ رخ مي دهد را مشاهده كرد. فرض كنيد برنامه ای منتظر باشد تا كاربر نام خود را وارد نمايد، ولي به جاي اينكه كاربر نامش را وارد كند، هكر يك دستور اجرايي را وارد می كند كه باعث سرريز بافر می شود. در نتيجه برنامه نمی تواند كار خود را ادامه دهد. حال برنامه در این قسمت، به دنبال يك راه بازگشت می گردد. زمانی كه برنامه برای دريافت داده از ورودی آماده می شود آدرسی براي بازگشت خود ذخيره می كند.
در این قسمت هكر وارد عمل شده و آدرس بازگشت برنامه را با آدرس يک دستور مخرب جا به جا مي كند. در نتيجه پس از وقوع سرريز، برنامه به سراغ دستور مخرب رفته و آن را اجرا مي كند، از طرفي از آنجایی كه اين دستور توسط اين برنامه اجرا می شود، اغلب با اولويت همان برنامه نيز اجرا می گردد و در نتيجه فرد هكر كنترل سيستم عامل را به دست می گيرد.