SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Kuten tiedät, enklaavissa suoritettavan koodin toiminnallisuus on vakavasti rajoitettu. Se ei voi soittaa järjestelmäpuheluita. Se ei voi suorittaa I/O-toimintoja. Se ei tiedä isäntäsovelluksen koodisegmentin perusosoitetta. Se ei voi JMP:tä tai kutsua isäntäsovelluksen koodia. Sillä ei ole aavistustakaan isäntäsovellusta hallitsevasta osoiteavaruuden rakenteesta (esimerkiksi mitkä sivut on kartoitettu tai millaista dataa niillä on). Se ei voi pyytää käyttöjärjestelmää yhdistämään osaa isäntäsovelluksen muistista siihen (esimerkiksi /proc/pid/maps-tiedoston kautta). Naiivit yritykset lukea sokeasti isäntäsovelluksen mielivaltainen muistialue, kirjoittamisyrityksistä puhumattakaan, johtavat ennemmin tai myöhemmin (todennäköisimmin entinen) enklaaviohjelman pakotettuun lopettamiseen. Tämä tapahtuu aina, kun enklaaven pyytämä virtuaalinen osoiteavaruusalue ei ole isäntäsovelluksen käytettävissä.

Voiko virusten kirjoittaja käyttää SGX-enklaaveja näin ankarissa todellisuuksissa haitallisten tavoitteidensa saavuttamiseen?

– Hakkeroi osoitteiden tutkimiseen, jotta näet, voidaanko ne lukea
– Hakkeroi osoitteiden kirjoitettavuuden tutkimiseksi
– Hakkerointi ohjaamaan ohjausvirtaa uudelleen
– Mitä edellä mainitut kolme hakkeria antavat konnalle?
– Kuinka konna käyttää näitä hakkereita ranzomwarin luomiseen

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Kaiken edellä mainitun perusteella on yleisesti hyväksyttyä, että erillisalue pystyy palvelemaan vain isäntäsovellusta ja että erillisalue ei voi tehdä oma-aloitteisuuttaan, ei myöskään haitallisia. Tämä tarkoittaa, että erillisalueilla ei ole käytännön arvoa virusten kirjoittajille. Tämä hätäinen oletus on yksi syy siihen, miksi SGX-suojaus on epäsymmetrinen: isäntäsovelluskoodi ei pääse käsiksi erillisaluemuistiin, kun taas erillisaluekoodi voi lukea ja kirjoittaa mihin tahansa isäntäsovelluksen muistiosoitteeseen.

Siksi, jos haitallinen erilliskoodi pystyi tekemään mielivaltaisia ​​järjestelmäkutsuja isäntäsovelluksen puolesta, suorittamaan mielivaltaisen koodin sen puolesta, skannaamaan isäntäsovelluksen muistia ja löytämään siitä väärinkäyttöön soveltuvia ROP-ketjuja, se voisi ottaa isäntäsovelluksen täydellisen hallintaansa. varkain tila. Se ei voi vain varastaa ja salata käyttäjätiedostoja, vaan myös toimia käyttäjän puolesta. Esimerkiksi lähettää tietojenkalasteluviestejä hänen puolestaan ​​tai suorittaa DoS-hyökkäyksiä. Pelkäämättä edes nykyaikaisimpia suojamekanismeja, kuten pinoa kanarialintuja ja osoitteen desinfiointia.

Näytämme sinulle muutamia hakkereita, joita hyökkääjät käyttävät ylittääkseen yllä kuvatut rajoitukset hyödyntääkseen SGX:ää omiin haitallisiin tarkoituksiinsa: ROP-hyökkäykset. Joko suorittaa mielivaltaista koodia, joka on naamioitu isäntäsovellusprosessiksi (samanlainen kuin prosessin tyhjennys, jota haittaohjelmat usein käyttävät), tai naamioida valmiin haittaohjelman (suojatakseen sen haittaohjelmat virustentorjunta- ja muut puolustusmekanismien vainolta).

Hakkeroida osoitteita nähdäksesi, voidaanko ne lukea

Koska erillisalue ei tiedä, mitkä virtuaalisen osoiteavaruuden alueet ovat isäntäsovelluksen käytettävissä, ja koska erillisalue pakotetaan lopettamaan yritettäessä lukea osoitetta, johon ei ole pääsyä, hyökkääjän tehtävänä on löytää tapa vikaantumiselle. skannata osoiteavaruus suvaitsevasti. Etsi tapa kartoittaa käytettävissä olevat virtuaaliosoitteet. Konna ratkaisee tämän ongelman käyttämällä väärin Intelin TSX-tekniikkaa. Käyttää yhtä TSX:n sivuvaikutuksista: jos muistin käyttötoiminto sijoitetaan TSX-tapahtumaan, TSX estää virheellisten osoitteiden käytön aiheuttamat poikkeukset saavuttamatta käyttöjärjestelmää. Jos yritetään käyttää virheellistä muistiosoitetta, vain nykyinen tapahtuma keskeytetään, ei koko enklaaviohjelmaa. Että. TSX mahdollistaa erillisalueen pääsevän turvallisesti mihin tahansa osoitteeseen tapahtuman sisällä - ilman romahtamisen vaaraa.

Jos määritetty osoite on käytettävissä isäntäsovellus, TSX-tapahtuma on useimmiten onnistunut. Harvinaisissa tapauksissa se voi epäonnistua ulkoisten vaikutusten, kuten keskeytysten (kuten ajoittimen keskeytysten), välimuistin häätöjen tai useiden prosessien suorittaman muistipaikan samanaikaisen muuttamisen vuoksi. Näissä harvoissa tapauksissa TSX palauttaa virhekoodin, joka osoittaa, että vika on väliaikainen. Näissä tapauksissa sinun tarvitsee vain käynnistää tapahtuma uudelleen.

Jos määritetty osoite ei ole käytettävissä isäntäsovellus, TSX estää tapahtuneen poikkeuksen (käyttöjärjestelmälle ei ilmoiteta) ja keskeyttää tapahtuman. Enklaavikoodiin palautetaan virhekoodi, jotta se voi reagoida tapahtuman peruuntumiseen. Nämä virhekoodit osoittavat, että kyseinen osoite ei ole isäntäsovelluksen käytettävissä.

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Tällä TSX:n manipuloinnilla erillisalueen sisältä on hyvä ominaisuus konnalle: koska useimpia laitteiston suorituskyvyn laskureita ei päivitetä erillisalueen koodin suorittamisen yhteydessä, on mahdotonta seurata erillisalueen sisällä suoritettuja TSX-tapahtumia. Siten TSX:n haitallinen manipulointi jää käyttöjärjestelmälle täysin näkymätön.

Lisäksi, koska yllä oleva hakkerointi ei perustu mihinkään järjestelmäkutsuihin, sitä ei voida havaita eikä estää yksinkertaisesti estämällä järjestelmäkutsut. joka yleensä antaa positiivisen tuloksen taistelussa munametsästystä vastaan.

Pahis käyttää yllä kuvattua hakkerointia etsiäkseen isäntäsovelluksen koodista ROP-ketjun muodostamiseen sopivia gadgeteja. Samaan aikaan hänen ei tarvitse tutkia jokaista osoitetta. Riittää, kun tutkitaan yksi osoite virtuaalisen osoiteavaruuden jokaiselta sivulta. Kaikkien 16 gigatavun muistin tutkiminen kestää noin 45 minuuttia (Intel i7-6700K:ssa). Tämän seurauksena konna saa listan suoritettavista sivuista, jotka soveltuvat ROP-ketjun rakentamiseen.

Hakkerointi osoitteiden kirjoitettavuuden tutkimiseen

ROP-hyökkäyksen erillisversion suorittamiseksi hyökkääjän on kyettävä etsimään isäntäsovelluksen kirjoitettavat käyttämättömät muistialueet. Hyökkääjä käyttää näitä muistipaikkoja valepinon kehyksen ja hyötykuorman (shellcode) syöttämiseen. Lopputulos on, että haitallinen erillisalue ei voi vaatia isäntäsovellusta varaamaan muistia itselleen, vaan se voi käyttää väärin isäntäsovelluksen jo varaamaa muistia. Jos hän tietysti onnistuu löytämään tällaisia ​​alueita kaatamatta erillisaluetta.

Roisto suorittaa tämän haun hyödyntämällä TSX:n toista sivuvaikutusta. Ensin, kuten edellisessä tapauksessa, se tutkii osoitteen olemassaolon ja tarkistaa sitten, onko tätä osoitetta vastaava sivu kirjoitettava. Tätä varten konna käyttää seuraavaa hakkerointia: hän asettaa kirjoitustoiminnon TSX-tapahtumaan ja sen valmistuttua, mutta ennen kuin se on valmis, hän keskeyttää tapahtuman väkisin (explicit abort).

Katsomalla TSX-tapahtuman palautuskoodia hyökkääjä ymmärtää, onko se kirjoitettava. Jos kyseessä on "selkeä abortti", konna ymmärtää, että äänitys olisi onnistunut, jos hän olisi tehnyt sen. Jos sivu on vain luku -tilassa, tapahtuma päättyy muuhun virheeseen kuin "explicit abort".

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Tällä TSX:n manipuloinnilla on toinen ominaisuus, joka on hyvä konnalle (paitsi se, että laitteiston suorituskyvyn laskureiden avulla on mahdotonta seurata): koska kaikki muistin kirjoituskomennot sitoutuvat vain, jos tapahtuma onnistuu, tapahtuman pakottaminen loppuun varmistamaan, että tutkittu muistisolu pysyy muuttumattomana.

Hakkerointi ohjauksen ohjaamiseksi uudelleen

Suorittaessaan ROP-hyökkäystä erillisalueelta - toisin kuin perinteiset ROP-hyökkäykset - hyökkääjä voi saada RIP-rekisterin hallintaansa käyttämättä hyökkäyksissä olevan ohjelman vikoja (puskurin ylivuoto tai jotain vastaavaa). Hyökkääjä voi suoraan korvata pinoon tallennetun RIP-rekisterin arvon. Erityisesti se voi korvata tämän rekisterin arvon omalla ROP-ketjullaan.

Jos ROP-ketju on kuitenkin pitkä, isäntäsovelluksen pinon suuren osan päällekirjoittaminen voi johtaa tietojen vioittumiseen ja odottamattomaan ohjelman toimintaan. Pahis, joka yrittää toteuttaa hyökkäyksensä salaisesti, ei ole tyytyväinen tähän tilanteeseen. Siksi se luo itselleen väärennetyn väliaikaisen pinokehyksen ja tallentaa siihen ROP-ketjunsa. Väärennetty pinokehys sijoitetaan satunnaiseen kirjoitettavaan muistipaikkaan, jolloin todellinen pino jää ennalleen.

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Mitä kolme yllä lueteltua hakkeria antavat konnalle?

(1) Ensinnäkin haitallinen erillisalue läpi hakkeroida osoitteita nähdäkseen, voidaanko ne lukea, – etsii isäntäsovelluksesta väärinkäyttöisiä ROP-gadgeteja.

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

(2) Sitten mennessä hakkerointi osoitteiden kirjoitettavuuden tutkimiseen, – haitallinen erillisalue tunnistaa isäntäsovelluksen muistista alueet, jotka soveltuvat hyötykuorman lisäämiseen.

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

(3) Seuraavaksi erillisalue luo ROP-ketjun vaiheessa (1) löydetyistä laitteista ja lisää tämän ketjun isäntäsovelluspinoon.

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

(4) Lopuksi, kun isäntäsovellus kohtaa edellisessä vaiheessa luodun ROP-ketjun, haitallinen hyötykuorma alkaa suorittaa - isäntäsovelluksen oikeuksilla ja kyvyllä tehdä järjestelmäkutsuja.

Kuinka konna käyttää näitä hakkereita luodakseen ranzowaria

Kun isäntäsovellus on siirtänyt hallinnan erillisalueelle yhden ECALLin kautta (epäilemättä, että tämä erillisalue on haitallinen), haitallinen erillisalue etsii vapaata tilaa isäntäsovelluksen muistista koodin lisäämistä varten (ottaen vapaiksi tiloiksi nuo solusarjat joka on täynnä nollia). Sitten läpi hakkeroida osoitteita nähdäkseen, voidaanko ne lukea, – erillisalue etsii suoritettavia sivuja isäntäsovelluksessa ja luo ROP-ketjun, joka luo uuden tiedoston nimeltä "RANSOM" nykyiseen hakemistoon (todellisessa hyökkäyksessä erillisalue salaa olemassa olevat käyttäjätiedostot) ja näyttää lunnausviestin. Samaan aikaan isäntäsovellus uskoo naiivisti, että erillisalue yksinkertaisesti lisää kaksi numeroa. Miltä tämä näyttää koodissa?

Havainnoinnin helpottamiseksi esitellään joitakin muistomerkkejä määritelmien kautta:

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Tallennamme RSP- ja RBP-rekisterien alkuperäiset arvot palauttaaksemme isäntäsovelluksen normaalin toiminnan hyötykuorman suorittamisen jälkeen:

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Etsimme sopivaa pinokehystä (katso koodi osiosta "hack for redirecting control flow").

Sopivien ROP-gadgetien löytäminen:

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Hyötykuorman ruiskutuspaikan löytäminen:

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Rakennamme ROP-ketjun:

SGX-haittaohjelmat: kuinka roistot hyödyntävät uutta Intel-tekniikkaa muihin tarkoituksiin kuin mihin se on suunniteltu

Näin konnat käyttävät hyväkseen Intelin SGX-tekniikkaa, joka on suunniteltu torjumaan haittaohjelmia, saavuttaakseen päinvastaisia ​​tavoitteita.

Lähde: will.com

Lisää kommentti