Çin Xalq Azadlıq Ordusunun Müdafiə Elmi-Texniki Universiteti, Sinqapur Milli Universiteti və Cenevrə Federal Texnologiya İnstitutunun tədqiqatçıları Intel SGX (Software Guard eXtensions) izolyasiya olunmuş anklavlarına hücum etmək üçün yeni bir metod inkişaf etdiriblər. Bu hücum SmashEx adlandırılır və Intel SGX üçün runtime komponentlərinin istisnaları ilə işləmə zamanı problemlərə əsaslanır. Təklif edilən hücum metodu əməliyyat sisteminə nəzarət edildiyi halda anklavda yerləşən məxfi məlumatları müəyyən etməyə və ya öz kodunuzu anklavın yaddaşına köçürərək icra etməyə imkan tanıyır.
Intel SGX SDK (CVE-2021-0186) və Microsoft Open Enclave (CVE-2021-33767) əsasında runtime ilə anklavlar üçün exploit prototipləri hazırlanmışdır. Birinci halda, HTTPS üçün web serverdə istifadə olunan RSA açarının çıxarılması imkanı nümayiş etdirilib, ikinci halda isə anklavın içində başladılan cURL vasitəsilə əldə edilən məzmun müəyyən edilib. Zəiflik artıq Intel SGX SDK 2.13 və Open Enclave 0.17.1 versiyalarında proqramla aradan qaldırılıb. Intel SGX SDK və Microsoft Open Enclave paketlərindən başqa, bu zəiflik Google Asylo, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX və Veracruz SDK-larında da özünü göstərir.
Xatırladaq ki, SGX (Software Guard Extensions) texnologiyası Intel Core altıncı nəsil prosessorlarında (Skylake) meydana çıxdı və istifadəçi səviyyəsi tətbiqlərinə gizli yaddaş sahələri — anklavlar — ayırmağa imkan verən bir sıra instrukslara malikdir. Anklavların içindəki məzmun, hətta ring0, SMM və VMM rejimlərində fəaliyyət göstərən təməl kod tərəfindən oxuna və dəyişdirilə bilmir. Anklavda kod icrasını təmin etmək üçün ənənəvi keçid funksiyaları və registrlərlə, yığını manipulyasiya etməklə idarə keçirmək mümkün deyil — anklava idarəetmə keçidi üçün xüsusi olaraq yaradılmış yeni EENTER, EEXIT və ERESUME instrukslardan istifadə olunur ki, bunlar yoxlama imkanlarını yerinə yetirir. Bu halda, anklava yerləşdirilmiş kod, anklavın içindəki funksiyalara müraciət etmək üçün klassik çağırış metodlarını və xarici funksiyaları çağırmaq üçün xüsusi bir instruksiyanı tətbiq edə bilər. Avadanlıq hücumlarından, məsələn, DRAM moduluna qoşulmaqdan qorumaq məqsədilə anklavın yaddaşını şifrələmə üsulu tətbiq olunur.

Problemin səbəbi, SGX texnologiyasının əməliyyat sisteminə hardware istisnası yaradaraq, enclave-in icrasını dayandırmağa imkan verməsidir. Enclavlarda isə bu cür istisnaların atomik emalı üçün primitvlar düzgün şəkildə həyata keçirilmir. Əməliyyat sisteminin nüvəsindən və adi tətbiqlərdən fərqli olaraq, enclavların içindəki kod, qeyri-simmetrik surətdə yarana biləcək istisnaların emalı zamanı atomik hərəkətlərin təşkili üçün primitvlərə daxil olmur. Bu atomik primitvlər olmadan, enclave istənilən vaxt dayandırıla bilər və icraya qayıtmaq mümkündür, hətta enclave-in içində kritik bölmələr yerinə yetirilərkən və təhlükəsiz olmayan bir vəziyyətdə olduğu anlarda (məsələn, CPU registrləri saxlanmadıqda/bərpa edilmədikdə).

SGX texnologiyası, enclave-i qurulmuş hardware istisnaları vasitəsilə dayandırmağa imkan verir. Bu xüsusiyyət, enclave-runtime mühitlərinin daxilindəki istisnaları emal etməyə və ya siqnalları idarə etməyə imkan tanıyır, lakin bu, reentrantlıq problemlərinə də səbəb ola bilər. SmashEx hücumu, SDK-də baş verən çatışmamazlıqları istismar edərək, istisna işləyicisinin təkrarlanan çağırışını düzgün şəkildə emal etmədiyi hallar üzərində qurulmuşdur. Hücumçu zəiflikdən istifadə etmək üçün enclave-in icrasını dayandıra bilmək, yəni sistem mühitinin işinə nəzarət etməyə imkan sahibi olmalıdır.
İstisna yaradıldıqdan sonra, hücumçunun icra axınını giriş parametrləri ilə manipulyasiya edərək ələ keçirmək üçün qısa bir vaxt pəncərəsi olur. Xüsusilə, sistemə (enclave-dan kənar mühitə) giriş imkanı olduqda, enclave-yə giriş əmri (EENTER) yerinə yetirildikdən dərhal sonra yeni bir istisna yarada bilər. Bu idarənin sistemə qaytarılmasına səbəb olur, o zaman hələ də enclave üçün yığın tənzimlənməsi tamamlanmamışdır, burada CPU registrlərinin vəziyyəti də saxlanılır.
Sistem daha sonra idarəni enclavda geri qaytara bilər, lakin kesmə zamanı enclavın steki konfiqurasiya edilmədiyindən, enclav sistemin yaddaşında olan stek ilə işləyəcək, bu da geri yönləndirilmiş proqramlaşdırma (ROP — Return-Oriented Programming) əsaslı istismar metodlarını tətbiq etmək üçün istifadə oluna bilər. ROP teknikasından istifadə etdikdə, hücumçu öz kodunu yaddaşda yerləşdirməyə çalışmır, artıq yüklənmiş kitabxanalarda mövcud olan maşın təlimatlarının parçaları ilə işləyir, bunlar idarəni dönmə təlimatı ilə bitir (adətən, bunlar kitabxana funksiyalarının sonlarıdır). İstismar işinin mərkəzi, oxşar blokların ("gadjetlər") çağırış zəncirini qurmaqdan ibarətdir ki, bu da lazım olan funksionallığı əldə etməyə imkan yaradır.


Mənbə: opennet.ru
