هک رمزگذاری CPU اپل

11 فروردین 1403 233 بازدید
هک رمزگذاری CPU اپل

روابط عمومی شرکت ایدکو (توزیع‌کننده‌ی محصولات کسپرسکی در ایران)؛ اواسط مارس، محققین چندین دانشگاه آمریکا مقاله‌ای را منتشر کردند که نشان‌دهنده‌ی آسیب‌پذیری سخت‌افزاری در سری M سی‌پی‌یوهای اپل بود. این سی‌پی یوها که مبتنی بر معماری ARM هستند و اپل آن‌ها را طراحی کرده بیشتر لپ‌تاپ‌ها و دسکتاپ‌های جدیدتر و نیز برخی مدل‌های آیپد این شرکت را تأمین می‌کنند. این معضل شاید برای این بوجود آمده که مهاجمین خواستند برای شکستن الگوریتم‌های رمزگذاری این آسیب‌پذیری احتمالی را اکسپلویت کنند. حمله‌ای که از این آسیب‌پذیری برای حمله استفاده می‌کند GoFetch نامگذاری شده است. ترکیب این موضوع داغ و نام بزرگی چون اپل باعث شد این مقاله فنی از سوی طیف گسترده‌ای از رسانه‌ها مورد توجه قرار گیرد. خیلی از رسانه‌ها حتی تیترهای داغی مانند «داده‌های خصوصی‌تان را دست لپ‌تاپ‌های اپل ندهید» زدند. در واقعیت اما وضعیت خیلی هم وخیم نیست. با این وجود برای پی بردن به موضوع باید کمی سراغ ساز و کار سی‌پی‌یوها برویم؛ مشخصاً پرداختن به سه مفهوم پیش‌واکشی داده، برنامه‌‌نویسی در زمان ثابت و حملات کانال جانبی به فهم بیشتر مسئله کمک خواهد کرد. مثل همیشه سعی خواهیم داشت مبحث را به ساده‌ترین شکل خدمتتان توضیح دهیم.

پیش‌واکشی داده

سی‌پی‌یوی کامپیوتر دسکتاپ یا لپ‌تاپ برنامه‌هایی را بازنمایی‌شده در قالب کدهای ماشین اجرا می‌کند. بهتر بگوییم: اینها تعدادی عدد هستند؛ برخی نشان‌دهنده دستورالعمل‌اند و باقی نشان‌دهنده داده‌های محاسباتی. در این سطح بنیادی، بیشتر بحث سر فرمان‌های پایه است: واکشی یک سری داده از مموری، محاسبه چیزی با این داده‌ها و نوشتن نتیجه و بازگردانی آن به مموری. گمان می‌کنید این عملیات‌ها باید تحت این ترتیب اجرا شوند. بگذارید مثالی ساده بیاوریم: کاربری پسوردش را برای دسترسی به کیف‌پول رمزارز وارد می‌کند. کامپیوتر نیاز دارد از رم، پسورد را بخواند، عملیات‌های رایانشی را در تعدادی خاص اجرا کرده، چک کند آیا پسورد درست است یا نه و تازه بعدش هست که به داده‌های محرمانه دسترسی پیدا می‌کند. اگر نحوه اجرای کد سی‌پی‌یوهای امروزی نین بود که کامپیوترهای ما به طرز عجیبی کند بودند. پس چطور به امور سرعت داده می‌شود؟ اینجاست که بهینه‌سازی مهم می‌شود، یکی از بهینه‌سازی‌ها همین پیش‌واکشی داده است. بگذارید ساز و کارش را برایتان توضیح دهیم: اگر کد برنامه حاوی فرمانی برای دریافت داده باشد چرا برای سرعت دادن به امور پیش از موعد لود نشود؟ سپس  درصورتیکه داده‌ها زمانی مفید واقع شدند اجازه داده می‌شود برنامه کمی سریعتر عمل کند. اگر هم مفید نبودند ایرادی ندارد: آن را می‌شود از حافظه نهان سی‌پی‌یو حذف کرد و چیز دیگری را پیش‌واکشی کرد. این ساز و کار پایه پیش‌واکشی داده بود. سی‌پی‌یوهای اپل از یک پیش‌واکش جدیدتر معروف به «پیش‌واکش داده‌ی متکی به مموری» یا DMP استفاده می‌کند. اگر بخواهیم کوتاه توضیح دهیم، DMP تهاجمی‌تر عمل می‌کند. فرمان‌هایی برای دریافت داده از مموری همیشه هم صریح نیستند. اشاره‌گرها به مکان‌های حافظه خاص ممکن است نتیجه کار محاسباتی باشد که هنوز باید انجام شود، یا ممکن است در یک آرایه داده ذخیره شوند که برنامه بعداً به آن دسترسی خواهد داشت.

DMP سعی می‌کند حدس بزند کدام داده در برنامه نشانگر یک مکان حافظه است. منطق هم همین را می‌گوید:   اگر چیزی شبیه اشاره‌گر به نظر می رسد، سعی کنید داده‌ها را در آن آدرس واکشی کنید. فرآیند حدس زدن به تاریخچه عملیات اخیر متکی است - حتی اگر آنها به یک برنامه کاملاً متفاوت تعلق داشته باشند. در سال 2022، مطالعه دیگری نشان داد که DMP تمایل دارد نشانگرها را با سایر داده هایی که برنامه با آنها کار می‌کند اشتباه بگیرد. این لزوماً به خودی خود یک مشکل نیست - بارگذاری موارد اشتباه در حافظه پنهان CPU کار بزرگی نیست. اما وقتی حرف الگوریتم های رمزگذاری به میان می‌آید، مشکل‌ساز می شود. DMP می‌تواند برنامه‌نویسی زمان ثابت را تحت شرایط خاصی قطع کند. در ادامه در مورد این موضوع صحبت کنیم.

برنامه‌‌نویسی در زمان ثابت

یک قانون ساده وجود دارد: زمان پردازش داده‌ها نباید به ماهیت آن داده‌ها بستگی داشته باشد. در رمزنگاری، این یک اصل اساسی برای محافظت از الگوریتم های رمزگذاری در برابر حملات است. اغلب، عوامل مخرب سعی می‌کنند با تغذیه داده‌ها و مشاهده خروجی رمزگذاری‌شده به الگوریتم رمزگذاری حمله کنند. مهاجم کلید خصوصی مورد استفاده برای رمزگذاری داده ها را نمی‌شناسد. اگر آنها این کلید را کشف کنند، می‌توانند سایر داده ها، مانند ترافیک شبکه یا رمزهای عبور ذخیره شده در سیستم را رمزگشایی کنند. الگوریتم‌های رمزگذاری ضعیف برخی از داده‌ها را سریعتر از بقیه پردازش می‌کنند. حال عامل مخرب ابزار هک قدرتمندی در اختیار دارد: با مشاهده زمان اجرا الگوریتم، به سادگی می‌تواند بالقوه می‌توانند کلید خصوصی را بازسازی کنند. اکثر الگوریتم‌های رمزگذاری در برابر این نوع حمله مصون هستند: سازندگان آنها مطمئن شدند که زمان محاسبات بدون توجه به داده‌های ورودی همیشه یکسان است. آزمون‌های استحکام الگوریتم همیشه شامل تلاش‌هایی برای نقض این اصل می‌شود. این همان چیزی است که برای مثال در حمله Hertzbleed رخ داد. با این حال، برای امکان سرقت کلید واقعی، حمله باید از یک کانال جانبی استفاده کند.

حمله کانال جانبی

اگر پیش‌واکشی DMP گاهی داده اپ معمولی را با اشاره‌گر مموری اشتباه می‌گیرد آیا بدین‌معناست که بخشی از کلید خصوصی را هم می‌تواند با اشاره‌گر اشتباه بگیرد؟ جواب این است: بله می‌تواند! محققین این را در عمل با استفاده از دو آرشیو رمزگذاری داده محبوب نشان دادند: Go Crypto  (آرشیو استاندارد Go developers) و OpenSSL (استفاده‌شده برای رمزگذاری ترافیک شبکه و بسیاری از چیزهای دیگر). آنها الگوریتم های رمزگذاری مختلفی را بررسی کردند - از جمله RSA و Diffie-Hellman همه جا حاضر، و همچنین Kyber-512 و Dilithium-2 که در برابر حملات محاسباتی کوانتومی مقاوم هستند.   با تلاش برای واکشی داده‌ها از یک اشاره‌گر نادرست که در واقع قطعه‌ای از یک کلید خصوصی است، DMP اساساً کلید را به مهاجم «لو می‌دهد».

یک نکته وجود دارد: بدافزار فرضی مورد نیاز برای این حمله به حافظه پنهان دسترسی ندارد. ما نمی دانیم DMP چه چیزی در آنجا بارگذاری کرده یا از کدام آدرس RAM داده ها را دریافت نموده. با این حال، اگر حمله مستقیم امکان‌پذیر نباشد، هنوز امکان استخراج اطلاعات از طریق یک کانال جانبی وجود دارد. چیزی که این امکان را فراهم می‌کند ویژگی ساده هر کامپیوتری است: داده‌های بارگذاری شده در حافظه پنهان CPU سریعتر از داده‌های موجود در RAM معمولی پردازش می شوند. بیایید کمی حمله را بررسی کنیم. ما بدافزاری داریم که می‌تواند داده‌های دلخواه را به الگوریتم رمزگذاری بخوراند. دومی داده‌های مختلفی را در حافظه پنهان بارگذاری می کند، از جمله یک کلید رمزگذاری مخفی. DMP گاهی اوقات به اشتباه داده‌ها را از آدرسی که در واقع بخشی از این کلید است واکشی می‌کند. مهاجم می‌تواند به‌طور غیرمستقیم متوجه شود که داده‌ها از یک آدرس خاص واکشی شده‌اند، با اندازه‌گیری زمان لازم برای دسترسی CPU به قطعات خاصی از داده‌ها: اگر داده‌ها در حافظه پنهان بودند، دسترسی به آن کمی سریع‌تر از موارد دیگر خواهد بود. این دقیقاً همان چیزی بود که محققین اصل برنامه‌نویسی زمان ثابت را شکستند: ما می‌توانیم متن دلخواه را به الگوریتم وارد کنیم و زمان پردازش متفاوت را تماشا کنیم.

پس آیا داده‌های ما در خطر است؟

در عمل، استخراج کلید رمزگذاری نیازمند ده‌ها تا صدها هزار عملیات محاسباتی است، زیرا ما داده‌ها را به الگوریتم وارد کرده و به طور غیرمستقیم وضعیت حافظه پنهان را نظارت می‌کنیم. این یک حمله مطمئن است، اما بسیار نیازمند متکی به منابع عمل می‌کند: سرقت یک کلید در بهترین حالت یک ساعت طول می‌کشد – در بدترین حالت بیش از ده ساعت. و برای تمام این مدت، تلاش محاسباتی دستگاه را تقریباً با ظرفیت کامل کار می‌کند. با این حال این چیزی نیست که حمله مذکور را اجرانشدنی می‌کند. ما بارها اشاره کردیم که حمله به بدافزاری نیاز دارد که روی کامپیوتر قربانی نصب شود. همانطور که گمان می‌رود، اگر سناریو این باشد، داده از قبل دستکاری شده است. پس روش‌های آسانتری وجود دارد که در این بخش به این مهم رسید. برای همین است توسعه‌دهندگان  OpenSSL حتی گزارش محققین را هم لحاظ نکردند: چنین حملاتی خارج از مدل امنیتی آن‌هاست.

همه مطالعات این چنینی می‌توانند با مهندسی شهری مقایسه شوند. برای ساختن سازه‌ای مستحکم، مهندسین باید مشخصه‌های موادی که می‌خواهند استفاده کنند، خاصیت خاک آن منطقه و ریسک زلزله و کلی موارد دیگر را بررسی کرده باشند. در بیشتر موارد حتی یک ساختمانی با ساختار ضعیف بدون مشکل تا چند دهه باقی می‌ماند اما ترکیب نادر شرایط در نهایت ممکن است به فاجعه منجر شود. سناریوهای حمله مانند GoFetch طراحی شدند تا چنین فجایعی را که به نشت انبوه داده‌های محرمانه کاربری منجر می‌شود دور بزنند. محققین به مطالعه این مکانیسم نسبتاً جدید پیش واکشی ادامه خواهند داد. پردازنده‌های اینتل نیز با شروع نسل سیزدهم از آن استفاده می‌کنند، اما ثابت کرده‌اند نسبت به این نوع حمله خاص که در مقاله تحقیقاتی پیشنهاد شده است، حساس نیستند. آنچه اهمیت دارد این است که این آسیب‌پذیری قابل اصلاح نیست: همچنان بر پردازنده‌های M1 و M2 اپل در تمام طول عمر آنها تأثیر می‌گذارد. تنها راه جلوگیری از این نوع حمله، اصلاح الگوریتم‌های رمزگذاری است. یکی از احتمالات، محدود کردن محاسبات به هسته‌های «کارآمد انرژی» CPU است، زیرا DMP فقط روی هسته‌های «با عملکرد بالا» کار می‌کند. یکی دیگر از موارد مبهم کردن کلیدهای رمزگذاری قبل از بارگیری آنها در RAM است. یکی از عوارض جانبی این روش ها کاهش عملکرد است - اما کاربر به سختی متوجه می شود. به نوبه خود، CPUهای Apple M3 دارای پرچم خاصی هستند که بهینه سازی DMP  برای عملیات‌های حساس را غیرفعال می‌کند. بگذارید خلاصه کنیم: هیچ تهدید فوری برای داده‌های ذخیره‌شده روی دستگاه‌های اپل وجود ندارد (محال است کسی سعی کند برای سرقت داده از چنین تکنیک پیچیده‌ای استفاده کند). با این وجود،  این چیزی از ارزش کاری که محققین دانشگاه‌های آمریکایی کردند کم نمی‌کند زیرا به هر حال نوری به ابعاد عملیاتی ناشناخته جدیدترین سی‌پی‌یوها انداخته شد که مسیر را روشن‌تر می‌کند. تلاش آن‌ها در راستای یک هدف بود: جلوگیری از مشکلات آتی که ممکن است در پی کشف اکسپلویتی آسانتر پیش بیایند.

 

منبع: کسپرسکی آنلاین (ایدکو)

کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز می‌شناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکی نام دارد.