یک حمله ی جدید از نوع Speculative Execution و بنام TIKTAG کشف شده که تگهای Memory Tagging Extension (MTE) در ARM رو با احتمال موفقیت بیش از 95 درصد و در عرض 4 ثانیه افشاء میکنه.
این حمله توسط محققای سامسونگ و دانشگاه ملی سئول و موسسه فناوری جورجیا در قالب یک مقاله منتشر شده. این محققا این حمله رو تونستن روی کروم و کرنل لینوکس با موفقیت پیاده سازی کنن.
برای دسترسی به مقاله میتونید از این لینک استفاده کنید.
ویژگی Memory Tagging Extension (MTE) :
MTE یک ویژگی امنیتی است که در معماری ARMv8.5-A معرفی شد. هدفش شناسایی و جلوگیری از آسیب پذیریهای حافظه، بویژه Use-after-free هستش.
MTE با اختصاص یک تگ منحصر به فرد به هر بخش از حافظه کار میکنه. این تگها بعنوان نوعی برچسب عمل میکنن که اطلاعاتی در مورد نحوه استفاده از اون بخش از حافظه رو ذخیره میکنن.
وقتی برنامه ای به حافظه دسترسی پیدا میکنه، MTE تگ اون بخش از حافظه رو با تگی که در دستورالعمل دسترسی هستش، مقایسه میکنه. اگه تگها مطابقت نداشته باشه، MTE یک خطا ایجاد میکنه و از دسترسی غیرمجاز به حافظه جلوگیری میکنه.
مزایای MTE :
- افزایش امنیت حافظه: MTE با جلوگیری از حملات Use-after-free و سایر آسیب پذیریهای حافظه، بطور قابل توجهی امنیت حافظه رو افزایش میده.
- کاهش تأثیر حملات: MTE حتی وقتی که یک آسیب پذیری حافظه وجود داشته باشه، میتونه تأثیر اونرو کاهش بده. مثلا، MTE میتونه از نشت داده های حساس در اثر یک حمله Use-after-free جلوگیری کنه.
- سازگاری با سیستمهای موجود: MTE طوری طراحی شده که با سیستمهای موجود سازگار باشه و نیاز به تغییرات عمده در نرمافزار یا سختافزار نداره.
معایب MTE:
- کاهش عملکرد: MTE میتونه تا حدی بر عملکرد سیستم تأثیر بذاره، چون پردازنده باید تگهای حافظه رو بررسی کنه. با این حال، این تأثیر روی عملکرد معمولاً ناچیزه.
- عدم محافظت در برابر همه حملات: MTE در برابر همه انواع حملات حافظه مانند حملات نشت حافظه محافظت نمیکنه.
MTE بطور پیش فرض در اکثر پردازنده های ARM جدید فعاله. با این حال، ممکنه لازم باشه برای فعال کردن اون در برخی سیستمها مراحلی رو طی کنید. برای اطلاعات بیشتر در مورد نحوه استفاده از MTE در سیستمتون،باید به مستندات سازنده رجوع کنید.
معرفی Speculative Execution Attack :
پردازنده های مدرن برای افزایش کارایی از تکنیکی به نام اجرای پیشفرض (Speculative Execution) استفاده میکنن. در این روش، پردازنده دستورات رو قبل از اینکه مشخص بشه آیا این دستورات باید اجرا بشن یا نه، پیش بینی و اجرا میکنه. این کار میتونه بطور قابل توجهی سرعت پردازش رو افزایش بده. مثلا فرض کنید با یک دستور IF-ELSE روبرو هستیم، پردازنده در حالت معمول اول IF رو بررسی میکنه اگه شرط درست نبود میره سراغ ELSE. اما در تکنیک Speculative Execution، پردازنده قبلا از بررسی، یک مسیری رو حدس میزنه و اجرا میکنه. نکته ای که وجود داره اگه مسیر حدس زده شده درست نباشه، پردازنده برمیگرده و دوباره مسیر درست رو انتخاب و اجرا میکنه.
Speculative Execution Attack نوعی حمله هستش که از قابلیت پردازنده برای اجرای دستورات قبل از تأیید اونا سوء استفاده میکنه. در این نوع حمله، مهاجم میتونه دستورات مخربی رو به پردازنده تزریق کنه و حتی اگه این دستورات بعداً لغو بشن، میتونه به داده های حساس دسترسی پیدا کنه یا اونارو تغییر بده.
چند نوع مختلف از این حملات قبلا کشف شده، از جمله:
- حمله Meltdown: این حمله از یک آسیب پذیری در پردازندههای Intel برای نشت اطلاعات از حافظه استفاده میکنه.
- حمله Spectre: این حمله از یک آسیب پذیری در پردازندههای Intel، AMD و ARM برای نشت اطلاعات از حافظه استفاده میکنه.
- حمله Foreshadow: این حمله از یک آسیب پذیری در پردازندههای Intel برای نشت اطلاعات از حافظه استفاده میکنه.
- حمله ZombieLoad: این حمله از یک آسیبپذیری در پردازندههای Intel برای نشت اطلاعات از حافظه استفاده میکنه.
حمله ی Speculative Execution میتونه تأثیرات جدی روی امنیت سیستمها داشته باشه و معمولا در موارد زیر استفاده میشه:
- سرقت دادههای حساس (مانند پسوردها، اطلاعات مالی و اطلاعات شخصی)
- افزایش سطح دسترسی
- اجرای کد دلخواه
حمله ی TIKTAG :
در این حمله محققا کشف کردن که با استفاده دو gadget (کد) با عنوان TIKTAG-v1 و TIKTAG-v2 میتونن از Speculative Execution سوء استفاده کنن و تگ های حافظه ی MTE رو با نرخ موفقیت بالا و در زمان کوتاهی، بدست بیارن.
نشت این تگها مستقیما داده های حساس مانند پسورد و … رو افشاء نمیکنه اما ویژگی های امنیتی ارائه شده توسط MTE رو از بین میبره و سیستم رو در برابر حملات خرابی حافظه دیگه محافظت نمیکنه.
TIKTAG-v1 از کاهش حدس در Branch Prediction و Data Prefetching برای نشت تگهای MTE سوء استفاده میکنه.
Branch Prediction و Data Prefetching تکنیکهای بهینه سازی برای افزایش سرعت پردازنده های مدرن هستن:
- Branch Prediction : در این تکنیک، پردازنده قبل از اینکه بطور قطعی مشخص بشه کدوم مسیر باید اجرا بشه، مسیر رو حدس میزنه و شروع به اجرای دستورات اون مسیر میکنه. این کار میتونه سرعت پردازش رو افزایش بده، چون پردازنده از قبل روی دستوراتی که احتمالاً مورد نیاز هستن، کار کرده.
- Data Prefetching: در این تکنیک پردازنده سعی میکنه از قبل، داده هایی که در آینده مورد نیاز خواهند بود رو، از حافظه به cache منتقل کنه. این کار میتونه سرعت پردازش رو افزایش بده، چون داده ها در cache به سرعت در دسترس خواهند بود.
کاهش حدس به وضعیتی اشاره داره که در اون حدسهای پردازنده در مورد اینکه کدوم مسیر باید اجرا بشه یا چه داده هایی مورد نیاز هستن، اشتباه میشه. در این صورت، پردازنده باید کارهایی رو که قبلاً انجام داده رو لغو کنه و دوباره از ابتدا شروع کنه.
محققان کشف کردن که این gadget در حمله علیه کرنل لینوکس مؤثره، بویژه علیه توابعی که شامل Speculative Memory Accesse هستن. Speculative Memory Accesse نوعی دسترسیه که پردازنده، قبل از اینکه مشخص بشه آیا این دسترسی به حافظه لازم داره یا نه، به حافظه دسترسی پیدا میکنه. البته برای اینکه بشه این حمله رو بصورت عملی پیاده سازی کرد، برخی از اشاره گرهای کرنل رو باید دستکاری کنیم.
مهاجم از System Callها برای فعال کردن مسیر Speculative Execution و بعدش بررسی وضعیت cache برای استنتاج تگهای حافظه استفاده میکنه.
TIKTAG-v2 از رفتار Store-To-Load Forwarding در Speculative Execution سوء استفاده میکنه. این رفتار شامل ذخیرهسازی یک مقدار در یک آدرس حافظه و لوود همون مقدار بلافاصله از همون آدرس میشه.
اگه تگها با هم مطابقت داشته باشن، مقدار ارساله میشه و بارگذاری با موفقیت انجام میگیره که این موضوع روی وضعیت cache تأثیر میذاره. اما اگه تگها مطابقت نداشته باشن، ارسال مسدود شده و وضعیت cache تغییری نمیکنه.
بنابراین، با بررسی وضعیت cache بعد از Speculative Execution، میشه نتیجه ی بررسی تگهارو استنتاج کرد.
محققان نشون دادن که میشه از گجتهای TIKTAG-v2 روی کروم، بویژه موتور جاوا اسکریپت V8، برای اکسپلویت آسیبپذیریهای خرابی حافظه در پروسس renderer استفاده کرد.
اقدامات کاهشی:
محققا نتیجه ی تحقیقاتشون رو بین نوامبر تا دسامبر 2023 به سازمانهای ذیربط گزارش دادن و بطور کلی بازخورد مثبتی گرفتن، با این حال فعلا اصلاحیه خاصی ارائه نشده.
در حالی که شرکت ARM جدیت این آسیب پذیری رو به رسمیت شناخته و چند ماه پیش بیاینیه ای منتشر کرده، اما این آسیب پذیری رو به منزله نقض عملکرد MTE نمیدونه.
تیم امنیتی کروم این آسیب پذیری رو تایید کرده اما تصمیمی برای رفعش نگرفته، چون سندباکس V8 برای تضمین محرمانگی دادههای حافظه و تگهای MTE طراحی نشده. این کار روی یک مولفه ی دیگه هستش. همچنین مرورگر کروم در حال حاضر بطور پیشفرض از محافظتهای مبتنی بر MTE پشتیبانی نمیکنه که این موضوع باعث کاهش اولویت برای رفع فوری این آسیبپذیری میشه.
محققا آوریل 2024، وجود آسیب پذیری رو در پیکسل ۸ به تیم امنیتی اندروید گزارش دادن و اونا این گزارش رو بعنوان یک نقص سختافزاری که واجد دریافت بانتی باشه، تایید کردن.
خود محققا در مقاله اشون یسری اقدامات کاهشی رو بیان کردن از جمله:
- طراحی سختافزار رو طوری تغییر بدیم تا از تغییر وضعیتهای cache بر اساس نتایج بررسی تگها توسط Speculative Execution جلوگیری کنه.
- برای جلوگیری از اجرای عملیات حیاتی حافظه توسط Speculative Execution از دستوراتی مانند sb یا isb استفاده کنیم.
- با افزودن دستورالعملهای اضافی میتونیم فاصله زمانی بین دستورالعملهای شاخه و دسترسی به حافظه رو افزایش بدیم. با افزایش این زمان، پردازنده فرصت بیشتری برای تکمیل پیش بینیهای خودش در مورد اینکه کدوم مسیر باید اجرا بشه و چه داده هایی مورد نیاز هستن، خواهد داشت.
- با تقویت مکانیزمهای سندباکس، میتونیم مسیرهای Speculative Memory Access رو بطور کامل در مناطق امن حافظه محدود کنیم.