گروهی از محققان ETH زوریخ حمله جدیدی را به مکانیسم اجرای گمانهزنی انتقالهای غیرمستقیم در CPU شناسایی کردهاند که استخراج اطلاعات از حافظه هسته یا سازماندهی حمله به سیستم میزبان از ماشینهای مجازی را ممکن میسازد. این آسیبپذیریها با اسم رمز Retbleed (CVE-2022-29900, CVE-2022-29901) هستند و ماهیت آنها به حملات Spectre-v2 نزدیک است. تفاوت به سازماندهی اجرای گمانه زنی کد دلخواه در هنگام پردازش دستور "ret" (بازگشت) می رسد، که آدرس را برای پرش از پشته، به جای پرش غیرمستقیم با استفاده از دستورالعمل "jmp"، بارگیری آدرس از پشته، واکشی می کند. حافظه یا رجیستر CPU
یک مهاجم می تواند شرایطی را برای پیش بینی نادرست انتقال ایجاد کند و یک انتقال هدفمند و گمانه زنی را به یک بلوک کد که توسط منطق اجرای برنامه ارائه نشده است، سازماندهی کند. در نهایت، پردازنده تشخیص خواهد داد که پیشبینی انشعاب موجه نبوده و عملیات را به حالت اولیه خود برمیگرداند، اما دادههای پردازش شده در طول اجرای حدسی در حافظه پنهان و بافرهای ریزمعماری ختم میشوند. اگر یک بلوک به اشتباه اجرا شده به حافظه دسترسی پیدا کند، اجرای احتمالی آن منجر به ذخیره داده های خوانده شده از حافظه در حافظه پنهان مشترک می شود.
برای تعیین دادههای باقیمانده در حافظه پنهان پس از عملیات گمانهزنی، مهاجم میتواند از تکنیکهای کانال جانبی برای تعیین دادههای باقیمانده استفاده کند، مانند تجزیه و تحلیل تغییرات در زمان دسترسی به دادههای ذخیرهشده و ذخیره نشده. برای استخراج هدفمند اطلاعات از مناطق در سطح امتیاز دیگر (به عنوان مثال، از حافظه هسته)، از "ابزارها" استفاده می شود - دنباله ای از دستورات موجود در هسته که برای خواندن فرضی داده ها از حافظه بسته به شرایط خارجی که می تواند تحت تأثیر قرار گیرد مناسب است. مهاجم
برای محافظت در برابر حملات کلاسیک کلاس Spectre که از دستورالعملهای پرش شرطی و غیرمستقیم استفاده میکنند، اکثر سیستمعاملها از تکنیک «retpoline» استفاده میکنند که مبتنی بر جایگزینی عملیات پرش غیرمستقیم با دستورالعمل «ret» است، که برای آن پردازندهها از یک واحد پیشبینی وضعیت پشته جداگانه استفاده میکنند. عدم استفاده از بلوک پیش بینی شاخه. هنگامی که retpoline در سال 2018 معرفی شد، اعتقاد بر این بود که دستکاری آدرس شبه Spectre برای شاخهبندی گمانهزنی با استفاده از دستورالعمل «ret» عملی نیست.
محققانی که روش حمله Retbleed را توسعه دادند، امکان ایجاد شرایط ریزمعماری را برای شروع یک انتقال گمانهزنی با استفاده از دستورالعمل «ret» نشان دادند و ابزارهای آمادهای را برای شناسایی دنبالهای از دستورالعملها (گجتها) مناسب برای بهرهبرداری از آسیبپذیری در هسته لینوکس منتشر کردند. که در آن چنین شرایطی خود را نشان می دهد.
در طول این تحقیق، یک اکسپلویت کاری تهیه شد که در سیستمهایی با پردازندههای مرکزی اینتل، امکان استخراج دادههای دلخواه از حافظه هسته از یک فرآیند غیرمجاز در فضای کاربر را با سرعت ۲۱۹ بایت در ثانیه و دقت ۹۸ درصد فراهم میکند. در پردازنده های AMD، راندمان اکسپلویت بسیار بالاتر است – نرخ نشت 219 کیلوبایت در ثانیه است. به عنوان یک مثال عملی، نحوه استفاده از اکسپلویت پیشنهادی برای تعیین محتویات فایل /etc/shadow را نشان میدهیم. در سیستمهای دارای CPU اینتل، حمله برای تعیین هش رمز عبور کاربر ریشه در 98 دقیقه و در سیستمهای دارای CPU AMD - در 3.9 دقیقه انجام شد.
این حمله برای نسلهای 6 تا 8 پردازندههای اینتل که قبل از سه ماهه سوم 3 منتشر شده بودند (از جمله Skylake) و پردازندههای AMD بر اساس ریزمعماری Zen 2019، Zen 1+ و Zen 1 که قبل از سه ماهه دوم 2 منتشر شده بودند، تأیید شده است. در مدل های جدیدتر پردازنده مانند AMD Zen2021 و Intel Alder Lake و همچنین در پردازنده های ARM، مشکل توسط مکانیسم های حفاظتی موجود مسدود شده است. به عنوان مثال، استفاده از دستورالعمل های IBRS (Indirect Branch Restricted Speculation) به محافظت در برابر حملات کمک می کند.
مجموعه ای از تغییرات برای هسته لینوکس و هایپروایزر Xen آماده شده است که مشکل را در نرم افزارهای CPU های قدیمی مسدود می کند. پچ پیشنهادی برای هسته لینوکس 68 فایل را تغییر می دهد، 1783 خط اضافه می کند و 387 خط را حذف می کند. متأسفانه، حفاظت منجر به هزینه های سربار قابل توجهی می شود - در متون انجام شده بر روی پردازنده های AMD و Intel، کاهش عملکرد از 14٪ به 39٪ برآورد شده است. استفاده از حفاظت بر اساس دستورالعمل های IBRS که در نسل های جدید پردازنده های اینتل موجود است و با هسته لینوکس 4.19 پشتیبانی می شود، ترجیح داده می شود.
در پردازندههای اینتل، جایگزینی آدرس برای یک جهش غیرمستقیم گمانهزنی انجام میشود، به لطف ویژگیای که وقتی سرریز از طریق کران پایین (زیر جریان) در بافر Return Stack رخ میدهد، ظاهر میشود. هنگامی که چنین شرایطی رخ می دهد، دستورالعمل "ret" شروع به اعمال منطق انتخاب آدرس مشابه آنچه برای پرش های غیر مستقیم معمولی استفاده می شود، می کند. بیش از هزار مکان در هسته لینوکس پیدا شده است که شرایطی را برای شروع چنین جریان برگشتی ایجاد می کند و از طریق تماس های سیستمی قابل دسترسی است.
در پردازنده های AMD، اجرای نظری دستور "ret" بدون ارجاع به یک بافر خاص پشته (Return Address Stack) انجام می شود و واحد پیش بینی شاخه، دستورالعمل "ret" را نه به عنوان یک بازگشت کنترل، بلکه به عنوان یک شاخه غیرمستقیم در نظر می گیرد. ، و بر این اساس، از داده ها برای پیش بینی انتقال غیر مستقیم استفاده می کند. تحت این شرایط، عملاً هر عملیات "ret" قابل دستیابی از طریق یک فراخوانی سیستم می تواند مورد سوء استفاده قرار گیرد.
علاوه بر این، مشکل دیگری نیز در CPU های AMD (CVE-2022-23825، Branch Type Confusion) مربوط به اجرای شاخه های ساختگی شناسایی شده است - شرایط برای پیش بینی شاخه می تواند حتی بدون دستورالعمل های شاخه لازم رخ دهد، که اجازه می دهد تا بر بافر پیش بینی شاخه تأثیر بگذارد. بدون دستورالعمل "ret". این ویژگی به طور قابل توجهی اجرای حفاظت را پیچیده می کند و نیاز به تمیز کردن فعال تر بافر پیش بینی شاخه دارد. انتظار میرود افزودن حفاظت کامل به هسته، هزینه سربار را تا 209 درصد افزایش دهد.
منبع: opennet.ru