Retbleed on uus rünnak Inteli ja AMD protsessorite spekulatiivse täitmismehhanismi vastu

ETH Zürichi teadlaste rühm on tuvastanud uue rünnaku CPU-s kaudsete üleminekute spekulatiivse teostamise mehhanismi vastu, mis võimaldab kerneli mälust teavet eraldada või virtuaalmasinatest hostsüsteemi vastu rünnakut korraldada. Turvaaukude koodnimetus on Retbleed (CVE-2022-29900, CVE-2022-29901) ja need on oma olemuselt lähedased Spectre-v2 rünnakutele. Erinevus tuleneb suvalise koodi spekulatiivse täitmise korraldamisest käsu “ret” (tagasi) töötlemisel, mis hangib virnast hüppamiseks aadressi, mitte kaudse hüppe, kasutades käsku “jmp”, laadides aadressi mälu või protsessori register.

Ründaja võib luua tingimused valeks ülemineku ennustamiseks ja korraldada sihipärase, spekulatiivse ülemineku koodiplokile, mida programmi täitmisloogika ette ei näe. Lõppkokkuvõttes teeb protsessor kindlaks, et haru ennustus ei olnud õigustatud, ja taastab toimingu algsesse olekusse, kuid spekulatiivse täitmise käigus töödeldud andmed satuvad vahemällu ja mikroarhitektuuripuhvritesse. Kui ekslikult käivitatud plokk pääseb juurde mälule, siis selle spekulatiivne täitmine viib mälust loetud andmete salvestamiseni jagatud vahemällu.

Pärast spekulatiivseid toiminguid vahemällu jäänud andmete kindlaksmääramiseks saab ründaja kasutada jääkandmete määramiseks külgkanali tehnikaid, näiteks analüüsida vahemällu salvestatud ja vahemällu salvestamata andmete juurdepääsuaegade muutusi. Teabe sihipäraseks hankimiseks mõnel muul privileegtasemel aladelt (näiteks tuumamälust) kasutatakse vidinaid - tuumas olevaid käskude jadasid, mis sobivad spekulatiivselt mälust andmete lugemiseks sõltuvalt välistingimustest, mida võivad mõjutada ründaja.

Et kaitsta klassikaliste Spectre klassi rünnakute eest, mis kasutavad tingimuslikke ja kaudseid hüppekäske, kasutab enamik operatsioonisüsteeme "retpoline" tehnikat, mis põhineb kaudsete hüppeoperatsioonide asendamisel käsuga "ret", mille jaoks kasutavad protsessorid eraldi virna oleku ennustamise üksust. . ei kasuta haru ennustamise plokki. Kui retpoline 2018. aastal kasutusele võeti, arvati, et Spectre-laadsed aadressimanipulatsioonid ei ole praktilised spekulatiivse hargnemise jaoks, kasutades käsku "ret".

Retbleedi ründemeetodi välja töötanud teadlased näitasid võimalust luua mikroarhitektuursed tingimused spekulatiivse ülemineku algatamiseks, kasutades käsku "ret", ja avaldasid valmis tööriistad Linuxi tuuma haavatavuse ärakasutamiseks sobivate juhiste (vidinate) jadade tuvastamiseks. milles sellised tingimused avalduvad.

Uurimistöö käigus valmistati ette töökasutus, mis võimaldab Inteli protsessoritega süsteemides eraldada kasutajaruumis olevast privilegeerimata protsessist kerneli mälust suvalisi andmeid kiirusega 219 baiti sekundis ja 98% täpsusega. AMD protsessorite puhul on ärakasutamise efektiivsus palju suurem – lekkekiirus on 3.9 KB sekundis. Praktilise näitena näitame, kuidas kasutada pakutud kasutusvõimalust faili /etc/shadow sisu määramiseks. Inteli protsessoritega süsteemides viidi rünnak juurkasutaja parooli räsi määramiseks läbi 28 minutiga ja AMD protsessoritega süsteemides 6 minutiga.

Rünnak on kinnitust leidnud Inteli protsessorite 6.–8. põlvkonna jaoks, mis lasti välja enne 3. aasta kolmandat kvartalit (sh Skylake), ning Zen 2019, Zen 1+ ja Zen 1 mikroarhitektuuridel põhinevate AMD protsessorite puhul, mis anti välja enne 2. aasta teist kvartalit. Uuemates protsessorimudelites nagu AMD Zen2021 ja Intel Alder Lake, aga ka ARM-protsessorites blokeerivad probleemi olemasolevad kaitsemehhanismid. Näiteks IBRS-i (Indirect Branch Restricted Speculation) juhiste kasutamine aitab kaitsta rünnakute eest.

Linuxi tuuma ja Xeni hüperviisori jaoks on ette valmistatud muudatuste komplekt, mis blokeerib probleemi vanemate CPU-de tarkvaras. Linuxi kerneli pakutav plaaster muudab 68 faili, lisab 1783 rida ja kustutab 387 rida. Kahjuks toob kaitse kaasa märkimisväärseid üldkulusid – AMD ja Inteli protsessoritel tehtud tekstides on jõudluse langus hinnanguliselt 14%-lt 39%-le. Eelistatavam on kasutada kaitset, mis põhineb IBRS-i juhistel, mis on saadaval Inteli uue põlvkonna protsessorites ja mida toetatakse alates Linuxi kernelist 4.19.

Inteli protsessorites toimub spekulatiivse kaudse hüppe aadressi asendamine tänu funktsioonile, mis ilmub siis, kui tagastuspinu puhvri alumise piiri (alavoolu) kaudu tekib ületäitumine. Selliste tingimuste ilmnemisel hakkab käsk “ret” rakendama aadressivaliku loogikat, mis on sarnane tavaliste kaudsete hüpete puhul kasutatavale. Linuxi tuumast on leitud üle tuhande koha, mis loovad tingimused sellise tagasivoolu algatamiseks ja on ligipääsetavad süsteemikõnede kaudu.

AMD protsessoritel teostatakse käsku "ret" spekulatiivne täitmine ilma viiteta pinuspetsiifilisele puhvrile (Return Address Stack) ja haru ennustamise üksus ei käsitle käsku "ret" mitte kontrolli tagastusena, vaid kaudse haruna. , ja kasutab vastavalt andmeid kaudsete üleminekute ennustamiseks. Nendel tingimustel saab ära kasutada peaaegu iga süsteemikõne kaudu saavutatava "ret" operatsiooni.

Lisaks on tuvastatud veel üks probleem AMD protsessorites (CVE-2022-23825, Branch Type Confusion), mis on seotud fiktiivsete harude realiseerimisega – haru ennustamise tingimused võivad tekkida ka ilma vajalike harujuhisteta, mis võimaldab mõjutada haru ennustamise puhvrit. ilma juhiseta "ret". See funktsioon raskendab oluliselt kaitse rakendamist ja nõuab haru ennustuspuhvri aktiivsemat puhastamist. Kernelile täieliku kaitse lisamine suurendab eeldatavasti üldkulusid 209%.

Allikas: opennet.ru

Lisa kommentaar