محققان دانشگاه علوم و فناوری دفاعی ارتش آزادیبخش خلق، دانشگاه ملی سنگاپور و ETH زوریخ روش جدیدی را برای حمله به مناطق دور افتاده اینتل SGX (برنامه های گارد نرم افزاری) توسعه داده اند. این حمله SmashEx نامیده می شود و به دلیل مشکلاتی در ورود مجدد در هنگام مدیریت شرایط استثنا در طول عملیات اجزای زمان اجرا برای Intel SGX ایجاد می شود. روش حمله پیشنهادی این امکان را به شما میدهد که اگر روی سیستم عامل کنترل دارید، دادههای محرمانه واقع در enclave را تعیین کنید، یا کپی کد خود را در حافظه Enclave و اجرای آن سازماندهی کنید.
نمونههای اولیه اکسپلویت برای انکلاوهایی با زمان اجرا بر اساس Intel SGX SDK (CVE-2021-0186) و Microsoft Open Enclave (CVE-2021-33767) آماده شدهاند. در مورد اول، توانایی استخراج یک کلید RSA مورد استفاده در وب سرور برای HTTPS نشان داده شد و در مورد دوم، امکان تعیین محتوای بدست آمده توسط ابزار cURL در حال اجرا در داخل محصور وجود داشت. این آسیبپذیری قبلاً به صورت برنامهریزی در نسخههای Intel SGX SDK 2.13 و Open Enclave 0.17.1 برطرف شده است. علاوه بر Intel SGX SDK و Microsoft Open Enclave، این آسیبپذیری در Google Asylo SDK، EdgelessRT، Apache Teaclave، Rust SGX SDK، SGX-LKL، CoSMIX و Veracruz نیز دیده میشود.
بیایید به یاد بیاوریم که فناوری SGX (افزونههای محافظ نرمافزار) در پردازندههای نسل ششم اینتل Core (Skylake) ظاهر شد و مجموعهای از دستورالعملها را ارائه میدهد که به برنامههای سطح کاربر اجازه میدهد تا مناطق حافظه بسته را تخصیص دهند - محتویات آنها قابل خواندن و خواندن نیست. حتی توسط هسته و کد اجرا شده در حالتهای ring0، SMM و VMM اصلاح شده است. انتقال کنترل به کد موجود در محصور با استفاده از توابع پرش سنتی و دستکاری با رجیسترها و پشته غیرممکن است - دستورالعمل های جدید ایجاد شده ویژه EENTER، EEXIT و ERESUME برای انتقال کنترل به محصور استفاده می شود که بررسی های اختیاری را انجام می دهد. در این حالت، کد قرار داده شده در enclave می تواند از روش های فراخوانی کلاسیک برای دسترسی به توابع داخل محفظه و دستورالعمل های ویژه برای فراخوانی توابع خارجی استفاده کند. رمزگذاری حافظه محصور برای محافظت در برابر حملات سخت افزاری مانند اتصال به یک ماژول DRAM استفاده می شود.
مشکل این است که فناوری SGX به سیستم عامل اجازه میدهد تا با پرتاب یک استثنای سختافزاری، یک Enclave را لغو کند، و enclaves به درستی اصول اولیه را برای مدیریت اتمی چنین استثناهایی پیادهسازی نمیکنند. برخلاف هسته سیستمعامل و برنامههای معمولی، کدهای داخل محصورها به موارد اولیه برای سازماندهی اقدامات اتمی هنگام مدیریت استثناهای پرتاب شده ناهمزمان دسترسی ندارند. بدون موارد اولیه اتمی مشخص شده، محصور میتواند در هر زمان قطع شود و به اجرا برگردد، حتی در مواقعی که انکلاو در حال اجرای بخشهای بحرانی است و در وضعیت ناامن قرار دارد (مثلاً زمانی که رجیسترهای CPU ذخیره یا بازیابی نمیشوند).
برای عملکرد عادی، فناوری SGX اجازه می دهد تا اجرای محصور توسط استثناهای سخت افزاری قابل تنظیم قطع شود. این ویژگی به محیطهای زمان اجرا محصور اجازه میدهد تا پردازش استثنا یا پردازش سیگنال درون محصور را پیادهسازی کنند، اما همچنین میتواند باعث خطاهای ورود مجدد شود. حمله SmashEx بر اساس بهرهبرداری از نقصهایی در SDK است که به دلیل آن وضعیت فراخوانی مجدد کنترلکننده استثنا به درستی مدیریت نمیشود. مهم است که برای سوء استفاده از آسیبپذیری، مهاجم باید بتواند اجرای enclave را قطع کند، یعنی. باید عملکرد محیط سیستم را کنترل کند.
پس از پرتاب یک استثنا، مهاجم یک پنجره زمانی کوچک دریافت می کند که در طی آن می توان رشته اجرا را از طریق دستکاری پارامترهای ورودی رهگیری کرد. به طور خاص، اگر به سیستم دسترسی دارید (محیط خارج از محصور)، میتوانید بلافاصله پس از اجرای دستور ورود محصور (EENTER) یک استثنا جدید ایجاد کنید، که کنترل را در مرحلهای که تنظیم پشته برای Enclave هنوز تکمیل نشده است، که در آن وضعیت رجیسترهای CPU نیز ذخیره می شود.
سپس سیستم می تواند کنترل را به انکلاو برگرداند، اما از آنجایی که پشته محصور در زمان وقفه پیکربندی نشده بود، انکلاو با پشته موجود در حافظه سیستم اجرا می شود، که می تواند برای به کارگیری برنامه نویسی بازگشت گرا (ROP) استفاده شود. ) تکنیک های بهره برداری برنامه نویسی گرا). هنگام استفاده از تکنیک ROP، مهاجم سعی نمیکند کد خود را در حافظه قرار دهد، بلکه بر روی قطعاتی از دستورالعملهای ماشینی که از قبل در کتابخانههای بارگذاری شده موجود است، عمل میکند و با یک دستورالعمل بازگشت کنترل پایان مییابد (به عنوان یک قاعده، اینها انتهای توابع کتابخانه هستند). . کار این اکسپلویت به ایجاد زنجیره ای از فراخوانی ها به بلوک های مشابه ("گجت ها") برای دستیابی به عملکرد مورد نظر ختم می شود.
منبع: opennet.ru