هکرها می توانند با به حداکثر رساندن ظرفیت ذخیره سازی سرویس، کنترل یک سیستم را در دست بگیرند. بنابراین چگونه هکرها چنین حملات سرریز بافر را انجام می دهند؟
چگونه هکرها با استفاده از ویروس ها و بدافزارها به سیستم ها حمله می کنند؟ گاهی اوقات، ممکن است باج افزار باشد. گاهی اوقات، ممکن است حمله ای باشد که نیازهای سیستم شما را مصرف کند. سرریز بافر یکی از این روش های حمله است – اما در واقع چیست؟ این حملات چگونه کار می کنند؟
سرریز بافر چیست؟
بنابراین در واقع یک بافر و پشته چیست؟ بافر فیلدی است که در آن برخی از اطلاعات ورودی که به رایانه خود می دهید قبل از رسیدن به حافظه منتظر می مانند. فراخوانی داده ها از حافظه یک عملیات خسته کننده سیستم است. بنابراین وقتی فضای کافی در ناحیه بافر وجود دارد، داده ها را مستقیماً از اینجا فراخوانی می کنید. این به معنای افزایش عملکرد دستگاه شما است. البته زمانی که فضای موجود برای بافر پر شود، نوشتن آن در حافظه ضروری می شود.
پشته اساسا یک ساختار داده است که در آن عملیات فشار داده (افزودن) و پاپ (حذف) انجام می شود. مفاهیم بافر و پشته کاملا مشابه هستند. با این حال، بافر مانند یک پشته کار می کند که به طور موقت داده های دریافتی را ذخیره می کند.
سرریز بافر می تواند یک موضوع چالش برانگیز باشد، اما همانطور که از نام آن پیداست، زمانی اتفاق می افتد که داده ها بیش از حد وجود داشته باشد. به عنوان مثال، شما می خواهید وارد یک سیستم شوید. توسعه دهندگان ممکن است 250 بایت فضا برای نام کاربری اختصاص دهند. اگر 300 بایت داده را وارد کنید، بافر سرریز می شود. این سرریز می تواند بر دیگر داده های موجود در حافظه تأثیر بگذارد و باعث آسیب شود.
این برای هکرها عالی است. مجرمان سایبری می توانند این آشفتگی را با بردارهای حمله مختلف ترکیب کنند، به عنوان مثال، سیستم را هک کرده و به عنوان یک مدیر وارد سیستم شوند.
برای درک سرریز بافر، موضوعات اصلی که باید بشناسید معماری داخلی CPU، رجیسترهای حافظه و نحوه پردازش داده ها توسط حافظه است. در اینجا چند اصطلاح در مورد CPU وجود دارد که باید در مورد آنها بدانید.
کد مونتاژ
یک زبان برنامه نویسی سطح پایین، یعنی نزدیک به زبان ماشین.
بافر
اندازه ثابت فضای حافظه اختصاص داده شده است.
کد بایت
یک فرم کد زبان میانی قابل کامپایل که در یک زبان سطح بالا نوشته شده است.
کامپایلر
برنامه ای که زبان برنامه نویسی را به کد ماشین تبدیل می کند.
پشته
فضای حافظه متغیر و پویا
مبانی تئوری حافظه
بدون درک نظریه حافظه، پرداختن به مسائل سرریز بافر در عمل دشوار است. شما می توانید آن را مانند تلاش برای ساختن یک خانه بدون دانستن نحوه ساخت دیوار در نظر بگیرید.
تصور کنید که می خواهید یک سرریز بافر از دیدگاه یک هکر اجرا کنید. برای این کار، باید حافظه را دستکاری کنید و CPU کد شما را اجرا کند. اگر فردی با قصد مخرب بودید، هدف شما در اینجا بارگذاری بیش از حد حافظه و دستکاری مناطق پیوسته حافظه نیز بود.
اما اول از همه، شما باید بر روی مفاهیم پشته، پشته و بخش متن تمرکز کنید.
در حالی که پشته در حال ایجاد است، حافظه از آدرس های حافظه بالایی استفاده می کند. آدرس های حافظه بالا به معنای منطقه حافظه گسترده است. سپس مقادیر آدرس شروع به کاهش می کند. پشته حافظه از روشی به نام LIFO (آخرین ورود، اولین خروج) در طول استفاده از حافظه استفاده می کند. متغیرها در حافظه پشته فقط در محدوده ای که در آن تعریف شده اند معتبر هستند. اگر خارج از این محدوده باشند، خطایی رخ می دهد.
از طرف دیگر، حافظه پشته ای به صورت پویا کار می کند و نیازی نیست که از آدرس های بالا شروع شود. هیچ محدودیتی برای حافظه پشته وجود ندارد. تمام محدودیت ها توسط سیستم عامل تعیین می شود. امکان تغییر حافظه هیپ به صورت پویا وجود دارد و این محدودیت ها ممکن است با توجه به نیاز کاربر در طول استفاده از هیپ تغییر کند. محدودیت های حافظه پشته به عوامل تعیین شده توسط سیستم عامل و سخت افزار بستگی دارد. به عبارت دیگر، استفاده پویا را در این محدودیت ها ارائه می دهد.
بخش متن شامل کد برنامه و بخش داده حاوی داده های سراسری است. آدرس های بالا حافظه پشته و پشته را بین خود به اشتراک می گذارند. سیستم هر دو حافظه را در زمان اجرا تخصیص می دهد.
برای درک بهتر سرریز بافر، باید رجیسترهای داده همه منظوره را که معماری رایانه شما برای ذخیره داده ها استفاده می کند، بررسی کنید. به جای تجزیه و تحلیل هر رکورد به صورت جداگانه، روی موارد ضروری تمرکز کنید.
- ESP (Extended Stack Pointer): این رجیستر آدرس را در بالای پشته نگه می دارد.
- EBP (Extended Base Pointer): این نشانگر پایه را نگه می دارد.
- EIP (Extended Instruction Pointer): و این رجیستر آدرس دستور بعدی را که باید اجرا شود را نگه می دارد.
این اصطلاحات فنی ممکن است کمی گیج کننده به نظر برسند، اما همه آنها را به عنوان پارتیشن های کوچک روی حافظه تصور کنید.
حملات سرریز بافر چگونه کار می کنند؟
وقتی دادههای جدیدی را به هر پشته اضافه میکنید، این دادهها در بالای صفحه قرار میگیرند. سپس تمام داده های جدید به پایین منتقل می شوند. ESP در بالای پشته قرار دارد. بنابراین در این مورد ESP به یک آدرس حافظه پایین تر می رود. تصور کنید که داده های اضافه شده در بالا ESP را پایین می آورند.
هنگامی که یک برنامه شروع به اجرا می کند، سیستم یک قاب پشته با متغیرهای محلی ایجاد می کند. هدف اصلی حمله سرریز بافر، دسترسی به EIP یا آدرس بازگشت است. یک هکر با دسترسی به این آدرس میتواند به آن دستور دهد تا به هر کد مخربی که میخواهد اشاره کند، که سپس سیستم گستردهتری را تحت تأثیر قرار میدهد.
با هر بیت داده جدید، پشته به سمت EBP رشد می کند. سوال واقعی در اینجا این است که اگر داده های زیادی وارد کنیم، آیا می توانیم EBP را به سمت EIP سوق دهیم؟ به این ترتیب داده یا کد مورد نظر شما در EIP قرار می گیرد و می توانید نتایج مورد نظر خود را مشاهده کنید. تنها چیزی که باقی می ماند اجرای آن است. وقتی برنامه را اجرا می کنید، به کد EIP شما اشاره می کند و اجرا را شروع می کند. در نتیجه، اگر یک هکر بودید، اولین حمله سرریز بافر خود را انجام می دادید.
برای در نظر گرفتن مثال از زاویهای دیگر، میتوانید مایعاتی با چگالیهای مختلف به نامهای ESP، EBP و EIP را در یک ظرف در نظر بگیرید. تصور کنید که ESP در بالای ظرف قرار دارد زیرا چگالی آن کمتر است. درست مثل روغن زیتون و آب نباید با هم مخلوط شوند. بنابراین، کد مخرب مایع دیگری است – وقتی آن را به ظرف اضافه میکنید، تعادل را به هم میریزد، مقداری مایع را جابجا میکند و با EIP مخلوط میشود. این نشان دهنده سرریز بافر است.
نحوه محافظت در برابر حملات سرریز بافر
پس چگونه از این اتفاق جلوگیری می کنید؟
در مرحله اول، اتخاذ شیوه کدنویسی خوب در طول فرآیند توسعه نرم افزار برای به حداقل رساندن آسیب پذیری های امنیتی مهم است. کد نوشته شده با دقت می تواند احتمال سرریز شدن بافر را کاهش دهد.
گام دیگر استفاده از مکانیسمهای دفاعی برای نظارت بر مناطق حافظه، بررسی محدودیتهای بافرها و شناسایی حملات است. در نهایت، شما باید به طور منظم سیستم ها را به روز کنید و وصله ها را اعمال کنید. بهروزرسانیهایی که آسیبپذیریها را برطرف میکنند، سوء استفاده از آسیبپذیریهای شناختهشده را برای مهاجمان سختتر میکنند. همچنین استفاده از ابزارهای دفاعی مانند نرم افزار و فایروال یک لایه امنیتی اضافی را فراهم می کند.
در برابر سرریزهای بافر اقدام کنید
حملات سرریز بافر تهدید قابل توجهی برای امنیت سایبری شما به شمار میرود و انجام اقدامات احتیاطی در برابر آنها طبیعتاً مهم است. خوشبختانه امکان جلوگیری از این حملات و تقویت مکانیسم های دفاعی وجود دارد. بسیاری از اقدامات امنیتی خوب، مانند به روز نگه داشتن نرم افزار برای رفع وصله ها، به محافظت در برابر چنین حملاتی و همچنین آسیب پذیری های دیگر کمک می کند.