Kaitse teadlased Hiina Rahvavabastamise Armee Tehnikaülikoolist, Singapuri Rahvusülikoolist ja Zürichi Tehnikaülikoolist on välja töötanud uue meetodi Intel SGX (Software Guard eXtensions) eraldatud enklaavide ründamiseks. Rünnak sai nimeks SmashEx ja see on põhjustatud probleemidest reentrantsi käsitlemisel Intel SGX runtime-komponentide töötamise ajal. Ettepanekud rünnakumeetod võimaldab, kui operatsioonisüsteemi on kontrollitud, tuvastada konfidentsiaalseid andmeid, mis asuvad enklaavis, või korraldada oma koodi kopeerimist enklaavi mällu ja selle käivitamist.
Eksploitide prototüübid on ette valmistatud Intel SGX SDK (CVE-2021-0186) ja Microsoft Open Enclave (CVE-2021-33767) baasil töötavate anklavide jaoks. Esimesel juhul demonstreeriti RSA-võtme väljavõtmise võimalust, mida kasutatakse HTTPS-i jaoks veebiserveris, samas kui teisel juhul õnnestus määrata cURL utiliidi sisu, mis käivitus anklavis. Haavatavus on juba kõrvaldatud tarkvarauuudistes Intel SGX SDK 2.13 ja Open Enclave 0.17.1. Peale Intel SGX SDK ja Microsoft Open Enclave ilmus haavatavus ka Google Asylo, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX ja Veracruz SDK-des.
Tulet meenutada, et SGX (Software Guard Extensions) tehnoloogia ilmus Intel Core kuue põlvkonna (Skylake) protsessorites ning see pakub rida käske, mis võimaldavad rakendustele luua kasutaja taseme suletud mälualad — enklaavid, mille sisu ei saa lugeda ega muuta isegi tuuma ja ring0, SMM või VMM režiimides töötava koodi poolt. Juhtimist enklaavis olevale koodile ei saa üle anda traditsiooniliste hüpetefunktsioonide ja registrite ning stack'i manipuleerimise kaudu — juhtimise edastamiseks enklaavi kasutatakse spetsiaalselt loodud uusi käske EENTER, EEXIT ja ERESUME, mis teostavad volituste kontrolli. Samuti võib enklaavi paigutatud kood kasutada klassikalisi meetodeid funktsioonide kõnetamiseks enklaavis ja spetsiaalset käsku väliste funktsioonide kutsumiseks. Riistvararünnakute, näiteks DRAM moodulite seadmete ühendamise vastu, kasutatakse enklaavi mälu krüpteerimist.

Probleem on seotud sellega, et tehnoloogia SGX võimaldab operatsioonisüsteemil katkestada anklaadi täitmise, genereerides riistvaralise erandi, kuid anklaites ei ole nõuetekohaselt rakendatud primitiive sarnaste erandite atomaarseks töötlemiseks. Erinevalt operatsioonisüsteemi tuumast ja tavapärasest tarkvarast ei ole kood anklaites juurdepääsu primitiividele atomaarsete toimingute korraldamiseks asünkroonselt esinevate erandite töötlemise ajal. Ilma nimetatud atomaarsete primitiivide olemasoluta võib anklai igal ajal katkestada ja jätkata täitmist, isegi hetkel, kui anklaadis täidetakse kriitilisi sektsioone ja see on ebausaldusväärses olekus (näiteks kui CPU registrid ei ole salvestatud/taasalustatud).

SGX-tehnoloogia normaalne toimimine võimaldab katkestada anklavide täitmise seadistatud riistvaralihenduste abil. See omadus võimaldab anklavide runtime-keskkondadel teostada anklavi siseseid erandeid või signaalide töötlemist, kuid see võib samuti põhjustada reentratabluse vigu. SmashEx rünnak põhineb SDK-s esinevate puudujääkide ärakasutamisel, mis takistavad õigesti eranditöötleja korduvat käivitamist. Oluline on, et rünnaku teostamiseks peab ründaja suutma katkestada anklavi täitmise, st kontrollima süsteemikeskkonna toimimist.
Pärast erandi genereerimist saab ründaja väikese ajavahemiku, mille jooksul saab läbi sisendparameetrite manipuleerimise täitmise voogu katkestada. Eelkõige, kui süsteemile (keskkonnale väljaspool enklaavi) on juurdepääs, on võimalik kohe pärast enklaavi sisenemise käsu (EENTER) täitmist luua uus erand, mis viib juhtimise tagasitoomiseni süsteemi etappi, kus enklaavi jaoks ei ole veel virnastamise seadistamine lõpule viidud, sealhulgas CPU registrite oleku salvestamine.
Süsteem võib seejärel tagastada kontrolli tagasi enklaavi, kuid kuna enklaavi virn katkestamise ajal ei olnud seadistatud, siis viib enklaav töötlemist süsteemi mälus olevas virnas, mida saab kasutada tagasipööratud programmeerimise (ROP — Return-Oriented Programming) põhinevate ekspluateerimismeetodite rakendamiseks. ROP-tehnika kasutamisel ei proovi ründaja oma koodi mälu paigutada, vaid opereerib juba laaditud teekides leiduvate masinakeelsete käskude fragmentidega, mis lõppevad kontrolli tagastamise käsuga (tavaliselt teekide funktsioonide lõpud). Ekspluudi tööks on sarnaste plokkide („gadžetide”) kõnede ahelate ehitamine soovitud funktsionaalsuse saavutamiseks.


Allikas: opennet.ru
