گروهی از محققان دانشگاه فنی درسدن آسیب پذیری (CVE-2020-12965) را در پردازنده های AMD بر اساس ریزمعماری Zen+ و Zen 2 شناسایی کرده اند که امکان حمله کلاس Meltdown را فراهم می کند. در ابتدا فرض بر این بود که پردازندههای AMD Zen+ و Zen 2 در معرض آسیبپذیری Meltdown نیستند، اما محققان ویژگیای را شناسایی کردند که منجر به دسترسی احتمالی به مناطق حفاظتشده حافظه هنگام استفاده از آدرسهای مجازی غیر متعارف میشود.
معماری AMD64 فقط از 48 بیت اول آدرس مجازی استفاده می کند و 16 بیت باقی مانده را نادیده می گیرد. مشخص شده است که بیت های 48 تا 63 همیشه باید مقدار بیت 47 (پسوند بیت علامت) را کپی کنند. اگر این شرط نقض شود و تلاش برای دسترسی به آدرسی با مقادیر دلخواه بیت های بالایی انجام شود، پردازنده یک استثنا ایجاد می کند. پر کردن مکرر بیتهای بالایی باعث میشود فضای آدرس موجود به دو بلوک تقسیم شود - یک بلوک پایین (از 0 تا 00007FFFFFFFFFFFFFF)، که در آن بیتهای بالایی روی 800000000000 تنظیم شدهاند، و یک بلوک بالا (از FFFF1 تا FFFFFFFFFFFFFFFFFFFFFF) تمام بیت های بالایی روی XNUMX تنظیم شده اند.
آدرسهایی که در بلوکهای مشخص شده قرار میگیرند، متعارف و آدرسهای نادرست با محتوای دلخواه بیتهای بالایی، غیر متعارف نامیده میشوند. محدوده پایینتر آدرسهای متعارف معمولاً برای دادههای فرآیند اختصاص داده میشود و محدوده بالایی برای دادههای هسته استفاده میشود (دسترسی به این آدرسها از فضای کاربر در سطح جداسازی امتیاز مسدود شده است).
آسیبپذیری کلاسیک Meltdown بر این واقعیت استوار است که در طول اجرای گمانهزنی دستورالعملها، پردازنده میتواند به یک ناحیه داده خصوصی دسترسی داشته باشد و سپس نتیجه را کنار بگذارد زیرا امتیازات تنظیم شده چنین دسترسی را از فرآیند کاربر منع میکند. در برنامه، بلوک اجرا شده به صورت فرضی توسط یک شاخه شرطی از کد اصلی جدا می شود که در شرایط واقعی همیشه شلیک می شود، اما به دلیل این واقعیت است که دستور شرطی از مقدار محاسبه شده ای استفاده می کند که پردازنده در طول اجرای پیشگیرانه آن را نمی داند. کد، تمام گزینه های شعبه به صورت حدس و گمان انجام می شود.
از آنجایی که عملیاتهای اجرا شده به صورت فرضی از حافظه پنهان مشابه دستورالعملهای اجرا شده معمولی استفاده میکنند، میتوان نشانگرهایی را در حافظه پنهان تنظیم کرد که محتویات بیتهای جداگانه را در یک ناحیه حافظه خصوصی منعکس میکند و سپس در کدهایی که به طور معمول اجرا میشوند، مقدار آنها را از طریق زمانبندی تعیین کرد. تجزیه و تحلیل به داده های کش و غیر کش دسترسی دارد.
یکی از ویژگیهای آسیبپذیری جدید که بر پردازندههای AMD Zen+ و Zen 2 تأثیر میگذارد این است که پردازندهها به عملیات خواندن و نوشتن احتمالی اجازه میدهند که با استفاده از آدرسهای غیر متعارف نامعتبر به حافظه دسترسی پیدا میکنند و به سادگی ۱۶ بیت بالایی را نادیده میگیرند. بنابراین، در هنگام اجرای کد حدسی، پردازنده همیشه فقط از 16 بیت پایین استفاده می کند و اعتبار آدرس به طور جداگانه بررسی می شود. اگر هنگام ترجمه یک آدرس مجازی غیر متعارف به یک آدرس فیزیکی در بافر ترجمه انجمنی (TLB)، یک تطابق در قسمت متعارف آدرس تشخیص داده شود، عملیات بارگذاری حدسی بدون در نظر گرفتن محتویات، مقدار را برمی گرداند. از 48 بیت بالایی که امکان دور زدن اشتراک حافظه بین رشته ها را فراهم می کند. متعاقباً، عملیات نامعتبر در نظر گرفته می شود و دور ریخته می شود، اما دسترسی به حافظه تکمیل می شود و داده ها در حافظه نهان قرار می گیرند.
در طول آزمایش، با استفاده از تکنیک تعیین محتوای حافظه نهان FLUSH+RELOAD، محققان توانستند کانالی را برای انتقال داده های مخفی با سرعت 125 بایت در ثانیه سازماندهی کنند. این مشکل علاوه بر تراشههای AMD، تمامی پردازندههای اینتل را نیز تحت تأثیر قرار میدهد که مستعد آسیبپذیری کلاسیک Meltdown هستند. از همان تکنیک هایی که به جلوگیری از حملات Meltdown کمک می کند، مانند استفاده از دستورالعمل های LFENCE، می توان برای محافظت در برابر این نوع جدید حمله استفاده کرد. به عنوان مثال، اگر یک پردازنده اینتل دارای محافظت سخت افزاری در برابر Meltdown باشد یا سیستم محافظت نرم افزاری را فعال کرده باشد، در این صورت چنین تنظیماتی در برابر نوع حمله جدید مستعد نیستند.
در عین حال، محققان خاطرنشان میکنند که در مقایسه با پردازندههای اینتل، معماری پردازندههای AMD امکان انجام حملات واقعی را محدود میکند، اما استفاده از یک روش جدید را در ترکیب با سایر حملات ریزمعماری برای افزایش اثربخشی آنها منتفی نمیکند. به طور خاص، حمله پیشنهادی به فرد اجازه نمیدهد تا محتویات مناطق حافظه هسته و سایر فرآیندها را تعیین کند، اما به توانایی دسترسی به رشتههای دیگر همان برنامه که در همان فضای حافظه مجازی اجرا میشوند محدود میشود.
از آنجایی که یک برنامه بدون آسیبپذیری توانایی دسترسی به رشتههای خود را دارد، از نقطه نظر عملی، این روش برای دور زدن ایزوله sandbox و سازماندهی تداخل با کار رشتههای دیگر در برنامههایی که امکان اجرای شخص ثالث را فراهم میکنند، مورد توجه است. کد، مانند مرورگرهای وب و موتورهای JIT. محققان آسیبپذیری موتور جاوا اسکریپت SpiderMonkey و هسته لینوکس را برای حمله مورد بررسی قرار دادند، اما دنبالههای کد آسیبپذیری را پیدا نکردند که بتوان از آنها برای انجام حمله استفاده کرد. علاوه بر حمله به برنامهها، این روش همچنین میتواند برای تحمیل جریانهای غیرقابل قبول داده بین عناصر ریزمعماری پردازنده در حالی که از سایر آسیبپذیریهای ریزمعماری استفاده میکند، استفاده شود.
منبع: opennet.ru