SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

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?

- Uzlauzt adreses, lai noskaidrotu, vai tās var nolasīt
- Uzlauzt adreses, lai pārbaudītu rakstāmību
- Hack, lai novirzītu kontroles plūsmu
ā€“ Ko nelietim dod trÄ«s iepriekÅ” uzskaitÄ«tie uzlauzumi?
- Kā ļaundaris izmanto Ŕos uzlauzumus, lai izveidotu ranzowari

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

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.

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

Å 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ā€.

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

Å 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.

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

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.

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

(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.

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

(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ē.

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

(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:

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

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:

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

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:

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

Vietas atraŔana kravnesības ievadīŔanai:

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

Mēs veidojam ROP ķēdi:

SGX ļaunprātīga programmatūra: kā ļaundari izmanto jauno Intel tehnoloģiju citiem mērķiem, nevis tiem, kuriem tā bija paredzēta

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

Pievieno komentāru