تیمی از محققان دانشگاه فنی گراتس (اتریش) و مرکز امنیت اطلاعات هلمهولتز (CISPA) یک آسیبپذیری (CVE-2021-26318) را در تمام پردازندههای AMD افشا کردهاند که امکان اجرای جانبی کلاس Meltdown را فراهم میکند. حملات کانال (در ابتدا فرض بر این بود که پردازنده های AMD تحت تأثیر آسیب پذیری Meltdown قرار نمی گیرند). از نظر عملی، این حمله می تواند برای ایجاد کانال های ارتباطی مخفی، نظارت بر فعالیت در هسته، یا به دست آوردن اطلاعاتی در مورد آدرس ها در حافظه هسته برای دور زدن حفاظت KASLR در حین سوء استفاده از آسیب پذیری ها در هسته استفاده شود.
AMD اتخاذ تدابیر ویژه برای جلوگیری از این مشکل را نامناسب میداند، زیرا این آسیبپذیری، مانند حمله مشابهی که در ماه آگوست کشف شد، در شرایط واقعی کاربرد چندانی ندارد، محدود به محدودههای فعلی فضای آدرس فرآیند است و نیاز به وجود موارد خاصی دارد. توالی های آماده دستورالعمل ها (گجت ها) در هسته. برای نشان دادن این حمله، محققان ماژول هسته خود را با یک ابزار مصنوعی اضافه کردند. در شرایط واقعی، مهاجمان میتوانند بهعنوان مثال، بهطور مرتب آسیبپذیریها را در زیرسیستم eBPF برای جایگزینی توالیهای لازم استفاده کنند.
برای محافظت در برابر این نوع جدید حمله، AMD استفاده از تکنیک های کدگذاری ایمن را توصیه می کند که به جلوگیری از حملات Meltdown کمک می کند، مانند استفاده از دستورالعمل های LFENCE. محققانی که مشکل را شناسایی کردند توصیه میکنند که جداسازی جدول صفحه حافظه سختتر (KPTI) را فعال کنید، که قبلا فقط برای پردازندههای اینتل استفاده میشد.
در طول آزمایش، محققان با توجه به وجود ابزاری در هسته که عملیات "if (offset < data_len) tmp = را انجام می دهد، موفق شدند اطلاعات را از هسته به یک فرآیند در فضای کاربر با سرعت 52 بایت در ثانیه نشت دهند. LUT[data[offset] * 4096];” . روشهای مختلفی برای بازیابی اطلاعات از طریق کانالهای جانبی که در حین اجرای حدسزنی به حافظه پنهان ختم میشوند، پیشنهاد شدهاند. روش اول مبتنی بر تجزیه و تحلیل انحرافات در زمان اجرای دستور پردازنده "PREFETCH" (Prefetch+Time) و روش دوم بر اساس تغییر تغییر در مصرف انرژی هنگام اجرای "PREFETCH" (PREFETCH+Power) است.
به یاد بیاورید که آسیبپذیری کلاسیک Meltdown بر این واقعیت استوار است که در طول اجرای گمانهزنی دستورالعملها، پردازنده میتواند به یک ناحیه داده خصوصی دسترسی داشته باشد و سپس نتیجه را کنار بگذارد، زیرا امتیازات تنظیم شده چنین دسترسی را از فرآیند کاربر ممنوع میکند. در برنامه، بلوک اجرا شده به صورت فرضی توسط یک شاخه شرطی از کد اصلی جدا می شود که در شرایط واقعی همیشه شلیک می شود، اما به دلیل این واقعیت است که دستور شرطی از مقدار محاسبه شده ای استفاده می کند که پردازنده در طول اجرای پیشگیرانه آن را نمی داند. کد، تمام گزینه های شعبه به صورت حدس و گمان انجام می شود.
از آنجایی که عملیاتهای اجرا شده به صورت فرضی از حافظه پنهان مشابه دستورالعملهای اجرا شده معمولی استفاده میکنند، میتوان نشانگرهایی را در حافظه پنهان تنظیم کرد که محتویات بیتهای جداگانه را در یک ناحیه حافظه خصوصی منعکس میکند و سپس در کدهایی که به طور معمول اجرا میشوند، مقدار آنها را از طریق زمانبندی تعیین کرد. تجزیه و تحلیل به داده های کش و غیر کش دسترسی دارد.
منبع: opennet.ru