در این پست به بررسی گزارش کسپرسکی در خصوص یه حمله جدید، روی تراشه های DRAM پرداختیم که میتونه ، کامپیوترهای شخصی ، سرورها و گوشی ها رو تحت تاثیر قرار بده. این متد جدید RowPress هستش و کل کاری که میکنه اینه که عمل hammering رو روی، یه ردیف از DRAM به دفعات زیاد تکرار میکنه که منجر به bitflip در ردیف های نزدیک به هم از لحاظ فیزیکی میشه. تکنیک ایده جدیدی نیست و تقریبا مشابه تکنیک RowHammer هستش، اما تکنیک RowPress موثرتره.
قبل از پرداختن به خود تکنیک، ابتدا نیاز هستش که با یسری مفاهیم آشنا بشیم.
DRAM یا Dynamic random access memory، نوعی از حافظه نیمه رسانا هستش که معمولا برای اجرای داده ها و کدهای برنامه در پردازنده کامپیوتر، استفاده میشه. بطور خلاصه تر یه جور رم هستش که به جای ترانزیستور از خازن برای ذخیره و تبادل داده ها استفاده میکنه.
منظور از bitflip ، رخدادی هستش که منجر به تغییر بیت های ذخیره شده در دستگاههای الکترونیکی میشه، یعنی بیت 1 به صفر تبدیل میشه و برعکس.
برای اینکه مفهوم hammering رو متوجه بشیم، باید بدونیم که رم چطوری کار میکنه.
طرز کار رم :
تراشه های رم ، هیچ وقت زیاد قابل اعتماد نبودن. هر تراشه رم، از یسری سلول حافظه تشکیل شده. به زبان ساده تر هر سلول حافظه که یه بیت اطلاعات داخلشون ذخیره میشه، یه باتری مینیاتوریه. اگه شارژر رو به این باتری وصل کنیم و اونو شارژ کنیم، یک رو داخلش نوشتیم و اگه از شارژر دربیاریمش، صفر نوشتیم. در حقیقت عمل شارژ و دشارژ ، مشخص کننده 1 و 0 هستش. این عمل یک و صفر، میلیونها بار در ثانیه رخ میده.
در ریزتراشه های مدرن، این سلولها به میزان خارق العاده ای بطور متراکم کنار هم قرار گرفتن، بطوریکه میلیاردها از اونها روی یه کریستال به اندازه ناخن انگشت میشه.
با این بروزرسانی سلولها و کوچکتر شدن قطعات الکترونیکی، احتمال خرابی وجود داره و این باتری های مینیاتوری ممکنه شارژ نگه نداره و تبدیل به صفر بشه. این خرابی ها گاهی اوقات توسط عوامل خارجی مانند گرما یا پرتوهای کیهانی ایجاد میشن.
اما اینجور خرابی ها، منجر به خطاهای بحرانی میشه. مثلا فرض کنید که یه برنامه ای ، یه آدرسی رو در رم ذخیره کرده و برنامه در صورتی که یسری شرایط رخ بده مثلا شرایطی که در یه دستور if تعریف شدن، به این آدرس دسترسی پیدا میکنه. اگه تعدادی از بیتهای این آدرس ، دچار bitflip بشه، یعنی صفر و یک ها جابه جا بشن، بنابراین عملکرد کد شما دچار اختلال میشه و معلوم نیست چیرو اجرا میکنه.
برای اینکه جلوی اینجور خرابی ها رو بگیرن، تکنولوژی های مختلفی وجود داره مثلا یه بروزرسانی اجباری از محتویات سلولهای حافظه که بصورت خوندن و نوشتن متوالی اطلاعات، حتی اگه برنامه یا CPU بهش نیاز نداشته باشه که بهش Memory refresh میگن، انجام میشه.
سلولهای حافظه بصورت ماتریکسی در کنار هم قرار میگیرن ، که در شکل زیر به رنگ آبی مشخص شده و از طریق ردیف ها و ستون ها آدرس دهی میشن. آدرس حافظه ای که به این ماتریکس داده میشه، شامل آدرس ردیف و ستون هستش و توسط دیکدر سطر و ستون، دیکد میشن که در شکل زیر با رنگ سبز مشخص شدن. یعنی یه آدرس میگیره، اول میره ردیفش و بعد ستونش. بعد از اینکه آدرس ردیف ، یه ردیفی رو برای خوندن انتخاب کرد یا به اصطلاح، اون ردیف رو فعال کرد، بیت های همه سلولهای اون ردیف به sense amplifier منتقل میشن که یه بافر ردیف رو تشکیل میده. خود sense amplifier برای این استفاده میشه که شارژ بیتها رو تقویت کنه تا دچار نوسان نشن و تفسیر اشتباهی ازشون نشه. در بافر ردیف که در شکل زیر به رنگ قرمز مشخص شده، بیت دقیق از طریق آدرس ستون مشخص میشه.
در نتیجه فرایند خوندن داده ها ماهیت مخربی داره ، چون سلول های حافظه ،بعد از خوندن مقادیرشون از طریق انتقال شارژ سلول به بافر ردیف، بازنویسی میشن. مکانیسم تصحیح خطا هم وجود داره. حافظه داده ها و اطلاعات جداگونه رو برای بررسی صحت داده ها ذخیره میکنه. این نکته رو هم در نظر بگیرید که تراکم سلولهای حافظه در سیستم های مدرن بالاست و یه ویژگی برای اونا حساب میشه.
حمله RowHammer :
حمله RowHammer در سال 2014 توسط محققین دانشگاه Carnegie Mellon و اینتل معرفی شد که در اون نشون دادن که چطوری میشه از اکسپلویت این ویژگی بروزرسانی داینامیک رم برای آسیب رسوندن استفاده کرد. اگه خوندن داده ها مخربه و در ادامه سلولها بازنویسی میشه، اگه یه برنامه ای بنویسیم که در ثانیه ، ده ها و صدها بار عمل خوندن رو انجام بده، چه اتفاقی می افته؟ این همون چیزیه که محققا بهش hammering میگن.
سلول های حافظه بصورت یه ماتریس مرتب شدن و هر عملیاتی روی یه سلول خاص شامل دسترسی به طیف کاملی از اوناست. در RowHammer مشخص شد که دسترسی پی در پی و مکرر به ردیفی از سلول ها بر ردیف های مجاور تأثیر میذاره. اگه این عملیات چندین بار انجام بشه، یک ها و صفرهای سلول های ردیف همسایه دچار bitflip میشن. مطالعه سال 2014 نشون داد که چنین حمله ای روی DDR3 و DDR4 امکان پذیره.
اما این تکنیک چرا خطرناکه؟ فرض کنید یه هکری میتونه کد دلخواه رو بدون افزایش امتیاز اجرا کنه یا بدتر از اون، یه لینکی به قربانی میده و کد رو از طریق یه صفحه وب اجرا میکنه. اگه این کد بخش خاصی از حافظه ی رم رو hammering کنه، میتونه باعث اختلال در خوندن سایر ردیف های مجاورش بشه، مثلا فرض کنید اونجا داده های سیستم عامل ذخیره شده و در نتیجه در سیستم عامل دچار اختلال میشه.
در کنفرانس Blackhat USA 2015 ، محققای گوگل نشون دادن که چطوری میشه از RowHammer برای گرفتن امتیاز کرنل استفاده کرد. این یه حمله پیچیده با مجهولات زیاد بود. یعنی هنوزم نیازه که وارد بخش مناسبی از رم بشیم، یسری داده مناسب رو تخریب کنیم طوری که سیستم کرش نکنه و برنامه متوقف نشه. با این همه، از لحاظ تئوری این حمله تایید شد.
تکنیک BlackSmith برای دور زدن اقدامات حفاظتی RowHammer :
ساده ترین راه برای حفاظت از داده ها در برابر حمله RowHammer اینه که بعد از درخواست خوندن دادهها از ردیف سلولهای حافظه، بروزرسانی اطلاعات رو در ردیفهای همسایه انجام بدیم. این بطور قابل توجهی، احتمال خراب شدن داده هارو کم میکنه. اما مثله همه ی آسیب پذیری های سخت افزاری در CPUها ، دیر یا زود یه روش دور زدن در این اقدامات حفاظتی کشف میشه.
در سال 2021، محققا یه تکنیک حمله بنام BlackSmith رو معرفی کردن که میشد تحت شرایط خاصی، با وجود مکانیسم های حفاظتی برای RowHammer ، اقدام به خرابکاری کرد. در این تکنیک، بجای hammering ردیف سلولهای حافظه ی در کنار هم، ترکیبهای مختلفی رو تست میکنن. مثلا صدها هزار بار به ردیف های بالا و پایین حمله میکنن یا بطور همزمان به چهار ردیف در یک توالی خاص حمله میکنن. دلیلشم این بوده که تراکم بالای سلولهای حافظه تغییری نکرده و اساسا این مشکل اصلیه.
حمله RowPress :
تکنیک RowPress در صورتیکه از همون تکنیک اصلی با کمی تغییرات استفاده کرده، اما اثربخشی بالایی داشته. در این تکنیک هم مهاجم یه ردیف از سلولها رو تا حد امکان برای خوندن ، نگه میداره. محققا یه ویژگی استاندارد دیگه از نحوه عملکرد تراشه حافظه و کنترلر پیدا کردن که باعث اختلال بیشتر در ردیفهای همسایه سلول های حافظه میشه. این تکنیک از لحاظ اثر بخشی ده ها یا صدها برابر قویتر از RowHammer هستش. حتی در چند نمونه آزمایشی، bitflip بعد از فقط یه عملیات خوندن در داده های همسایه رخ داده.
شکل زیر ، زیرساخت تست روی DDR4 رو نشون میده.
احتمال حمله RowHammer یا Blacksmith یا RowPress به کاربر خانگی خیلی ناچیزه اما شرکتها در معرض خطر هستن. از لحاظ تئوری میشه این حملات رو روی حافظه سرورهایی که در ابرهای عمومی ارائه میشن ، پیاده کرد. ارائه دهندگان به سرورهای خودشون دسترسی دارن و یه ماشین مجازی به کاربران اختصاص میدن تا کارهای دلخواهشون رو روش انجام بدن. ارائه دهندگان باید مطمئن بشن که راهی برای فرار از مجازی سازی وجود نداره و مشتریها نمیتونن به داده های بقیه دسترسی پیدا کنن. حالا این ماشین مجازی که به مشتری داده شده ، میتونه در حافظه رم سرور بنویسه و بخونه. در نتیجه امکان حمله از طریق سرور مجازی به سرور اصلی رو داریم.
اینکه این حمله چقدر تئورییه، میشه از عکس بالا مشاهده کرد. ماژول رم به یه برد دیگه که به نوعی یه دستگاه دیباگ عملکرد رم هست ، وصل شده. برخی سیستمهای حفاظتی غیرفعال شدن. از همه مهمتر یه heater هم نصب شده که دما رو تا 50 یا 80 درجه افزایش میده، که خودش احتمال خراب شدن تصادفی یا عمدی داده رو افزایش میده.
حملات سخت افزاری:
با مقایسه RowPress و RowHammer ابتدایی، اساساً یه تغییر جزئی در روش دسترسی به حافظه مشاهده میکنیم که به مهاجمان اجازه میده (از جمله در یه سیستم واقعی، بدون گرم کردن یا «تقلب») اقدامات حفاظتی رو که توسط تولیدکنندگان ماژول اجرا شده رو دور بزنن.
خود محققا راه حلی هم برای این حمله ارائه دادن که، خوشبختانه تاثیر کمی روی کارایی سیستم داره. با این حال، مانند اکثر آسیب پذیری های سخت افزاری، خلاص شدن از شر اونا بطور کامل ، ممکن نیست. کاهش تراکم تراشه های حافظه امروزی نمیتونه یه گزینه مناسب باشه چون برعکس، ظرفیت اونا در حاله رشد.
همچنین تصحیح خطای قابل اعتماد مشکل رو حل نمیکنه چون این امر یک سوم رم رو اشغال میکنه. روش معمول error correcting codes (ECC) ، اثربخشی حملات رو کم میکنه اما حدفشون نمیکنه. بنابراین، میشه با اطمینان گفت که RowPress آخرین حمله «hammer» نخواهد بود.
نکته مثبت اینه که چنین مطالعاتی در حال حاضر یه تمرین بصورت تئوری هستش. محققان در حال یافتن بردارهای حمله جدید هستن و سازندگان دستگاه ها در حال ارائه اقدامات دفاعی جدید . مطمئناً، ممکنه در نهایت اونا بطور تصادفی آسیب پذیری با پتانسیل بالا برای اکسپلویت انبوه کشف کنن. با این حال، با نگاهی به تاریخچه چنین مطالعاتی در دهه گذشته، این امر محتمل به نظر نمیرسه.
اما نباید چنین تحقیقاتی رو صرفاً از این نظر که تئوری و انتزاعی هستن، رد کرد. کاری که متخصصان آزمایشگاهی امروز میتونن انجام بدن، مجرمان سایبری واقعی ممکنه، فردا یا پنج یا ده سال دیگه انجام بدن. در مورد ارائه دهندگان خدمات ابری، اونا باید در حال حاضر از آخرین پیشرفت ها مطلع باشن و اونارو بطور ثابت در مدل های امنیتی خودشون لحاظ کنن.
منابع: