SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Kaip žinote, anklave vykdomo kodo funkcionalumas yra labai ribotas. Jis negali atlikti sistemos skambučių. Jis negali atlikti įvesties / išvesties operacijų. Jis nežino pagrindinio programos kodo segmento adreso. Jis negali jmp arba skambinti prieglobos programos kodu. Ji neturi supratimo apie adresų erdvės struktūrą, kuri valdo pagrindinę programą (pavyzdžiui, kurie puslapiai yra susieti arba kokie duomenys yra tuose puslapiuose). Ji negali prašyti operacinės sistemos susieti su ja pagrindinės programos atminties dalį (pvz., per /proc/pid/maps). Naivūs bandymai aklai perskaityti savavališką pagrindinės programos atminties sritį, jau nekalbant apie bandymus rašyti, anksčiau ar vėliau (greičiausiai pirmasis) prives prie priverstinio anklavo programos nutraukimo. Taip nutinka kiekvieną kartą, kai virtualios adresų erdvės regionas, kurio reikalauja anklavas, yra nepasiekiamas pagrindinei programai.

Atsižvelgiant į tokią atšiaurią realybę, ar virusų kūrėjas galės naudoti SGX anklavus, kad pasiektų savo kenkėjiškus tikslus?

– Nulaužkite adresus, kad pamatytumėte, ar juos galima perskaityti
– Nulaužkite, kad patikrintumėte adresus, kad būtų galima įrašyti
– Nulaužti valdymo srautą nukreipti
– Ką piktadariui duoda trys aukščiau išvardinti įsilaužimai?
– Kaip piktadarys naudoja šiuos įsilaužimus kurdamas ranzowari

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Remiantis visa tai, kas išdėstyta pirmiau, visuotinai pripažįstama, kad anklavas gali aptarnauti tik pagrindinę programą ir kad anklavas negali įgyvendinti savo iniciatyvos, įskaitant kenkėjiškas. Tai reiškia, kad anklavai neturi jokios praktinės vertės virusų kūrėjams. Ši skubota prielaida yra viena iš priežasčių, kodėl SGX apsauga yra asimetrinė: pagrindinės programos kodas negali pasiekti anklavo atminties, o anklavo kodas gali nuskaityti ir įrašyti bet kurį pagrindinio kompiuterio atminties adresą.

Todėl, jei kenkėjiškas anklavo kodas galėjo atlikti savavališkus sistemos iškvietimus pagrindinės programos vardu, vykdyti savavališką kodą jos vardu, nuskaityti pagrindinės programos atmintį ir rasti joje piktnaudžiavimo ROP grandines, jis gali perimti visą pagrindinio kompiuterio programos kontrolę. nematomumo režimas. Jis gali ne tik pavogti ir užšifruoti vartotojo failus, bet ir veikti vartotojo vardu. Pavyzdžiui, siųskite sukčiavimo el. laiškus jo vardu arba vykdykite DoS atakas. Nebijodami net moderniausių apsauginių mechanizmų, tokių kaip kanarėlių sukrovimas ir adresų dezinfekavimas.

Parodysime keletą įsilaužimų, kuriuos užpuolikai naudoja, kad įveiktų aukščiau aprašytus apribojimus, kad pasinaudotų SGX savo kenkėjiškais tikslais: ROP atakos. Arba vykdyti savavališką kodą, užmaskuotą kaip pagrindinės programos procesas (panašiai į proceso tuščiavidurį, kurį dažnai naudoja kenkėjiškos programos), arba užmaskuoti paruoštą kenkėjišką programą (saugoti jos kenkėjišką programą nuo antivirusinių ir kitų gynybos mechanizmų persekiojimo).

Nulaužkite adresus, kad pamatytumėte, ar juos galima perskaityti

Kadangi anklavas nežino, kurie virtualiosios adresų erdvės diapazonai yra prieinami pagrindinei programai, ir kadangi anklavas yra priverstas nutraukti veiklą, kai bando nuskaityti nepasiekiamą adresą, užpuolikas susiduria su užduotimi rasti būdą, kaip sugadinti. tolerantiškai nuskaityti adresų erdvę. Raskite būdą, kaip susieti galimus virtualius adresus. Šią problemą piktadarys išsprendžia netinkamai naudodamas „Intel“ TSX technologiją. Naudoja vieną iš TSX šalutinių poveikių: jei prieigos prie atminties funkcija yra įtraukta į TSX operaciją, tada išimtys, atsirandančios dėl prieigos prie netinkamų adresų, yra slopinamos TSX nepasiekiant operacinės sistemos. Jei bandoma pasiekti neteisingą atminties adresą, nutraukiama tik dabartinė operacija, o ne visa anklavo programa. Tai. TSX leidžia anklavui saugiai pasiekti bet kurį adresą iš sandorio – nerizikuojant žlugti.

jei nurodytas adresas yra pagrindinio kompiuterio programa, TSX operacija dažniausiai būna sėkminga. Retais atvejais jis gali sugesti dėl išorinių poveikių, pvz., pertraukimų (pvz., planavimo priemonės pertraukimų), talpyklos išstūmimo arba vienu metu keliais procesais keičiamo atminties vietos. Šiais retais atvejais TSX grąžina klaidos kodą, nurodantį, kad gedimas laikinas. Tokiais atvejais jums tereikia iš naujo pradėti operaciją.

jei nurodytas adresas nepasiekiamas TSX nuslopina įvykusią išimtį (OS nepranešama) ir nutraukia operaciją. Klaidos kodas grąžinamas į anklavo kodą, kad jis galėtų reaguoti į faktą, kad operacija buvo atšaukta. Šie klaidų kodai rodo, kad aptariamas adresas nepasiekiamas pagrindinei programai.

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Šis manipuliavimas TSX iš anklavo vidaus turi malonią savybę piktadariui: kadangi dauguma aparatūros našumo skaitiklių nėra atnaujinami tuo metu, kai vykdomas anklavo kodas, neįmanoma sekti TSX operacijų, vykdomų anklavo viduje. Taigi, kenksmingos manipuliacijos TSX operacinei sistemai lieka visiškai nematomos.

Be to, kadangi aukščiau pateiktas įsilaužimas nepasikliauja jokiais sistemos skambučiais, jo negalima nei aptikti, nei užkirsti kelią tiesiog blokuojant sistemos skambučius; kuris dažniausiai duoda teigiamą rezultatą kovojant su kiaušinių medžiokle.

Nedorėlis naudoja aukščiau aprašytą įsilaužimą, kad pagrindinio kompiuterio programos kode ieškotų įtaisų, tinkamų ROP grandinei formuoti. Tuo pačiu metu jam nereikia tirti kiekvieno adreso. Pakanka patikrinti vieną adresą iš kiekvieno virtualios adresų erdvės puslapio. Visų 16 gigabaitų atminties patikrinimas užtrunka apie 45 minutes („Intel i7-6700K“). Dėl to piktadarys gauna sąrašą vykdomųjų puslapių, tinkamų konstruoti ROP grandinę.

Nulaužimas, skirtas adresų rašymui patikrinti

Kad galėtų vykdyti ROP atakos anklavinę versiją, užpuolikas turi turėti galimybę ieškoti įrašomų nenaudojamų pagrindinės programos atminties sričių. Užpuolikas naudoja šias atminties vietas, kad įterptų netikrą kamino rėmelį ir naudingąjį apkrovą (shellcode). Esmė ta, kad kenkėjiškas anklavas negali reikalauti, kad pagrindinė programa skirtų sau atmintį, bet gali netinkamai naudoti pagrindinio kompiuterio jau paskirtą atmintį. Jei, žinoma, jam pavyks surasti tokias sritis nesugriuvus anklavo.

Šią paiešką piktadarys atlieka išnaudodamas kitą šalutinį TSX poveikį. Pirmiausia, kaip ir ankstesniu atveju, jis patikrina adresą, ar jis egzistuoja, o tada patikrina, ar šį adresą atitinkantis puslapis yra rašomas. Norėdami tai padaryti, piktadarys naudoja tokį įsilaužimą: jis įdeda rašymo funkciją į TSX operaciją, o jai pasibaigus, bet dar nebaigus, jis priverstinai nutraukia operaciją (aiškus nutraukimas).

Žvelgdamas į grąžinimo kodą iš TSX operacijos, užpuolikas supranta, ar jį galima įrašyti. Jei tai yra „aiškus abortas“, piktadarys supranta, kad įrašas būtų buvęs sėkmingas, jei jis būtų jį pratęsęs. Jei puslapis yra tik skaitomas, tada operacija baigiasi kita klaida nei „aiškus nutraukimas“.

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Šis manipuliavimas TSX turi dar vieną malonią piktadariui savybę (be to, kad neįmanoma sekti per aparatūros našumo skaitiklius): kadangi visos atminties įrašymo komandos yra vykdomos tik tada, kai operacija yra sėkminga, privertus užbaigti operaciją užtikrinama, kad patikrinta atminties ląstelė. lieka nepakitęs.

Nulaužti valdymo srautą nukreipti

Atliekant ROP ataką iš anklavo – skirtingai nuo tradicinių ROP atakų – užpuolikas gali valdyti RIP registrą neišnaudodamas jokių užpultos programos klaidų (buferio perpildymo ar panašiai). Užpuolikas gali tiesiogiai perrašyti krūvoje saugomo RIP registro reikšmę. Visų pirma, jis gali pakeisti šio registro vertę savo ROP grandine.

Tačiau jei ROP grandinė yra ilga, perrašant didelę pagrindinės programos krūvos dalį gali būti sugadinti duomenys ir netikėta programos veikla. Slapta savo išpuolį įvykdyti siekiantis piktadarys tokia padėtis nėra patenkintas. Todėl jis sukuria sau netikrą laikiną kamino rėmą ir jame saugo savo ROP grandinę. Netikras krūvos rėmelis patalpinamas į atsitiktinę įrašymo atminties vietą, o tikroji krūva lieka nepažeista.

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Ką piktadarys duoda trys aukščiau išvardyti įsilaužimai?

(1) Pirma, kenkėjiškas anklavas nulaužti adresus, kad pamatytumėte, ar juos galima perskaityti, – pagrindinėje programoje ieško piktnaudžiavimo ROP programėlių.

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

(2) Tada iki įsilaužimas, skirtas adresų rašymui patikrinti, – kenkėjiškas anklavas nustato sritis pagrindinės programos atmintyje, kurios yra tinkamos įterpti naudingąjį apkrovą.

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

(3) Tada anklavas sukuria ROP grandinę iš programėlių, aptiktų 1 veiksme, ir įterpia šią grandinę į pagrindinio kompiuterio programų krūvą.

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

(4) Galiausiai, kai pagrindinė programa susiduria su ROP grandine, sukurta ankstesniame žingsnyje, kenkėjiška naudingoji apkrova pradeda veikti su pagrindinės programos privilegijomis ir galimybe skambinti.

Kaip piktadarys naudoja šiuos įsilaužimus, kad sukurtų ranzowari

Po to, kai pagrindinė programa perduoda valdymą anklavui per vieną iš ECALL (neįtardama, kad šis anklavas yra kenkėjiškas), kenkėjiškas anklavas ieško laisvos vietos pagrindinio kompiuterio atmintyje, kad galėtų įterpti kodą (laisvomis vietomis paimdamas tas langelių sekas kuri užpildyta nuliais). Tada per nulaužti adresus, kad pamatytumėte, ar juos galima perskaityti, – anklavas ieško vykdomųjų puslapių pagrindinėje programoje ir sugeneruoja ROP grandinę, kuri dabartiniame kataloge sukuria naują failą pavadinimu „RANSOM“ (tikros atakos metu anklavas užšifruoja esamus vartotojo failus) ir parodo išpirkos pranešimą. Tuo pačiu metu pagrindinė programa naiviai tiki, kad anklavas tiesiog prideda du skaičius. Kaip tai atrodo kode?

Kad būtų lengviau suvokti, per apibrėžimus pristatykime keletą mnemonikų:

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Išsaugome pradines RSP ir RBP registrų reikšmes, kad atlikus naudingą apkrovą būtų atkurtas normalus pagrindinės programos veikimas:

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Ieškome tinkamo kamino rėmelio (žr. kodą iš skilties „hack for redirecting control flow“).

Tinkamų ROP programėlių paieška:

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Raskite vietą, kur įleisti naudingąją apkrovą:

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Kuriame ROP grandinę:

SGX kenkėjiška programa: kaip piktadariai naudoja naują „Intel“ technologiją kitiems tikslams, nei jie buvo skirti

Taip piktadariai išnaudoja „Intel“ SGX technologiją, skirtą kovoti su kenkėjiškomis programomis, siekdami priešingų tikslų.

Šaltinis: www.habr.com

Добавить комментарий