Spectre

برخلاف گزارش‌های اولیه[۱] که اعلام کرده بودند تراشه‌های اینتل به بعضی از نقص‌های نشت حافظه(۱) آسیب‌پذیر هستند، جزئیات فنی کامل در مورد این آسیب‌پذیری‌های که در حال حاضر به‌طور کامل منتشر شده‌اند نشان‌دهنده این موضوع هستند که هر پردازنده جدیدی که از سال ۱۹۹۵ به بعد تولید شده است به این نقایص آسیب‌پذیر است.

این آسیب‌پذیری‌ها که در تاریخ ۳ ژانویه ۲۰۱۷ توسط Google Project Zero افشا شده‌اند، به‌طور بالقوه بر روی تمامی پردازنده‌ها تأثیرگذار بوده که شامل پردازنده‌های AMD، ARM و اینتل می‌شوند که در حقیقت تمامی کامپیوترهای شخصی، لپ‌تاپ‌ها، تبلت‌ها و گوشی‌های هوشمند را شامل می‌شوند بدون اینکه شرکت سازنده آن‌ها و یا نوع سیستم‌عامل آن‌ها مهم باشد[۲].

این آسیب‌پذیری‌های سخت‌افزاری به دو نوع حمله به نام‌های Meltdown یا CVE-2017-5754 و Spectre یا CVE-2017-5753 و CVE-2017-5715 تقسیم شده‌اند[۳] که می‌توانند به مهاجمان اجازه دهند تا اطلاعات حساس را سرقت کنند که در حال حاضر بر روی کامپیوتر پردازش شده‌اند.

هردوی این حملات از یک ویژگی در تراشه‌های شناخته‌شده به‌عنوان “اجرای احتمالی(۲)” استفاده می‌کنند، که یک روش است که اکثر پردازنده‌های مدرن برای بهینه‌سازی عملکرد از آن استفاده می‌کنند.

Project Zero دراین‌باره می‌گوید: “به‌منظور بهبود عملکرد، بسیاری از پردازنده‌ها ممکن است تصمیم بگیرند که به‌طور احتمالی(۳) دستورالعمل‌ها را بر اساس فرض‌هایی اجرا کنند که احتمالاً درست است. در طی اجرای احتمالی، پردازنده این فرضیه‌ها را تائید می‌کند؛ اگر آن‌ها معتبر باشند، پس عملیات اجرا همچنان ادامه دارد. اگر آن‌ها نامعتبر باشند، پس اجرا unwound بوده و مسیر اجرای درست را می‌توان بر اساس شرایط واقعی آغاز کرد.”

بنابراین، برای چنین اجرای احتمالی ممکن است عوارض جانبی وجود داشته باشد که وقتی حالت پردازنده به‌صورت unwound باشد در حقیقت بازسازی نشده‌اند و به افشای اطلاعات منجر می‌شود که می‌تواند با استفاده از حملات جانبی(۴) قابل‌دسترسی باشد.

حمله Meltdown

اولین مشکل یعنی Meltdown اجازه می‌دهد تا مهاجمان نه‌تنها حافظه هسته(۵) را بخوانند، بلکه کل حافظه فیزیکی دستگاه‌های هدف را نیز بخوانند و درنتیجه به همه اسرار سایر برنامه‌ها و سیستم‌عامل نیز دسترسی داشته باشند[۴].

Meltdown یک حمله microarchitectural است که از یک اجرایout-of-order  بهره‌برداری می‌کند تا حافظه فیزیکی هدف را نابود کند.

Meltdown از اجرای احتمالی برای جداسازی بین برنامه‌های کاربردی کاربر و سیستم‌عامل استفاده می‌کند و به هر برنامه اجازه دسترسی به‌تمامی حافظه‌ سیستم، ازجمله حافظه اختصاص‌یافته به هسته را می‌دهد.

Meltdown از یک آسیب‌پذیری افزایش سطح دسترسی در پردازنده‌های اینتل بهره‌برداری می‌کند، به همین دلیل دستورالعمل‌های احتمالی اجراشده می‌توانند سیستم حفاظت از حافظه را دور بزنند[۵].

تقریباً تمام رایانه‌های رومیزی، لپ‌تاپ‌ها و رایانه‌های cloud تحت تأثیر آسیب‌پذیری Meltdown قرار دارند.

حمله Spectre

Meltdown

مشکل دوم، آسیب‌پذیری Spectre است که وصله کردن آن آسان نیست و کاربران را برای مدت‌زمان زیادی تحت تأثیر قرار خواهد داد، زیرا این موضوع نیاز به تغییر در معماری پردازنده دارد تا به‌طور کامل از بین برود [۵].

حمله Spectre سیستم جداسازیِ بین برنامه‌های مختلف را مختل می‌کند و به برنامه تحت کنترل مهاجم اجازه می‌دهد تا برنامه‌های بدون خطا را فریب دهد تا اسرار آن‌ها را افشا کند. در حقیقت این کار توسط مجبور کردن آن‌ها به دسترسی داشتن به بخش‌های دلخواه از حافظه خود که در مرحله بعد می‌تواند توسط کانال جانبی خوانده شود، انجام می‌شود.

حملات Spectre می‌تواند برای افشای اطلاعات از هسته به برنامه‌های کاربر و همچنین از hypervisorهای مجازی‌سازی به سیستم مهمان مورد استفاده قرار گیرد.

این مقاله توضیح می‌دهد :”علاوه بر نقض مرزهای جداسازی فرآیند(۶) با استفاده از کد محلی(۷)، حملات Spectre همچنین می‌توانند برای نقض sanboxing مرورگر با mount کردن آن‌ها از طریق کد جاوا اسکریپتِ قابل‌حمل مورداستفاده قرار گیرند. ما یک برنامه جاوا اسکریپت نوشتیم که با موفقیت داده‌ها را از فضای آدرسِ فرآیندِ مرورگر اجرا می‌کند.”

وصله KAISER، که به‌طور گسترده‌ای به‌عنوان یک ابزار مقابله با حمله Meltdown اعمال شده است، در برابر Spectre کارایی ندارد.

به گفته محققان، این آسیب‌پذیری تقریباً بر روی هر سیستمی ازجمله دسکتاپ‌ها، لپ‌تاپ‌ها، سرورهای cloud و همچنین گوشی‌های هوشمندِ مبتنی بر تراشه‌های اینتل، AMD و ARM تأثیرگذار هستند.

آنچه شما باید انجام دهید: مقابله و وصله کردن

بسیاری از فروشندگان دارای وصله‌های امنیتی برای یک یا هردوی این حملات هستند:

ویندوز: مایکروسافت نسخه به‌روزرسانی وصله‌های خود را برای ویندوز ۱۰ در خارج از برنامه تعیین‌شده خود منتشر کرده است، درحالی‌که نسخه‌های دیگر ویندوز توسط ‌وصله‌های معمول که در روز سه‌شنبه  ۹ ژانویه ۲۰۱۸ منتشر می‌شوند، به‌روزرسانی خواهند شد.

MacOS: اپل قبلاً بسیاری از این سوراخ‌های امنیتی را در نسخه ۱۰٫۱۳٫۲ از سیستم‌عامل High Sierra در ماه گذشته وصله کرده بود اما نسخه ۱۰٫۱۳٫۳ از سیستم‌عامل  macO این روش‌های مقابله را افزایش داده یا کامل کرده است.

لینوکس: توسعه‌دهندگان هسته لینوکس نیز با پیاده‌سازی جداسازی صفحات جدول کرنل(۸)، وصله‌هایی را برای انتقال هسته به یک فضای آدرس کاملاً جداگانه منتشر کرده‌اند.

اندروید: گوگل وصله‌های امنیتی برای کاربران Pixel یا  Nexus را به‌عنوان بخشی از به‌روزرسانی وصله امنیتی اندروید در ژانویه ۲۰۱۸ منتشر کرده است.

دیگر کاربران باید منتظر تولیدکنندگان دستگاه خود برای انتشار به‌روزرسانی امنیتی سازگار باشند.

روش‌های مقابله برای کاربران Chrome

ازآنجاکه این بهره‌برداری می‌تواند از طریق یک وب‌سایت اجرا شود، کاربران Chrome می‌توانند ویژگی‌ جداسازی سایت(۹) را بر روی دستگاه خود فعال کنند تا در برابر این آسیب‌پذیری‌ها در امان باشند.

در اینجا نحوه فعال‌سازی ویژگی جداسازی سایت بر روی ویندوز، Mac، لینوکس، سیستم‌عامل Chrome یا اندروید آورده شده است:

  • chrome: //flags/#enable-site-per-process را کپی کرده و آن را در قسمت URL در بالای مرورگر وب Chrome قرار دهید و سپس کلید Enter را بزنید.
  • گزینه Strict Site Isolation را پیدا کرده و سپس آن را فعال کنید.
  • پس از انجام این کار، بر روی گزینه Relaunch Now کلیک کنید تا مرورگر Chrome خود را مجدداً راه‌اندازی کند.

هیچ وصله مشترکی برای هر یک از این حملات وجود ندارد، بنابراین هر یک از آن‌ها به‌طور مستقل نیاز به حفاظت دارند.

منابع

[۱] https://thehackernews.com/2018/01/intel-kernel-vulnerability.html

[۲] https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html

[۳] https://meltdownattack.com

[۴] https://meltdownattack.com/meltdown.pdf

[۵] https://youtu.be/bReA1dvGJ6Y

[۶] https://spectreattack.com/spectre.pdf

[۷] https://thehackernews.com/2018/01/meltdown-spectre-vulnerability.html


(۱) memory leaking
(۲) speculative execution
(۳) speculatively
(۴) side-channel
(۵) kernel
(۶) process isolation boundaries
(۷) native
(۸) kernel page-table isolation (KPTI)
(۹) Site Isolation