KÄ zinÄms, anklÄvÄ izpildÄ«tÄ koda funkcionalitÄte ir nopietni ierobežota. Tas nevar veikt sistÄmas zvanus. Tas nevar veikt I/O darbÄ«bas. Tas nezina resursdatora lietojumprogrammas koda segmenta bÄzes adresi. Tas nevar JMP vai izsaukt resursdatora lietojumprogrammas kodu. Tai nav ne jausmas par adreÅ”u telpas struktÅ«ru, kas pÄrvalda resursdatora lietojumprogrammu (piemÄram, kuras lapas ir kartÄtas vai kÄda veida dati atrodas Å”ajÄs lapÄs). TÄ nevar lÅ«gt operÄtÄjsistÄmai kartÄt ar to resursdatora lietojumprogrammas atmiÅas daļu (piemÄram, izmantojot /proc/pid/maps). Naivi mÄÄ£inÄjumi akli nolasÄ«t patvaļīgu resursdatora lietojumprogrammas atmiÅas apgabalu, nemaz nerunÄjot par mÄÄ£inÄjumiem rakstÄ«t, agrÄk vai vÄlÄk (visticamÄk, pirmais) novedÄ«s pie anklÄva programmas piespiedu pÄrtraukÅ”anas. Tas notiek ikreiz, kad anklÄva pieprasÄ«tais virtuÄlÄs adreÅ”u telpas reÄ£ions nav pieejams resursdatora lietojumprogrammai.
Vai, Åemot vÄrÄ tik skarbo realitÄti, vÄ«rusu rakstÄ«tÄjs varÄs izmantot SGX anklÄvus, lai sasniegtu savus ļaunprÄtÄ«gos mÄrÄ·us?
Pamatojoties uz visu iepriekÅ” minÄto, ir vispÄratzÄ«ts, ka anklÄvs spÄj apkalpot tikai resursdatora lietojumprogrammu un ka anklÄvs nevar Ä«stenot savu iniciatÄ«vu, tostarp ļaunprÄtÄ«gas. Tas nozÄ«mÄ, ka vÄ«rusu rakstÄ«tÄjiem anklÄviem nav praktiskas vÄrtÄ«bas. Å is pÄrsteidzÄ«gais pieÅÄmums ir viens no iemesliem, kÄpÄc SGX aizsardzÄ«ba ir asimetriska: resursdatora lietojumprogrammas kods nevar piekļūt anklÄva atmiÅai, savukÄrt anklÄva kods var nolasÄ«t un rakstÄ«t uz jebkuru resursdatora lietojumprogrammas atmiÅas adresi.
TÄpÄc, ja ļaunprÄtÄ«gais anklÄva kods varÄja veikt patvaļīgus sistÄmas izsaukumus resursdatora lietojumprogrammas vÄrdÄ, izpildÄ«t patvaļīgu kodu tÄs vÄrdÄ, skenÄt resursdatora lietojumprogrammas atmiÅu un atrast tajÄ Ä¼aunprÄtÄ«gi izmantojamas ROP Ä·Ädes, tas varÄtu pilnÄ«bÄ pÄrÅemt resursdatora lietojumprogrammas kontroli. MaskÄÅ”anÄs režīms. Tas var ne tikai nozagt un Å”ifrÄt lietotÄja failus, bet arÄ« rÄ«koties lietotÄja vÄrdÄ. PiemÄram, sÅ«tÄ«t pikŔķerÄÅ”anas e-pasta ziÅojumus viÅa vÄrdÄ vai veikt DoS uzbrukumus. Nebaidoties no pat vismodernÄkajiem aizsargmehÄnismiem, piemÄram, sakrauj kanÄrijputnus un adreÅ”u sanitÄriju.
MÄs parÄdÄ«sim dažus uzlauÅ”anas veidus, ko uzbrucÄji izmanto, lai pÄrvarÄtu iepriekÅ” aprakstÄ«tos ierobežojumus, lai izmantotu SGX priekÅ”rocÄ«bas saviem ļaunprÄtÄ«giem mÄrÄ·iem: ROP uzbrukumi. Lai izpildÄ«tu patvaļīgu kodu, kas slÄpts kÄ resursdatora lietojumprogrammas process (lÄ«dzÄ«gi procesa dobumam, ko bieži izmanto ļaunprÄtÄ«ga programmatÅ«ra), vai slÄptu gatavu ļaunprÄtÄ«gu programmatÅ«ru (lai pasargÄtu tÄs ļaunprÄtÄ«go programmatÅ«ru no pretvÄ«rusu un citu aizsardzÄ«bas mehÄnismu vajÄÅ”anas).
Uzlauzt adreses, lai redzÄtu, vai tÄs var nolasÄ«t
TÄ kÄ anklÄvs nezina, kuri virtuÄlÄs adreÅ”u telpas diapazoni ir pieejami resursdatora lietojumprogrammai, un tÄ kÄ anklÄvs ir spiests pÄrtraukt darbÄ«bu, mÄÄ£inot nolasÄ«t nepieejamu adresi, uzbrucÄjs saskaras ar uzdevumu atrast veidu, kÄ novÄrst kļūdu. toleranti skenÄt adreÅ”u telpu. Atrodiet veidu, kÄ kartÄt pieejamÄs virtuÄlÄs adreses. Ä»aundaris Å”o problÄmu atrisina, nepareizi izmantojot Intel TSX tehnoloÄ£iju. Izmanto vienu no TSX blakusefektiem: ja atmiÅas piekļuves funkcija ir ievietota TSX darÄ«jumÄ, tad TSX nomÄc izÅÄmumus, kas rodas no piekļuves nederÄ«gÄm adresÄm, nesasniedzot operÄtÄjsistÄmu. Ja tiek mÄÄ£inÄts piekļūt nederÄ«gai atmiÅas adresei, tiek pÄrtraukta tikai paÅ”reizÄjÄ transakcija, nevis visa anklÄva programma. Tas. TSX ļauj anklÄvam droÅ”i piekļūt jebkurai adresei no darÄ«juma ā bez sabrukÅ”anas riska.
Ja norÄdÄ«tÄ adrese ir pieejama resursdatora lietojumprogramma, TSX darÄ«jums visbiežÄk ir veiksmÄ«gs. Retos gadÄ«jumos tas var neizdoties ÄrÄju ietekmju dÄļ, piemÄram, pÄrtraukumu (piemÄram, plÄnotÄja pÄrtraukumu), keÅ”atmiÅas izlikÅ”anas vai vairÄku procesu vienlaicÄ«gas atmiÅas vietas modificÄÅ”anas dÄļ. Å ajos retajos gadÄ«jumos TSX atgriež kļūdas kodu, kas norÄda, ka kļūme ir Ä«slaicÄ«ga. Å Ädos gadÄ«jumos jums vienkÄrÅ”i jÄatsÄk darÄ«jums.
Ja norÄdÄ«tÄ adrese nav pieejama resursdatora lietojumprogramma, TSX nomÄc notikuÅ”o izÅÄmumu (OS netiek paziÅots) un pÄrtrauc darÄ«jumu. AnklÄva kodam tiek atgriezts kļūdas kods, lai tas varÄtu reaÄ£Ät uz faktu, ka darÄ«jums ir atcelts. Å ie kļūdu kodi norÄda, ka attiecÄ«gÄ adrese nav pieejama resursdatora lietojumprogrammai.
Å ai TSX manipulÄcijai no anklÄva iekÅ”puses ir jauka Ä«paŔība nelietim: tÄ kÄ lielÄkÄ daļa aparatÅ«ras veiktspÄjas skaitÄ«tÄju netiek atjauninÄti anklÄva koda izpildes laikÄ, nav iespÄjams izsekot anklÄvÄ veiktajÄm TSX transakcijÄm. TÄdÄjÄdi ļaunprÄtÄ«gas manipulÄcijas ar TSX operÄtÄjsistÄmai paliek pilnÄ«gi neredzamas.
TurklÄt, tÄ kÄ iepriekÅ”minÄtÄ uzlauÅ”ana nav atkarÄ«ga no sistÄmas izsaukumiem, to nevar ne atklÄt, ne novÄrst, vienkÄrÅ”i bloÄ·Äjot sistÄmas zvanus; kas parasti dod pozitÄ«vu rezultÄtu cÄ«ÅÄ pret olu medÄ«bÄm.
Ä»aundaris izmanto iepriekÅ” aprakstÄ«to uzlauÅ”anu, lai resursdatora lietojumprogrammas kodÄ meklÄtu sÄ«krÄ«kus, kas piemÄroti ROP Ä·Ädes veidoÅ”anai. TajÄ paÅ”Ä laikÄ viÅam nav jÄpÄrbauda katra adrese. Pietiek ar vienu adresi no katras virtuÄlÄs adreÅ”u telpas lapas. Visu 16 gigabaitu atmiÅas pÄrbaude aizÅem apmÄram 45 minÅ«tes (Intel i7-6700K). RezultÄtÄ nelietis saÅem sarakstu ar izpildÄmÄm lapÄm, kas ir piemÄrotas ROP Ä·Ädes konstruÄÅ”anai.
Uzlauzt adreses rakstÄmÄ«bas pÄrbaudei
Lai veiktu ROP uzbrukuma anklÄva versiju, uzbrucÄjam jÄspÄj meklÄt resursdatora lietojumprogrammas ierakstÄmos neizmantotos atmiÅas apgabalus. UzbrucÄjs izmanto Ŕīs atmiÅas vietas, lai ievadÄ«tu viltus steka rÄmi un lietderÄ«go slodzi (Äaulas kodu). RezultÄts ir tÄds, ka ļaunprÄtÄ«gs anklÄvs nevar pieprasÄ«t resursdatora lietojumprogrammai pieŔķirt sev atmiÅu, bet tÄ vietÄ var ļaunprÄtÄ«gi izmantot resursdatora lietojumprogrammas jau pieŔķirto atmiÅu. Ja, protams, viÅam izdosies atrast Å”Ädas zonas, nesabrÅ«kot anklÄvai.
Ä»aundaris veic Å”o meklÄÅ”anu, izmantojot citu TSX blakusefektu. Vispirms, tÄpat kÄ iepriekÅ”ÄjÄ gadÄ«jumÄ, tas pÄrbauda adreses esamÄ«bu un pÄc tam pÄrbauda, āāvai Å”ai adresei atbilstoÅ”Ä lapa ir rakstÄma. Lai to izdarÄ«tu, ļaundaris izmanto Å”Ädu uzlauÅ”anu: viÅÅ” ievieto rakstÄ«Å”anas funkciju TSX darÄ«jumÄ un pÄc tam, kad tas ir pabeigts, bet pirms tÄ pabeigÅ”anas, viÅÅ” piespiedu kÄrtÄ pÄrtrauc darÄ«jumu (explicit abort).
AplÅ«kojot atgrieÅ”anas kodu no TSX darÄ«juma, uzbrucÄjs saprot, vai tas ir ierakstÄms. Ja tas ir "skaidrs aborts", ļaundaris saprot, ka ieraksts bÅ«tu bijis veiksmÄ«gs, ja viÅÅ” bÅ«tu tam sekojis. Ja lapa ir tikai lasÄma, darÄ«jums beidzas ar kļūdu, kas nav āskaidra pÄrtraukÅ”anaā.
Å ai manipulÄcijai ar TSX ir vÄl viena nelietim patÄ«kama funkcija (papildus neiespÄjamÄ«bai izsekot, izmantojot aparatÅ«ras veiktspÄjas skaitÄ«tÄjus): tÄ kÄ visas atmiÅas ierakstÄ«Å”anas komandas tiek izpildÄ«tas tikai tad, ja darÄ«jums ir veiksmÄ«gs, piespiežot darÄ«jumu pabeigt, tiek nodroÅ”inÄts, ka pÄrbaudÄ«tÄ atmiÅas Ŕūna. paliek nemainÄ«gs.
Hack, lai novirzītu kontroles plūsmu
Veicot ROP uzbrukumu no anklÄva ā atŔķirÄ«bÄ no tradicionÄlajiem ROP uzbrukumiem ā uzbrucÄjs var iegÅ«t kontroli pÄr RIP reÄ£istru, neizmantojot nekÄdas kļūdas uzbruktajÄ programmÄ (bufera pÄrpilde vai tamlÄ«dzÄ«gi). UzbrucÄjs var tieÅ”i pÄrrakstÄ«t stekÄ saglabÄtÄ RIP reÄ£istra vÄrtÄ«bu. Jo Ä«paÅ”i tÄ var aizstÄt Ŕī reÄ£istra vÄrtÄ«bu ar savu ROP Ä·Ädi.
TomÄr, ja ROP Ä·Äde ir gara, lielas resursdatora lietojumprogrammas steka daļas pÄrrakstÄ«Å”ana var izraisÄ«t datu bojÄjumus un neparedzÄtu programmas darbÄ«bu. Ä»aundaris, kurÅ” savu uzbrukumu cenÅ”as Ä«stenot slÄpti, nav apmierinÄts ar Å”o lietu stÄvokli. TÄpÄc tas izveido sev viltotu pagaidu steku rÄmi un tajÄ glabÄ savu ROP Ä·Ädi. Viltus steka rÄmis tiek ievietots nejauÅ”Ä ierakstÄmÄ atmiÅas vietÄ, atstÄjot Ä«sto steku neskartu.
Ko nelietim dod trīs iepriekŔ uzskaitītie uzlauzumi?
(1) PirmkÄrt, ļaunprÄtÄ«gais anklÄvs cauri uzlauzt adreses, lai redzÄtu, vai tÄs var nolasÄ«t, ā meklÄ resursdatora lietojumprogrammÄ Ä¼aunprÄtÄ«gus ROP sÄ«krÄ«kus.
(2) PÄc tam lÄ«dz uzlauzt, lai pÄrbaudÄ«tu adreses rakstÄmÄ«bai, ā ļaunprÄtÄ«gs anklÄvs identificÄ apgabalus resursdatora lietojumprogrammas atmiÅÄ, kas ir piemÄroti lietderÄ«gÄs slodzes ievadÄ«Å”anai.
(3) PÄc tam anklÄvs izveido ROP Ä·Ädi no 1. darbÄ«bÄ atklÄtajiem sÄ«krÄ«kiem un ievada Å”o Ä·Ädi resursdatora lietojumprogrammu kaudzÄ.
(4) Visbeidzot, kad resursdatora lietojumprogramma saskaras ar ROP Ä·Ädi, kas izveidota iepriekÅ”ÄjÄ darbÄ«bÄ, tiek sÄkta ļaunprÄtÄ«gÄs slodzes izpilde ā ar resursdatora lietojumprogrammas privilÄÄ£ijÄm un iespÄju veikt sistÄmas zvanus.
KÄ nelietis izmanto Å”os uzlauzumus, lai izveidotu ranzowari
PÄc tam, kad resursdatora lietojumprogramma nodod vadÄ«bu anklÄvam, izmantojot vienu no ECALL (neaizdzinoties, ka Å”is anklÄvs ir ļaunprÄtÄ«gs), ļaunprÄtÄ«gais anklÄvs meklÄ brÄ«vu vietu resursdatora lietojumprogrammas atmiÅÄ koda ievadÄ«Å”anai (kÄ brÄ«vas vietas Åemot Ŕīs Ŕūnu secÄ«bas kas piepildÄ«ts ar nullÄm). Tad cauri uzlauzt adreses, lai redzÄtu, vai tÄs var nolasÄ«t, ā anklÄvs meklÄ izpildÄmÄs lapas resursdatora lietojumprogrammÄ un Ä£enerÄ ROP Ä·Ädi, kas izveido jaunu failu ar nosaukumu āRANSOMā paÅ”reizÄjÄ direktorijÄ (reÄlÄ uzbrukumÄ anklÄvs Å”ifrÄ esoÅ”os lietotÄja failus) un parÄda izpirkuma ziÅojumu. TajÄ paÅ”Ä laikÄ resursdatora lietojumprogramma naivi uzskata, ka anklÄvs vienkÄrÅ”i pievieno divus skaitļus. KÄ tas izskatÄs kodÄ?
Lai atvieglotu uztveri, ieviesīsim dažas mnemonikas, izmantojot definīcijas:
MÄs saglabÄjam RSP un RBP reÄ£istru sÄkotnÄjÄs vÄrtÄ«bas, lai pÄc slodzes izpildes atjaunotu normÄlu resursdatora lietojumprogrammas darbÄ«bu:
MeklÄjam piemÄrotu steka rÄmi (skat. kodu no sadaļas āHack for redirecting control flowā).
PiemÄrotu ROP sÄ«krÄ«ku atraÅ”ana:
Vietas atraŔana kravnesības ievadīŔanai:
MÄs veidojam ROP Ä·Ädi:
TÄdÄ veidÄ Ä¼aundari izmanto Intel SGX tehnoloÄ£iju, kas izstrÄdÄta, lai cÄ«nÄ«tos pret ļaunprÄtÄ«gÄm programmÄm, lai sasniegtu pretÄjus mÄrÄ·us.
Avots: www.habr.com