گروهی از محققان دانشگاههای چین و آمریکا آسیبپذیری جدیدی را در پردازندههای اینتل شناسایی کردهاند که منجر به نشت اطلاعات شخص ثالث در مورد نتیجه عملیاتهای احتمالی میشود، که میتواند به عنوان مثال برای سازماندهی یک کانال ارتباطی پنهان بین فرآیندها یا شناسایی نشت در طول حملات Meltdown.
ماهیت آسیبپذیری این است که تغییر در رجیستر پردازنده EFLAGS که در نتیجه اجرای گمانهزنی دستورالعملها رخ میدهد، بر زمان اجرای بعدی دستورالعملهای JCC تأثیر میگذارد (پرش در صورت برآورده شدن شرایط مشخص). عملیات گمانه زنی کامل نمی شود و نتیجه حذف می شود، اما تغییر EFLAGS حذف شده را می توان با تجزیه و تحلیل زمان اجرای دستورالعمل های JCC تعیین کرد. عملیات مقایسه انجام شده در حالت حدس و گمان قبل از انتقال، در صورت موفقیت آمیز بودن، منجر به تاخیر کوچکی می شود که می تواند اندازه گیری شود و به عنوان نشانه ای برای انتخاب محتوا استفاده شود.
بر خلاف سایر حملات کانال جانبی مشابه، روش جدید تغییرات در زمان دسترسی به دادههای ذخیرهشده و ذخیرهنشده را تجزیه و تحلیل نمیکند و نیازی به مرحلهای برای بازنشانی رجیستر EFLAGS به حالت اولیهاش ندارد، که تشخیص و مسدود کردن حمله را دشوار میکند. به عنوان یک نمایش، محققان با استفاده از روشی جدید برای به دست آوردن اطلاعات در مورد نتیجه یک عملیات گمانهزنی، نوعی از حمله Meltdown را اجرا کردند. عملکرد روش سازماندهی نشت اطلاعات در طول حمله Meltdown در سیستم هایی با پردازنده Core i7-6700 و i7-7700 اینتل در محیطی با اوبونتو 22.04 و هسته لینوکس 5.15 با موفقیت نشان داده شد. در سیستمی با پردازنده Intel i9-10980XE، حمله فقط تا حدی انجام شد.
آسیبپذیری Meltdown بر این واقعیت استوار است که در حین اجرای گمانهزنی دستورالعملها، پردازنده میتواند به یک ناحیه داده خصوصی دسترسی داشته باشد و سپس نتیجه را کنار بگذارد زیرا امتیازات تنظیم شده چنین دسترسی را از فرآیند کاربر منع میکند. در برنامه، بلوک اجرا شده به صورت فرضی توسط یک شاخه شرطی از کد اصلی جدا می شود که در شرایط واقعی همیشه شلیک می شود، اما به دلیل این واقعیت است که دستور شرطی از مقدار محاسبه شده ای استفاده می کند که پردازنده در طول اجرای پیشگیرانه آن را نمی داند. کد، تمام گزینه های شعبه به صورت حدس و گمان انجام می شود.
در نسخه کلاسیک Meltdown، از آنجایی که حافظه نهان برای عملیاتهای اجرا شده به صورت فرضی مانند دستورالعملهای اجرا شده معمولی استفاده میشود، میتوان در حین اجرای حدسی، نشانگرهایی را در حافظه پنهان تنظیم کرد که محتویات تک تک بیتها را در یک ناحیه حافظه بسته منعکس کند، و سپس از طریق تجزیه و تحلیل زمان دسترسی به داده های ذخیره شده و ذخیره نشده، معنای آنها را در کدهای اجرا شده معمولی تعیین کنید. نوع جدید از تغییر در رجیستر EFLAGS به عنوان نشانگر نشت استفاده می کند. در نمایش کانال مخفی، یک فرآیند، داده های ارسال شده را برای ایجاد شرایط برای تغییر محتویات ثبت EFLAGS تعدیل کرد، و فرآیندی دیگر تغییر در زمان اجرای دستورالعمل JCC را تجزیه و تحلیل کرد تا داده های ارسال شده توسط اولین فرآیند را دوباره ایجاد کند.
منبع: opennet.ru