Mayhem - sulm i korrupsionit të bitit të kujtesës për të anashkaluar vërtetimin sudo dhe OpenSSH

Studiuesit nga Instituti Politeknik Worcester (SHBA) kanë prezantuar një lloj të ri sulmi Mayhem që përdor teknikën dinamike të shtrembërimit të bitit të RAM-it Rowhammer për të ndryshuar vlerat e variablave në pirg që përdoren si flamuj në program për të vendosur nëse vërtetimi dhe siguria kontrollet kanë kaluar. Shembuj praktikë të sulmit janë demonstruar për të anashkaluar vërtetimin në SUDO, OpenSSH dhe MySQL, si dhe për të ndryshuar rezultatin e kontrolleve të lidhura me sigurinë në bibliotekën OpenSSL.

Sulmi mund të zbatohet për aplikacionet që përdorin kontrolle për të krahasuar vlerat që ndryshojnë nga zero. Shembull i kodit të cenueshëm: int auth = 0; ... // kodi i verifikimit që ndryshon vlerën auth në rast të vërtetimit të suksesshëm nëse(auth != 0) kthen AUTH_SUCCESS; përndryshe kthehu AUTH_FAILURE;

Në kontekstin e këtij shembulli, për një sulm të suksesshëm mjafton të korruptohet çdo bit në memorien e lidhur me variablin auth 32-bit në stack. Nëse ndonjë bit në ndryshore është i korruptuar, vlera nuk do të jetë më zero dhe operatori i kushtëzuar do të përcaktojë përfundimin e suksesshëm të vërtetimit. Modele të tilla vërtetimi janë mjaft të zakonshme në aplikacione dhe gjenden, për shembull, në SUDO, OpenSSH, MySQL dhe OpenSSL.

Mayhem - sulm i korrupsionit të bitit të kujtesës për të anashkaluar vërtetimin sudo dhe OpenSSH

Sulmi mund të aplikohet edhe për krahasimet e formës "if(auth == 1)", por në këtë rast zbatimi i tij bëhet më i ndërlikuar, pasi është e nevojshme të shtrembërohet jo ndonjë bit i 32, por biti i fundit. Metoda mund të përdoret gjithashtu për të ndikuar në vlerat e variablave në regjistrat e procesorit, pasi përmbajtja e regjistrave mund të hidhet përkohësisht në pirg kur aktivizohet një ndërprerës konteksti, një thirrje funksioni ose një mbajtës sinjali. Gjatë periudhës kohore kur vlerat e regjistrit janë në memorie, mund të futen shtrembërime në këtë memorie dhe vlera e ndryshuar do të rikthehet në regjistër.

Mayhem - sulm i korrupsionit të bitit të kujtesës për të anashkaluar vërtetimin sudo dhe OpenSSH

Për të shtrembëruar bitet, përdoret një nga modifikimet e sulmit të klasës RowHammer. Meqenëse memoria DRAM është një grup qelizash dy-dimensionale, secila e përbërë nga një kondensator dhe një transistor, kryerja e leximeve të vazhdueshme të të njëjtit rajon memorie rezulton në luhatje të tensionit dhe anomali që shkaktojnë një humbje të vogël të ngarkesës në qelizat fqinje. Nëse intensiteti i leximit është i lartë, atëherë qeliza fqinje mund të humbasë një sasi mjaftueshëm të madhe ngarkese dhe cikli tjetër i rigjenerimit nuk do të ketë kohë për të rikthyer gjendjen e tij origjinale, gjë që do të çojë në një ndryshim në vlerën e të dhënave të ruajtura në qelizë . Për të mbrojtur kundër RowHammer, prodhuesit e çipave kanë shtuar një mekanizëm TRR (Target Row Refresh), i cili bllokon korrupsionin e qelizave në raste të veçanta, por nuk mbron nga të gjitha variacionet e mundshme të sulmit.

Për t'u mbrojtur kundër sulmit Mayhem, rekomandohet përdorimi i krahasimeve jo për të vlerësuar dallimet nga zero ose rastësi në një, por për të kontrolluar përputhjet duke përdorur një vlerë të rastësishme të farës me oktete jo zero. Në këtë rast, për të vendosur vlerën e dëshiruar të ndryshores, është e nevojshme të shtrembërohet me saktësi një numër i konsiderueshëm bitësh, gjë që është joreale, në ndryshim nga shtrembërimi i një biti. Shembull i kodit jo-sulmues: int auth = 0xbe406d1a; ... // kodi i verifikimit që vendos vlerën auth në 0x23ab8701 në rast të vërtetimit të suksesshëm nëse(auth == 0x23ab8701) kthen AUTH_SUCCESS; përndryshe kthehu AUTH_FAILURE;

Metoda e specifikuar e mbrojtjes është përdorur tashmë nga zhvilluesit sudo dhe është përfshirë në versionin 1.9.15 si një rregullim për cenueshmërinë CVE-2023-42465. Ata planifikojnë të publikojnë një prototip të kodit për kryerjen e sulmit pasi të jenë bërë rregullime në projektet kryesore të cenueshme.

Burimi: opennet.ru

Shto një koment