حمله BTR به‌عنوان واریانت جدید Spectre v2، هش رمز عبور Root در لینوکس را طی چند دقیقه افشا می‌کند

اشتراک گذاری

حمله BTR
❞ یک واریانت جدید از Spectre v2 با نام حمله BTR (Branch Target Reuse) شناسایی شده است که می‌تواند از ضعف در پیش‌بینی‌کننده شاخه (Branch Predictor) پردازنده‌ها برای افشای داده‌های حساس سوءاستفاده کند. حمله BTR با سوءاستفاده از اطلاعات قدیمی باقی‌مانده در پیش‌بینی‌کننده شاخه، پس از آنکه موتور کامپایل در لحظه (JIT) از یک بخش حافظه برای کد جدید استفاده می‌کند، پردازنده را به اجرای موقت (Transient Execution) دستورالعمل‌های نادرست وادار می‌کند؛ روشی که در آزمایش‌ها امکان بازیابی هش رمز عبور حساب Root در سیستم‌های Intel مبتنی بر لینوکس (Linux) را تنها طی چند دقیقه فراهم کرده است.

شناسایی و ارزیابی حمله BTR

پژوهشگران گروه امنیت سیستم‌ها و شبکه در دانشگاه VU آمستردام که با نام VUSec شناخته می‌شود، به همراه پژوهشگران دانشگاه سنت‌آنا (Scuola Superiore Sant’Anna)، حمله جدیدی را طراحی کرده و امکان اجرای عملی آن را در برابر موتور جاوااسکریپت (JavaScript) اسپایدرمانکی (SpiderMonkey) در مرورگر فایرفاکس، پلتفرم GraalVM و cBPF در کرنل لینوکس (Linux Kernel) ارزیابی کرده‌اند.

یافته‌های این پژوهش نشان می‌دهد حمله BTR برخلاف تصور پیشین درباره غیرعملی بودن این دسته از حملات، می‌تواند در محیط‌های واقعی نیز قابل اجرا باشد.

به گفته پژوهشگران دانشگاه VU آمستردام، این یافته از اهمیت ویژه‌ای برخوردار است؛ زیرا از سال 2018 تصور می‌شد چنین حملاتی از نظر عملی قابل اجرا نیستند. این تصور از آنجا شکل گرفته بود که کدهای قابل تغییر در زمان اجرا (SMC) مبنای تولید پویای کد در موتورهای کامپایل در لحظه (JIT) مورد استفاده در محصولات تجاری هستند.

حمله BTR این فرض را رد می‌کند و نشان می‌دهد حملات اجرای موقت مبتنی بر کدهای قابل تغییر در زمان اجرا می‌توانند در محیط‌های واقعی عملی باشند و برای افشای هش رمز عبور حساب Root مورد استفاده قرار گیرند.

پژوهشگران پس از شناسایی این آسیب‌پذیری‌ها، موضوع را به شرکت‌های توسعه‌دهنده محصولات تحت تأثیر گزارش کردند. این آسیب‌پذیری‌ها با شناسه‌های CVE-2026-64507 و CVE-2026-64508 ثبت شده‌اند و پچ‌های امنیتی مربوط به آن‌ها نیز در کرنل لینوکس اعمال شده است.

سوءاستفاده از اطلاعات باقی‌مانده در پیش‌بینی‌کننده شاخه

در حمله کانال جانبی مبتنی بر اجرای پیش‌بینی‌شده (Speculative Execution Side-Channel) موسوم به Spectre v2، پردازنده فریب داده می‌شود تا برای مدت کوتاهی دستورالعمل‌هایی را در مسیری اجرا کند که مقصد آن به‌اشتباه پیش‌بینی شده است. این اجرای موقت می‌تواند وضعیت کش پردازنده (CPU Cache) را تغییر دهد و از این طریق اطلاعات حساس را افشا کند.

پژوهشگران توضیح می‌دهند که حمله BTR پس از جایگزین شدن کد در آن مقصد، از پیش‌بینی قدیمی باقی‌مانده در پردازنده استفاده می‌کند. به این معنا که وقتی کد قبلی از حافظه حذف و کد جدیدی در همان آدرس قرار می‌گیرد، پردازنده ممکن است همچنان مقصد شاخه غیرمستقیم (Indirect Branch Target) مربوط به کد قبلی را در پیش‌بینی‌کننده شاخه در اختیار داشته باشد.

این حمله از شکاف میان کد تولیدشده توسط کامپایل در لحظه (JIT) و پیش‌بینی‌کننده شاخه پردازنده استفاده می‌کند. موتور JIT می‌تواند کد موجود را از حافظه آزاد کرده و کد جدیدی را در همان آدرس قرار دهد؛ با این حال، اطلاعات مربوط به مقصد شاخه قبلی ممکن است همچنان مورد استفاده پردازنده قرار گیرد.

در ادامه، زمانی که یک شاخه جدید اجرا می‌شود و پردازنده باید تعیین کند دستورالعمل بعدی از کجا اجرا شود، ممکن است برای مدت کوتاهی بر اساس همان مقصد قدیمی عمل کرده و کد جدید را به‌صورت پیش‌بینی‌شده اجرا کند؛ در حالی که مسیر واقعی اجرای برنامه باید به بخش دیگری از کد منتهی شود.

حمله BTR
نمایی از سازوکار اجرای حمله BTR

چگونه حمله BTR امکان بازیابی هش رمز عبور Root را فراهم می‌کند؟

پژوهشگران در آزمایش‌های خود روی لینوکس، از برنامه‌های مبتنی بر مدل اولیه BPF (Classic BPF یا cBPF) بدون نیاز به سطح دسترسی ویژه استفاده کردند. آن‌ها ابتدا با اجرای این برنامه‌ها، پردازنده را به‌گونه‌ای تحت تأثیر قرار دادند که مقصد یک شاخه مشخص را پیش‌بینی کند. سپس حافظه اختصاص‌یافته به برنامه اصلی را آزاد کردند و برنامه‌ای متفاوت را در همان فضای حافظه قرار دادند.

در این مرحله، اطلاعات قدیمی باقی‌مانده در پیش‌بینی‌کننده شاخه باعث شد پردازنده اجرای دستورالعمل‌های موردنظر مهاجم را از یک آفست غیرهم‌تراز (Misaligned Offset) در حافظه آغاز کند. در نتیجه، پردازنده به‌صورت موقت به داده‌هایی دسترسی پیدا کرد که در حالت عادی نباید به آن‌ها دسترسی داشته باشد. این دسترسی، وضعیت کش پردازنده را تغییر داد و پژوهشگران با تحلیل این تغییرات توانستند داده موردنظر را بایت‌به‌بایت بازیابی کنند.

در ادامه، پژوهشگران یک پردازه su در حال اجرا را هدف قرار دادند و توانستند هش رمز عبور حساب Root را از حافظه آن با سرعت 8 بایت در ثانیه بازیابی کنند. آن‌ها سپس یک اکسپلویت کامل و سرتاسری (End-to-End Exploit) را روی پردازنده‌های مبتنی بر معماری‌های Raptor Cove و Lion Cove آزمایش کردند. در این آزمایش، بازیابی کامل هش رمز عبور در این دو معماری به‌ترتیب به‌طور میانگین 3 و 5 دقیقه زمان برد. این نتایج نشان می‌دهد که حمله BTR می‌تواند در شرایط آزمایشگاهی، اطلاعات حساس موجود در حافظه را در مدت کوتاهی بازیابی کند.

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

مقاله فنی منتشرشده، دو اکسپلویت کامل و سرتاسری را بررسی می‌کند؛ یکی با تنظیمات پیش‌فرض و دیگری در شرایطی که مکانیزم حفاظتی Constant Blinding (مخفی‌سازی مقادیر ثابت) فعال است.

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

حمله BTR
تغییر اکسپلویت برای دور زدن مکانیزم حفاظتی Constant Blinding

بررسی آسیب‌پذیری موتورهای JIT و پردازنده‌های مدرن

پژوهشگران موتورهای JIT مرورگر فایرفاکس و پلتفرم GraalVM متعلق به اوراکل (Oracle) را به‌صورت جداگانه بررسی کردند تا مشخص شود آیا این حمله می‌تواند در این محیط‌ها نیز اجرا گردد یا خیر.

در موتور اسپایدرمانکی (SpiderMonkey) فایرفاکس کد اثبات مفهوم (PoC) توسعه‌یافته توسط VUSec نشان داد که پیش‌بینی‌های قدیمی حتی پس از استفاده مجدد از حافظه برای کد جدید نیز باقی می‌مانند. با وجود این، پژوهشگران نتوانستند این یافته را به یک اکسپلویت کامل علیه مرورگر تبدیل کنند.

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

پژوهشگران در آزمایش روی سخت‌افزارهای مورد استفاده در شرایط واقعی نیز دریافتند که بیشتر پردازنده‌های مدرن در برابر این حمله آسیب‌پذیر هستند. به گفته VUSec، پیش‌بینی شاخه‌های غیرمستقیم (Indirect Branch Prediction) بخشی جدایی‌ناپذیر از پردازنده‌های مدرن است و حمله BTR از ناهماهنگی میان پیش‌بینی‌کننده شاخه و وضعیت واقعی کد سوءاستفاده می‌کند.

VUSec توضیح می‌دهد که پردازنده‌های امروزی سازوکاری برای همگام‌سازی اطلاعات پیش‌بینی‌کننده شاخه با وضعیت واقعی کد ندارند. در نتیجه، تا زمانی که تولیدکنندگان پردازنده راهکاری برای رفع این ناهماهنگی ارائه نکنند، این ضعف می‌تواند همچنان امکان اجرای چنین حملاتی را فراهم کند.

همچنین پژوهشگران اعلام کرده‌اند که این ناهماهنگی را در تمامی پردازنده‌های مورد آزمایش، از جمله پردازنده‌های Intel، AMD و Arm، مشاهده کرده‌اند.

توصیه‌های امنیتی

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

این پژوهش در ادامه مطالعات VUSec درباره اجرای پیش‌بینی‌شده و حملاتی انجام شده است که از ویژگی‌های داخلی پردازنده‌ها برای افشای اطلاعات سوءاستفاده می‌کنند. این گروه پیش‌تر نیز حملاتی مانند RIDL، BHI و SLAM را بررسی کرده و آسیب‌پذیری‌های مختلفی را در پردازنده‌های مدرن شناسایی کرده است.

منابع

دیدگاهتان را بنویسید

مطالب مرتبط