آسیب‌پذیری‌هایی در زیرسیستم eBPF که امکان دور زدن محافظت در برابر حملات Spectre را فراهم می‌کند

یک آسیب‌پذیری در هسته لینوکس (CVE-2021-33624) شناسایی شده است که به زیرسیستم eBPF اجازه می‌دهد تا از محافظت در برابر آسیب‌پذیری‌های کلاس Spectre استفاده کند، که تعیین محتوای حافظه را در نتیجه ایجاد شرایط برای اجرای سوداگرانه برخی عملیات حمله Spectre مستلزم وجود توالی خاصی از دستورات در کدهای ممتاز است که منجر به اجرای گمانه‌زنی دستورالعمل‌ها می‌شود. با دستکاری برنامه های BPF که برای اجرا ارسال می شوند، می توان دستورالعمل های مشابهی را در eBPF تولید کرد و محتویات حافظه هسته و مناطق دلخواه حافظه فیزیکی را از طریق کانال های جانبی به بیرون درز کرد.

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

این مشکل از زمان انتشار کرنل 4.15 ظاهر شد و در قالب پچ ها (1، 2، 3، 4) برطرف شد. این آسیب‌پذیری در توزیع‌ها (Debian، RHEL، Ubuntu، Fedora، SUSE، Arch) ثابت می‌ماند.

علاوه بر این، می‌توانید به یادداشتی درباره تأثیر عملکرد ابزارها برای محافظت در برابر آسیب‌پذیری‌های Spectre توجه کنید. این یادداشت نتایج بهینه‌سازی اشکال‌زدای rr (Record and Replay) را که زمانی در موزیلا برای اشکال‌زدایی خطاهای تکرارشونده در فایرفاکس ایجاد شده بود، خلاصه می‌کند. ذخیره کردن تماس‌های سیستمی که برای بررسی وجود دایرکتوری‌ها استفاده می‌شود، عملیات "rr source" را برای پروژه آزمایشی از 3 دقیقه و 19 ثانیه به 36 ثانیه کاهش داد.

نویسنده بهینه سازی تصمیم گرفت بررسی کند که عملکرد پس از غیرفعال کردن حفاظت Spectre چگونه تغییر می کند. پس از بوت شدن سیستم با پارامتر “mitigations=off”، زمان اجرای “rr sources” بدون بهینه سازی 2 دقیقه و 5 ثانیه (1.6 برابر سریعتر) و با بهینه سازی 33 ثانیه (9% سریعتر) بود. جالب اینجاست که غیرفعال کردن حفاظت Spectre نه تنها زمان اجرای کد در سطح هسته را 1.4 برابر (از 2m9s به 1m32s) کاهش داد، بلکه زمان اجرا را در فضای کاربر به نصف کاهش داد (از 1m9s به 0m33s)، احتمالاً به دلیل کاهش راندمان عملیات حافظه پنهان CPU و TTB. هنگامی که حفاظت Spectre فعال باشد، بازنشانی می شود.

منبع: opennet.ru

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