Mayhem - minnebitkorrupsjonsangrep for å omgå sudo- og OpenSSH-autentisering

Forskere fra Worcester Polytechnic Institute (USA) har introdusert en ny type Mayhem-angrep som bruker Rowhammer dynamisk random access memory bit forvrengningsteknikk for å endre verdiene til stabelvariabler som brukes som flagg i programmet for å avgjøre om autentisering og sikkerhetssjekker har bestått. Praktiske eksempler på angrepet er demonstrert for å omgå autentisering i SUDO, OpenSSH og MySQL, samt endre resultatet av sikkerhetsrelaterte kontroller i OpenSSL-biblioteket.

Angrepet kan brukes på applikasjoner som bruker sjekker for å sammenligne verdier som avviker fra null. Eksempel på sårbar kode: int auth = 0; ... // bekreftelseskode som endrer auth-verdien i tilfelle vellykket autentisering if(auth != 0) return AUTH_SUCCESS; ellers returner AUTH_FAILURE;

I sammenheng med dette eksempelet, for et vellykket angrep er det nok å ødelegge en hvilken som helst bit i minnet knyttet til 32-bits autentiseringsvariabelen på stabelen. Hvis en bit i variabelen er ødelagt, vil verdien ikke lenger være null, og den betingede operatøren vil bestemme vellykket fullføring av autentisering. Slike valideringsmønstre er ganske vanlige i applikasjoner og finnes for eksempel i SUDO, OpenSSH, MySQL og OpenSSL.

Mayhem - minnebit-mangling-angrep for å omgå sudo- og OpenSSH-autentisering

Angrepet kan også brukes på sammenligninger av formen "if(auth == 1)", men i dette tilfellet blir implementeringen mer komplisert, siden det er nødvendig å forvrenge ikke noen bit av 32, men den siste biten. Metoden kan også brukes til å påvirke verdiene til variabler i prosessorregistre, siden innholdet i registrene midlertidig kan skylles inn i stabelen når en kontekstbryter, funksjonskall eller signalbehandler utløses. I løpet av tidsperioden mens registerverdier er i minnet, kan forvrengninger introduseres i dette minnet og den endrede verdien vil bli gjenopprettet til registeret.

Mayhem - minnebit-mangling-angrep for å omgå sudo- og OpenSSH-autentisering

For å forvrenge bitene, brukes en av modifikasjonene av RowHammer-klasseangrepet. Siden DRAM-minne er et todimensjonalt utvalg av celler, som hver består av en kondensator og en transistor, resulterer kontinuerlig avlesning av samme minneregion i spenningsfluktuasjoner og anomalier som forårsaker et lite tap av ladning i naboceller. Hvis leseintensiteten er høy, kan nabocellen miste en tilstrekkelig stor mengde ladning og neste regenereringssyklus vil ikke ha tid til å gjenopprette sin opprinnelige tilstand, noe som vil føre til en endring i verdien av dataene som er lagret i cellen . For å beskytte mot RowHammer har brikkeprodusenter lagt til en TRR (Target Row Refresh) mekanisme, som blokkerer cellekorrupsjon i spesielle tilfeller, men som ikke beskytter mot alle mulige angrepsvariasjoner.

For å beskytte mot Mayhem-angrepet, anbefales det å sammenligne ikke en evaluering av forskjeller fra null eller en tilfeldighet med en, men en kampsjekk med en tilfeldig frøverdi med oktetter som ikke er null. I dette tilfellet, for å angi ønsket verdi av variabelen, er det nødvendig å nøyaktig forvrenge et betydelig antall biter, noe som er urealistisk, i motsetning til forvrengningen av en bit. Eksempel på kode som ikke kan angripes: int auth = 0xbe406d1a; ... // bekreftelseskode som setter auth-verdien til 0x23ab8701 i tilfelle vellykket autentisering if(auth == 0x23ab8701) returner AUTH_SUCCESS; ellers returner AUTH_FAILURE;

Den spesifiserte beskyttelsesmetoden har allerede blitt brukt av sudo-utviklerne og ble inkludert i versjon 1.9.15 som en løsning for CVE-2023-42465-sårbarheten. De planlegger å publisere en prototype av koden for å utføre angrepet etter at det er gjort rettelser til de viktigste sårbare prosjektene.

Kilde: opennet.ru

Legg til en kommentar