شرایط مسابقه در جمع‌آوری زباله هسته لینوکس که می‌تواند منجر به افزایش امتیاز شود

Jann Horn از تیم Google Project Zero که زمانی آسیب‌پذیری‌های Spectre و Meltdown را شناسایی کرده بود، تکنیکی را برای بهره‌برداری از یک آسیب‌پذیری (CVE-2021-4083) در جمع‌آوری زباله هسته لینوکس منتشر کرد. این آسیب‌پذیری به دلیل شرایط مسابقه‌ای هنگام پاک‌سازی توصیف‌گرهای فایل در سوکت‌های یونیکس است و به طور بالقوه به یک کاربر غیرمجاز محلی اجازه می‌دهد تا کد خود را در سطح هسته اجرا کند.

مشکل جالب است زیرا پنجره زمانی که در طی آن شرایط مسابقه رخ می‌دهد برای ایجاد اکسپلویت‌های واقعی بسیار کوچک تخمین زده می‌شود، اما نویسنده این مطالعه نشان داد که حتی چنین آسیب‌پذیری‌های بدبینانه اولیه می‌توانند به منبع حملات واقعی تبدیل شوند، اگر خالق اکسپلویت مهارت ها و زمان لازم Yann Horn نشان داد که چگونه با کمک دستکاری‌های فیلیگرن می‌توانید شرایط مسابقه‌ای را که هنگام فراخوانی توابع close() و fget() به طور همزمان به یک آسیب‌پذیری کاملاً قابل بهره‌برداری پس از استفاده آزاد شده کاهش دهید و به داده‌های آزاد شده دسترسی پیدا کنید. ساختار داخل هسته

یک شرط مسابقه در طی فرآیند بستن یک توصیفگر فایل در حالی که همزمان () close و ()fget را فراخوانی می‌کند، رخ می‌دهد. فراخوانی ()close ممکن است قبل از اجرای fget() اتفاق بیفتد، که جمع‌آورنده زباله را گیج می‌کند، زیرا طبق refcount، ساختار فایل ارجاعات خارجی نخواهد داشت، اما به توصیف‌گر فایل پیوست می‌ماند. زباله جمع کن فکر می کند که دسترسی انحصاری به سازه دارد، اما در واقع، برای مدت کوتاهی، ورودی باقیمانده در جدول توصیفگر فایل همچنان به آزاد شدن سازه اشاره می کند.

برای افزایش احتمال قرار گرفتن در شرایط مسابقه، از چندین ترفند استفاده شد که امکان افزایش احتمال موفقیت بهره برداری را تا 30٪ در هنگام معرفی بهینه سازی های خاص سیستم فراهم کرد. به عنوان مثال، برای افزایش زمان دسترسی به یک ساختار با توصیفگرهای فایل تا چند صد نانوثانیه، داده‌ها از حافظه نهان پردازنده با پر کردن حافظه پنهان با فعالیت در هسته CPU دیگر حذف شدند، که امکان بازیابی ساختار را از حافظه به جای از حافظه فراهم کرد. حافظه نهان سریع CPU

دومین ویژگی مهم استفاده از وقفه های تولید شده توسط تایمر سخت افزاری برای افزایش زمان شرایط مسابقه بود. لحظه انتخاب شد تا کنترل کننده وقفه زمانی که شرایط مسابقه رخ می دهد شلیک کند و اجرای کد را برای مدتی قطع کند. برای تأخیر بیشتر در بازگشت کنترل، حدود 50 هزار ورودی در صف انتظار با استفاده از epoll ایجاد شد که نیاز به جستجو از طریق کنترل کننده وقفه داشت.

تکنیک برای بهره برداری از آسیب پذیری پس از یک دوره عدم افشای 90 روزه فاش شد. مشکل از هسته 2.6.32 ظاهر شد و در اوایل دسامبر برطرف شد. این اصلاح در هسته 5.16 گنجانده شد و همچنین به شاخه های LTS هسته و بسته های هسته عرضه شده در توزیع ها منتقل شد. قابل توجه است که این آسیب پذیری در هنگام تجزیه و تحلیل یک مشکل مشابه CVE-2021-0920 شناسایی شد که در هنگام پردازش پرچم MSG_PEEK خود را در جمع کننده زباله نشان می دهد.

منبع: opennet.ru

اضافه کردن نظر