آسیب پذیری Spectre Security چیست ؟

آسیب پذیری Spectre Security چیست ؟
شاید شما هم مانند خیلی از افرادی که پا به دنیای تست و نفوذ میزارن اسم اسیب پذیری های رو میشنوید
که براتون عجیب هست یا به خوبی انها رو نمیتونید درک کنید. امروز ما تصمیم گرفتیم راجب یکی از اسیب پذیری های جالب صحبت کنیم آسیب پذیری Spectre Security چیست ؟ یا که به آن ” Spectre Security vulnerability ” اگر بخواهیم به صورت کلی این اسیب پذیری را تعریف کنیم میگیم که Spectre یک آسیب پذیری امنیتی است که تمام پردازنده های مدرنی را که از مکانیسم هایی مانند branch prediction, speculative action استفاده می کنند، تحت پوشش قرار میده در ادامه بیشتر با این اسیب پذیری آشنا خواهیم شد.
آسیب پذیری Spectre Security چیست ؟
همانطور که در بخش گفتیم به زبان ساده که Spectre یک آسیب پذیری امنیتی است که تمام پردازنده های مدرنی
را که از مکانیسم هایی مانند branch prediction, speculative action استفاده می کنند، تحت پوشش قرار میده. خوب بزارید قبل این که کامل تر براتون این اسیب پذیری شرح بدیم قبلش به سراغ گذشته بریم و ببینم این اسیب پذیری چگونه کشف شد..
در سالهای 2002 و 2003، یوکیاسو تسونو و همکارانش از NEC نحوه حمله به رمزهای کلید متقارن MISTY و DES را نشان (symmetric key ciphers) دادند.
در سال 2005، دانیل برنشتاین از دانشگاه ایلینویز، شیکاگو، استخراج یک کلید OpenSSL AES را از طریق یک حمله cache timing گزارش کرد و کالین پرسیوال با استفاده از cache پردازنده اینتل، به کلید OpenSSL RSA حمله کرد. در سال 2013، یووال یاروم و کاترینا فالکنر از دانشگاه آدلاید نشان دادند که چگونه اندازهگیری زمان دسترسی به دادهها به یک برنامه بد (منظور برنامه است که دستکاری شده برای اهداف خراب کارانه) اجازه میدهد تشخیص دهد که آیا اطلاعات از cache خوانده شده است یا خیر. اگر از cache خوانده می شد، زمان دسترسی بسیار کوتاه می شد، به این معنی که داده های خوانده شده می تواند حاوی کلید خصوصی الگوریتم های رمزگذاری باشد.
در ادامه
این تکنیک برای حمله موفقیت آمیز به GnuPG، AES و دیگر پیاده سازی های رمزنگاری استفاده شد.
در ژانویه 2017، آندرس فوگ در دانشگاه روهر بوخوم در مورد یافتن خودکار covert channels، بهویژه در پردازندههایی با pipeline های که بیش از یک هسته پردازشگر استفاده میکنند، ارائه کرد.
- Spectre proper به طور مستقل توسط Jann Horn از Google’s Project Zero و Paul Kocher در همکاری با Daniel Genkin ،Mike Hamburg، Moritz Lipp و Yuval Yarom کشف شد. در ارتباط با آسیبپذیری دیگر به اسم Meltdown که در 3 ژانویه 2018، پس از اینکه فروشندگان سختافزار خسارت دیده بودن برا این اسیب پذیری قبلاً از این مشکل در 1 ژوئن 2017 مطلع شده بودند، عمومی شد. این آسیبپذیری Spectre نامیده میشود.
اما اگر بخواهیم کامل تر راجب Spectre صحبت کنیم
Spectre به یکی از دو آسیب پذیری اصلی CPU و (دیگری Meltdown) اشاره دارد که شامل حملات microarchitectural timing side-channel است.
اینها بر ریزپردازندههای مدرنی که branch prediction و سایر speculation را انجام میدهند، تأثیر میگذارند. در اکثر پردازنده ها، اجرای حدس و گمان ناشی از پیش بینی نادرست branch ممکن است منجر به رخ داد اتفاقات بدی بشود برای مثال داده های که نباید قابل مشاهده باشند را برای مهاجمان آشکار کند.
اگر بخواهیم ساده تر صحبت کنیم
حملات Spectre شامل وادار کردن قربانی به انجام عملیاتی است که در طول اجرای صحیح برنامه اتفاق نمیافتد
و اطلاعات محرمانه قربانی را از طریق یک side-channel در اختیار هکر قرار میدهد. این همچنین فضای محافظت شده memory را در معرض دید قرار می دهد و به هکر اجازه می دهد به داده ها دسترسی داشته باشد یا حتی آن را تغییر دهد.
نکته : “ماژول ششم کتاب ceh 12 راجب System Hacking هست و این اسیب پذیری در آن بخش هم آمده است که ما آن را تدریس کردیم متیوانید از لینک اینجا به صفحه دوره مراجعه کنید.”
مکانیسم های Branch Prediction و Speculative Action
Branch Prediction :
اگر بخواهیم به فارسی معنی کنیم میشود “پیشبینی شاخه” که از نظر من صحیح نیست به این گونه بیانش کنیم پس همون واژه انگلیسی را در ادامه استفاده میکنیم. تکنیک Branch Prediction به پردازنده اجازه میدهد تا با تبدیل دستور ها به predicate logic، سرعت اجرا را در یک پردازنده pipelined افزایش دهد. از این رو، تنها دستور هایی اجرا می شوند که predicate آن true باشد. این به CPU اجازه می دهد تا از بررسی تک تک Branch ها برای اجرا اجتناب کند.
Speculative Execution :
اگر بخواهیم به فارسی معنی کنیم میشود “اجرای گمانهزنی” که از نظر من صحیح نیست به این گونه بیانش کنیم پس همون واژه انگلیسی را در ادامه استفاده میکنیم.
Speculative Execution همراه با branch prediction، جزء out-of-order execution است
که برای افزایش سرعت اجرا در ریزپردازندههای مبتنی بر pipelined استفاده میشود. از تعریف قبلی یاد گرفتیم که branch prediction برای تعیین اینکه در صورت پرش شرطی کدام دستور اجرا می شود استفاده می شود. Speculative action یک گام فراتر می رود. تعیین می کند که نتیجه اجرای دستور(های) بعدی چه خواهد بود. اگر branch prediction درست بود، از نتیجه استفاده میشود، در غیر این صورت کنار گذاشته میشود.
Spectre Vulnerability چگونه کار میکند ؟
Local exploitation :
در این مورد، عامل مخرب در خود کامپیوتر نهفته است. مراحل زیر رخ می دهد : این فرآیند را برای اجرای دستوری
که هرگز به طور معمول اجرا نمی شد انجام میشود، وقتی CPU دستور را اجرا شده را ارزیابی می کند، محاسبات را دور می اندازد.، با این حال، اندازه بزرگ شده cache بازیابی یا بهتر بگیم restored نمی شود.، با نگاه کردن به cache، محتویات موجود در آن و مکان واقعی حافظه آنها را می توان دریافت کرد، بنابراین آنها را در معرض برنامه مخرب قرار داده است.
Remote Exploitation :
در این حالت، عامل مخرب از طریق جاوا اسکریپت کار می کند. بدافزار اسکریپت شده به تمام memory-mapped با مرورگر دسترسی پیدا می کند. وسپس مراحل زیر انجام می شود :
Cache با انجام خواندن های افزایشی روی مجموعه داده های بزرگ باید پاک شود زیرا array memories در جاوا اسکریپت با استفاده از LRU policy حفظ می شوند، سپس branch predictor با تکرار بر روی یک مجموعه داده بسیار بزرگ با استفاده از bitwise operations برای تنظیم index روی in-range values ، و سپس با استفاده از یک آدرس خارج از محدوده (out-of-bounds) برای تکرار نهایی، دچار اشتباه میشود. با تکرار بر روی یک مجموعه داده بزرگ با استفاده از bitwise operations برای تنظیم in-range values ، و استفاده از آدرس های خارج از محدوده (out-of-bounds) برای تکرار نهایی، پیش بینی شاخه می تواند اشتباه شود. Timed-reads، اسکریپت را قادر میسازد تا location را بخواند.
حمله Internal Monologue Attack چیست ؟ کلیک کنید !