Intel Corporation mikrokoodi värskendus, mis kõrvaldab (CVE-2019-14607), manipuleerimise kaudu CPU dünaamilise pinge ja sageduse juhtimise mehhanismiga algatada andmealaga rakkude sisu kahjustamist, sealhulgas piirkondades, mida kasutatakse Intel SGX isoleeritud anklavites arvutamisel. Rünnakut nimetatakse Plundervolt'iks ning see võimaldab potentsiaalselt kohalikul kasutajal saada süsteemis kõrgemaid õigusi, põhjustada teenusekatkestusi ja pääseda ligi lukustatud andmetele.
Rünnak kujutab ohtu ainult SGX anklavites toimuva arvutamise manipuleerimise kontekstis, kuna selleks on vajalik root-õiguste olemasolu süsteemis. Lihtsaimal juhul võib ründaja saavutada väärinfo sisestamise, mis töödeldakse anklaavis, kuid keerukamate stsenaariumite korral ei välistata võimalust rekonstrueerida anklavis talletatud sulgemisvõtmeid, mida kasutatakse RSA-CRT ja AES-NI krüpteerimise algoritmide abil. Tehnikat saab kasutada ka algselt korrektsete algoritmide vigade genereerimiseks, et põhjustada mäluga seotud haavatavuste tekkimist, näiteks et korraldada juurdepääs mälu piire ületavale alale.
Rünnaku kodeerimise prototüüp GitHubis
Meetodi olemus seisneb asjaolu loomises, et ilmnevad ettenägematud andmete moonutused SGX arvutuste käigus, mille eest ei kaitse mälu krüpteerimise ja autentimise rakendamine anklavis. Moonutuste tekitamiseks on võimalik kasutada tavalisi liideseid, mis kontrollivad sagedust ja pinget, mida tavaliselt rakendatakse süsteemi energiatarbimise vähendamiseks ooterežiimis ja maksimaalse jõudluse aktiveerimiseks intensiivsete tööde ajal. Sageduse ja pinge omadused katab kogu kiibi, sealhulgas mõjutavad arvutuste tegemist isoleeritud anklavis.
Pinge muutmisega saab luua tingimusi, kus koormus ei ole piisav CPU sees oleva mäluraku taastamiseks, mis muudab selle väärtust. Peamine erinevus rünnakust on RowHammer võimaldab muuta DRAMi mälu individuaalsete bittide sisu, lugedes andmeid naaberlahtritest tsükliliselt, samas kui Plundervolt võimaldab bitsi muutmist CPU sees, kui andmed on juba mälust loetud arvutuste teostamiseks. Selline omadus võimaldab ringi hiilida SGX-i rakendatud andmete terviklikkuse ja krüpteerimise kontrollmehhanismidest, kuna mälus olevad väärtused jäävad õigeks, kuid võivad operatsioonide käigus olla moonutatud enne, kui tulemus salvestatakse mällu.
Kui seda muudetud väärtust kasutatakse korrutamise käigus krüpteerimise protsessis, siis tagatakse väljundina vale krüpteeritud tekst. Omades ligipääsu SGX-i töötlejale oma andmete krüpteerimiseks, saab ründaja, põhjustades tõrkeid, koguda statistikat väljundkrüpteeritud teksti muutuste kohta ja mõne minutiga taastada anklaavi salvestatud võtme väärtuse. Sisendtekst ja õige krüpteeritud tekst väljundis on teada, võtmega ei muudeta, ja vale krüpteeritud teksti väljund näitab, et mingi bitt on moonutatud vastupidiseks väärtuseks.
Analüüsides erinevate tõrkede ajal kogutud korrektsete ja moonutatud krüpteeritud tekstide väärtuste paare, on võimalik kasutada tõrgete differentiaalanalüüsi (DFA) meetodeid, ) et tõenäolisi võtmeid, mida kasutatakse AES-i sümmeetrilises krüpteerimises, ning seejärel, analüüsides võtmete ühisusi erinevates komplektides, tuvastada otsitav võtme.

Probleem on seotud erinevate Intel'i protsessorite mudelitega, sealhulgas 6. kuni 10. põlvkonna Intel Core CPU-dega, samuti 5. ja 6. põlvkonna Xeon E3, 1. ja 2. põlvkonna Intel Xeon Scalable, Xeon D,
Xeon W ja Xeon E.
Tuletame meelde, et SGX tehnoloogia (
Software Guard Extensions) появилась в процессорах Intel Core шестого поколения (Skylake) и juhiseid, mis võimaldavad rakenduste kasutajatasemel eraldada suletud mälualasid - enklaave, mille sisu ei saa lugeda ega muuta isegi kernel ja kood, mis töötab ring0, SMM ja VMM režiimides. Juhtimise edastamine koodi enklaavis pole võimalik traditsiooniliste hüpetefunktsioonide ja registrite ning stack'i manipuleerimise kaudu - juhtimise edastamiseks enklaavi kasutatakse spetsiaalselt loodud uut käsku, mis teostab õiguste kontrolli. Samal ajal saab enklaavis olev kood kasutada klassikalisi kutsumeetodeid funktsioonide kõnelemiseks ning spetsiaalset käsku, et kutsuda väliseid funktsioone. Riistvaraliste rünnakute, näiteks DRAM mooduliga ühenduse loomise kaitsmiseks kasutatakse enklaavi mälukodeerimist.
Allikas: opennet.ru
