بهره برداری از مراجع تهی در هسته لینوکس
اخیراً خبری منتشر شد که محققان تیم Google Project Zero توسعه داده اند un روشی برای بهره برداری از آسیب پذیری ها در هسته لینوکس ناشی از عدم ارجاع نشانگر NULL.
تا به حال، چالش ها و مسائل در مربوط به کرنل با عدم ارجاع به نشانگرهای NULL توجه لازم را دریافت نکرده اند، از آنجایی که تبدیل چنین مشکلاتی به حملاتی که منجر به افزایش امتیاز یا اجرای کد شخصی می شود غیرواقعی تلقی می شد (ممنوع از نگاشت فرآیندهای غیرمجاز در منطقه پایینی فضای آدرس).
به عنوان یک قانون کلی، چنین خطاهایی منجر به تولید هشدارهای oops می شود توسط کرنل، پس از آن وظایف مشکل ساز تکمیل شده و وضعیت بدون نیاز به توقف سیستم بازیابی می شود.
روش حمله جدید مبتنی بر مدیریت حالت های "اوپس" است، که می تواند منجر به افزایش مقدار شمارنده مرجع (recount) شود که به نوبه خود می تواند باعث سرریز شدن شمارنده و آزاد شدن حافظه مرتبط با refcount شود.
در این مورد، بهرهبرداری به دستکاریهای معمولی برای حملات بدون استفاده کاهش مییابد (موقعیتی پیش میآید که تعداد مرجع شی صفر میشود، حافظه آزاد میشود، اما در واقع پیوندهای کاری وجود دارند که به حافظه آزاد شده اشاره میکنند).
در حال حاضر، هنگامی که هسته لینوکس یک ارجاع تهی را از درون یک زمینه فرآیند ایجاد می کند، یک اوه ، که با وحشت هسته متفاوت است. وحشت زمانی رخ می دهد که هسته تشخیص دهد که هیچ راه مطمئنی برای ادامه اجرا وجود ندارد و بنابراین تمام اجراها باید متوقف شوند. با این حال، هسته نه تمام اجراها را برای یک اوپس متوقف می کند. در عوض، هسته سعی می کند تا جایی که می تواند بازیابی کند و به اجرا ادامه می دهد.
عدم ارجاع یک اشاره گر NULL در اینجا به عنوان راهی برای ایجاد حالت "اوپس" به شیوه ای کنترل شده استفاده می شود. مشکل این است که حدود 232 تماس وضعیت "اوپس" طول می کشد تا به سرریز مجدد 32 بیتی برسد.
از نظر عملی ، برای انجام یک حمله، حدود 8 روز تولید مداوم حالت های "اوپس" طول می کشد با استفاده از اکسپلویت پیشنهادی در صورت موفقیت آمیز بودن، این اکسپلویت به شما اجازه می دهد تا به اجرای کد در سطح هسته برسید.
اشاره گر NULL استفاده شده در این اکسپلویت در ماه اکتبر برطرف شد، اما از آنجایی که مشکلات مشابه غیر معمول نیستند و قبلاً به عنوان باگ و نه آسیب پذیری تلقی می شدند، توسعه دهندگان حفاظت کلی را به هسته لینوکس اضافه می کنند تا از حملاتی که تولید "oops را دستکاری می کنند" جلوگیری کنند. "
در مورد یک وظیفه، این به معنای دور انداختن پشته هسته موجود و رفتن مستقیم به make_task_dead است که do_exit را فراخوانی میکند. هسته همچنین یک گزارش "خرابی" و یک ردیابی هسته را به dmesg ارسال می کند که نشان می دهد هسته در چه وضعیتی در زمان وقوع خطا بوده است. زمانی که خرابی حافظه به وضوح رخ داده است، ممکن است این یک انتخاب عجیب به نظر برسد. با این حال، هدف این است که باگهای هسته شناسایی و ثبت آن آسانتر شود، با این فلسفه که اشکالزدایی یک سیستم در حال اجرا بسیار آسانتر از سیستم پایین است.
به طور خاص، کرنل 6.2 شامل تغییراتی برای محدود کردن حداکثر تعداد "اوپس" است. پس از رسیدن به حد مجاز، که به طور پیش فرض روی 10 هزار اوپ تنظیم شده است (اگر بخواهید می توانید آن را از طریق پارامتر oops_limit تغییر دهید)، هسته انتقال به حالت "Panic" را آغاز می کند و به دنبال آن یک راه اندازی مجدد، که اجازه نمی دهد. تعداد تکرارهای مورد نیاز برای بازنشانی شمارش مجدد به صفر.
همچنین برنامهریزی شده است که این محدودیت به شاخههای هستهای که قبلا منتشر شده بود، اما همچنان پشتیبانی میشوند، و همچنین بستههای هسته توزیعهای محبوب منتقل شود.
سرانجام اگر شما علاقه مند به دانستن بیشتر در مورد آن هستید، می توانید جزئیات را در قسمت لینک زیر
اولین کسی باشید که نظر