Mayhem - muistibitin korruptiohyökkäys sudon ja OpenSSH-todennuksen ohittamiseksi

Worcester Polytechnic Instituten (USA) tutkijat ovat ottaneet käyttöön uudentyyppisen Mayhem-hyökkäyksen, joka käyttää Rowhammerin dynaamista hajasaantimuistin bittivääristymistekniikkaa muuttaakseen ohjelman lippuina käytettävien pinomuuttujien arvoja sen päättämiseksi, onko todennus- ja turvatarkistukset tehty. läpäissyt. Käytännön esimerkkejä hyökkäyksestä on esitetty SUDO-, OpenSSH- ja MySQL-tunnistuksen ohittamiseksi sekä OpenSSL-kirjaston tietoturvaan liittyvien tarkistusten tulosten muuttamiseen.

Hyökkäys voidaan soveltaa sovelluksiin, jotka käyttävät tarkistuksia nollasta poikkeavien arvojen vertailuun. Esimerkki haavoittuvasta koodista: int auth = 0; ... // vahvistuskoodi, joka muuttaa todennusarvon onnistuneen todennuksen tapauksessa if(auth != 0) return AUTH_SUCCESS; muuten palauttaa AUTH_FAILURE;

Tässä esimerkissä onnistuneeseen hyökkäykseen riittää, että korruptoi mikä tahansa bitti muistissa, joka liittyy pinon 32-bittiseen auth-muuttujaan. Jos jokin muuttujan bitti on vioittunut, arvo ei ole enää nolla ja ehdollinen operaattori määrittää todennuksen onnistuneen loppuunsaattamisen. Tällaiset validointimallit ovat melko yleisiä sovelluksissa ja niitä löytyy esimerkiksi SUDO:sta, OpenSSH:sta, MySQL:stä ja OpenSSL:stä.

Mayhem - muistibitin häiriöhyökkäys sudon ja OpenSSH-todennuksen ohittamiseksi

Hyökkäystä voidaan soveltaa myös muodon "if(auth == 1)" vertailuihin, mutta tässä tapauksessa sen toteutus muuttuu monimutkaisemmaksi, koska ei tarvitse vääristää mitä tahansa 32:n bittiä, vaan viimeistä bittiä. Menetelmällä voidaan myös vaikuttaa prosessorirekisterien muuttujien arvoihin, koska rekisterien sisältö voidaan tilapäisesti huuhdella pinoon kontekstikytkimen, funktiokutsun tai signaalinkäsittelijän laukeamisen yhteydessä. Sinä aikana, kun rekisteriarvot ovat muistissa, tähän muistiin voidaan lisätä vääristymiä ja muuttunut arvo palautetaan rekisteriin.

Mayhem - muistibitin häiriöhyökkäys sudon ja OpenSSH-todennuksen ohittamiseksi

Bittien vääristämiseksi käytetään yhtä RowHammer-luokan hyökkäyksen muunnelmista. Koska DRAM-muisti on kaksiulotteinen joukko soluja, joista kukin koostuu kondensaattorista ja transistorista, saman muistialueen jatkuva lukeminen johtaa jännitteen vaihteluihin ja poikkeavuuksiin, jotka aiheuttavat pienen latauksen menetyksen naapurisoluissa. Jos lukuintensiteetti on korkea, naapurisolu voi menettää riittävän suuren määrän varausta ja seuraavalla regenerointijaksolla ei ole aikaa palauttaa alkuperäistä tilaansa, mikä johtaa soluun tallennetun datan arvon muutokseen. . Suojatakseen RowHammeria vastaan ​​siruvalmistajat ovat lisänneet TRR (Target Row Refresh) -mekanismin, joka estää solujen korruption erikoistapauksissa, mutta ei suojaa kaikilta mahdollisilta hyökkäysvariaatioilta.

Mayhem-hyökkäykseltä suojaamiseksi on suositeltavaa käyttää vertailuissa ei nollaerojen arviointia tai yhteensopivuutta yhden kanssa, vaan täsmäytystarkistusta käyttämällä satunnaista siemenarvoa nollasta poikkeavilla okteteilla. Tässä tapauksessa muuttujan halutun arvon asettamiseksi on tarpeen vääristää tarkasti merkittävä määrä bittejä, mikä on epärealistista, toisin kuin yhden bitin vääristymä. Esimerkki hyökkäämättömästä koodista: int auth = 0xbe406d1a; ... // vahvistuskoodi, joka asettaa todennusarvoksi 0x23ab8701 onnistuneen todennuksen tapauksessa if(auth == 0x23ab8701) return AUTH_SUCCESS; muuten palauttaa AUTH_FAILURE;

Sudo-kehittäjät ovat jo käyttäneet määritettyä suojausmenetelmää, ja se sisällytettiin julkaisuun 1.9.15 korjauksena CVE-2023-42465-haavoittuvuuteen. He suunnittelevat julkaisevansa koodin prototyypin hyökkäyksen suorittamista varten sen jälkeen, kun tärkeimpiin haavoittuviin projekteihin on tehty korjauksia.

Lähde: opennet.ru

Lisää kommentti