Mayhem - hukommelsesbit-korruptionsangreb for at omgå sudo- og OpenSSH-godkendelse

Forskere fra Worcester Polytechnic Institute (USA) har introduceret en ny type Mayhem-angreb, der bruger Rowhammer dynamisk random access memory bitforvrængningsteknik til at ændre værdierne af stakvariabler, der bruges som flag i programmet for at afgøre, om autentificering og sikkerhedstjek har bestået. Praktiske eksempler på angrebet er demonstreret til at omgå autentificering i SUDO, OpenSSH og MySQL, samt at ændre resultatet af sikkerhedsrelaterede kontroller i OpenSSL-biblioteket.

Angrebet kan anvendes på applikationer, der bruger kontroller til at sammenligne værdier, der adskiller sig fra nul. Eksempel på sårbar kode: int auth = 0; ... // verifikationskode, der ændrer godkendelsesværdien i tilfælde af vellykket godkendelse if(auth != 0) returnerer AUTH_SUCCESS; ellers returner AUTH_FAILURE;

I forbindelse med dette eksempel er det for et vellykket angreb nok at ødelægge en hvilken som helst bit i hukommelsen forbundet med 32-bit godkendelsesvariablen på stakken. Hvis en bit i variablen er beskadiget, vil værdien ikke længere være nul, og den betingede operatør vil afgøre, om godkendelsen er gennemført. Sådanne valideringsmønstre er ret almindelige i applikationer og findes for eksempel i SUDO, OpenSSH, MySQL og OpenSSL.

Mayhem - hukommelsesbit-mangling-angreb for at omgå sudo- og OpenSSH-godkendelse

Angrebet kan også anvendes til sammenligninger af formen "if(auth == 1)", men i dette tilfælde bliver implementeringen mere kompliceret, da det er nødvendigt at forvrænge ikke en hvilken som helst bit af 32, men den sidste bit. Metoden kan også bruges til at påvirke værdierne af variabler i processorregistre, da indholdet af registrene midlertidigt kan skylles ud på stakken, når et kontekstskifte, funktionskald eller signalbehandler udløses. I løbet af tidsperioden, mens registerværdier er i hukommelsen, kan der indføres forvrængninger i denne hukommelse, og den ændrede værdi vil blive gendannet til registret.

Mayhem - hukommelsesbit-mangling-angreb for at omgå sudo- og OpenSSH-godkendelse

For at forvrænge bitsene bruges en af ​​modifikationerne af RowHammer-klasseangrebet. Da DRAM-hukommelse er et todimensionelt array af celler, der hver består af en kondensator og en transistor, resulterer udførelse af kontinuerlige aflæsninger af det samme hukommelsesområde i spændingsudsving og anomalier, der forårsager et lille tab af ladning i naboceller. Hvis læseintensiteten er høj, kan nabocellen miste en tilstrækkelig stor mængde ladning, og den næste regenereringscyklus vil ikke have tid til at genoprette sin oprindelige tilstand, hvilket vil føre til en ændring i værdien af ​​de data, der er lagret i cellen . For at beskytte mod RowHammer har chipproducenter tilføjet en TRR (Target Row Refresh) mekanisme, som blokerer cellekorruption i særlige tilfælde, men ikke beskytter mod alle mulige angrebsvariationer.

For at beskytte mod Mayhem-angrebet anbefales det i sammenligninger ikke at bruge en evaluering af forskelle fra nul eller et sammenfald med en, men en matchcheck ved hjælp af en tilfældig seed-værdi med oktetter, der ikke er nul. I dette tilfælde, for at indstille den ønskede værdi af variablen, er det nødvendigt nøjagtigt at forvrænge et betydeligt antal bit, hvilket er urealistisk i modsætning til forvrængning af en bit. Eksempel på kode, der ikke kan angribes: int auth = 0xbe406d1a; ... // verifikationskode, der sætter auth-værdien til 0x23ab8701 i tilfælde af vellykket godkendelse if(auth == 0x23ab8701) returner AUTH_SUCCESS; ellers returner AUTH_FAILURE;

Den specificerede beskyttelsesmetode er allerede blevet brugt af sudo-udviklerne og blev inkluderet i release 1.9.15 som en rettelse af CVE-2023-42465-sårbarheden. De planlægger at udgive en prototype af koden til at udføre angrebet, efter at der er lavet rettelser til de vigtigste sårbare projekter.

Kilde: opennet.ru

Tilføj en kommentar