گوگل چندین نمونه اولیه اکسپلویت را منتشر کرده است که امکان سوء استفاده از آسیب پذیری های کلاس Spectre را هنگام اجرای کد جاوا اسکریپت در مرورگر، دور زدن روش های حفاظتی اضافه شده قبلی نشان می دهد. از اکسپلویت ها می توان برای دسترسی به حافظه فرآیندی که در حال پردازش محتوای وب در برگه فعلی است استفاده کرد. برای آزمایش عملکرد اکسپلویت، سایت leaky.page راه اندازی شد و کدی که منطق کار را توصیف می کرد در GitHub قرار گرفت.
نمونه اولیه پیشنهادی برای حمله به سیستمهایی با پردازندههای Intel Core i7-6500U در محیط Linux و Chrome 88 طراحی شده است. برای اعمال سوء استفاده در محیطهای دیگر، تغییراتی لازم است. روش بهره برداری مختص پردازنده های اینتل نیست - پس از انطباق مناسب، تایید شد که این اکسپلویت روی سیستم هایی با پردازنده های دیگر سازندگان از جمله Apple M1 بر اساس معماری ARM کار می کند. پس از تنظیمات جزئی، این اکسپلویت بر روی سایر سیستم عامل ها و سایر مرورگرهای مبتنی بر موتور کرومیوم نیز کار می کند.
در محیطی مبتنی بر پردازندههای استاندارد Chrome 88 و Skylake اینتل، دادهها از فرآیند مسئول پردازش محتوای وب در برگه فعلی کروم (فرآیند رندر)، با سرعت 1 کیلوبایت در ثانیه به بیرون درز کرد. علاوه بر این، نمونههای اولیه جایگزین توسعه یافتند، بهعنوان مثال، یک اکسپلویت که به بهای کاهش پایداری اجازه میدهد تا در هنگام استفاده از تایمر performance.now() با دقت 8 میکروثانیه (5 میلیثانیه)، نرخ نشت را به 0.005 کیلوبایت بر ثانیه افزایش دهد. . یک نوع نیز آماده شد که با دقت تایمر یک میلیثانیه کار میکرد و میتوان از آن برای سازماندهی دسترسی به حافظه یک فرآیند دیگر با سرعت حدود 60 بایت در ثانیه استفاده کرد.
کد نمایشی منتشر شده از سه قسمت تشکیل شده است. بخش اول تایمر را کالیبره میکند تا زمان اجرای عملیات مورد نیاز برای بازیابی دادههای باقیمانده در حافظه پنهان پردازنده در نتیجه اجرای گمانهزنی دستورالعملهای CPU را تخمین بزند. بخش دوم چیدمان حافظه مورد استفاده در هنگام تخصیص آرایه جاوا اسکریپت را تعیین می کند.
بخش سوم مستقیماً از آسیبپذیری Spectre برای تعیین محتوای حافظه فرآیند جاری در نتیجه ایجاد شرایطی برای اجرای حدس و گمان برخی عملیات استفاده میکند که نتیجه آن پس از تعیین یک پیشبینی ناموفق، اما اجرا توسط پردازنده کنار گذاشته میشود. ردیابیها در حافظه پنهان عمومی ذخیره میشوند و میتوانند با استفاده از روشهایی برای تعیین محتوای کش توسط کانالهای شخص ثالث که تغییرات زمان دسترسی به دادههای کش و غیرکش را تجزیه و تحلیل میکنند، بازیابی کنند.
تکنیک بهرهبرداری پیشنهادی، تایمرهای با دقت بالا را که از طریق API performance.now() و بدون پشتیبانی از نوع SharedArrayBuffer، که امکان ایجاد آرایهها در حافظه مشترک را فراهم میکند، حذف میکند. این اکسپلویت شامل گجت Spectre است که باعث اجرای کدهای گمانهزنی کنترلشده میشود، و یک تحلیلگر نشت کانال جانبی، که دادههای بهدستآمده در طول اجرای حدسزنی که وارد حافظه پنهان شده است را تعیین میکند.
این ابزار با استفاده از یک آرایه جاوا اسکریپت پیادهسازی میشود، که در آن تلاش میشود به ناحیهای خارج از مرزهای بافر دسترسی پیدا کند، که بر وضعیت بلوک پیشبینی شاخه به دلیل بررسی اندازه بافر اضافه شده توسط کامپایلر (پردازنده، نگاه به آینده) تأثیر میگذارد. ، دسترسی را به صورت فرضی انجام می دهد، اما پس از بررسی وضعیت را به عقب برمی گرداند). برای تجزیه و تحلیل محتویات حافظه نهان در شرایط دقت تایمر ناکافی، روشی پیشنهاد شده است که استراتژی حذف کش Tree-PLRU مورد استفاده در پردازنده ها را فریب می دهد و با افزایش تعداد چرخه ها، اجازه می دهد تا تفاوت زمان را به طور قابل توجهی افزایش دهد. مقدار از کش و زمانی که هیچ مقداری در کش وجود ندارد.
خاطرنشان می شود که گوگل یک نمونه اولیه سوء استفاده را منتشر کرد تا واقع گرایی حملات را با استفاده از آسیب پذیری های کلاس Spectre نشان دهد و توسعه دهندگان وب را تشویق کند تا از تکنیک هایی استفاده کنند که خطرات ناشی از چنین حملاتی را به حداقل می رساند. در همان زمان، گوگل معتقد است که بدون بازنگری قابل توجهی در نمونه اولیه پیشنهادی، ایجاد سوء استفاده های جهانی غیرممکن است که نه تنها برای نمایش، بلکه برای استفاده گسترده نیز آماده باشند.
برای کاهش خطر، صاحبان سایت تشویق می شوند تا از سیاست بازکننده Cross-Origin (COOP)، خط مشی جاسازی بین مبدا (COEP)، خط مشی منابع متقاطع (CORP)، درخواست فراداده واکشی، X-Frame-Options استفاده کنند. X -Content-Type-Options و کوکی های SameSite. این مکانیسمها مستقیماً در برابر حملات محافظت نمیکنند، اما اجازه میدهند دادههای سایت را از نشت به فرآیندهایی که در آن کد جاوا اسکریپت مهاجم اجرا میشود (نشت از حافظه فرآیند جاری رخ میدهد، که در آن، علاوه بر کد مهاجم، دادهها نیز وجود دارد.» از سایت دیگری که در همان برگه باز شده است). ایده اصلی این است که در فرآیندهای مختلف اجرای کد سایت را از کدهای شخص ثالث که از منابع غیرقابل اعتماد به دست آمده است، جدا کنیم، به عنوان مثال، از طریق iframe گنجانده شده است.
منبع: opennet.ru