Forskere fra Worcester Polytechnic Institute (USA) har præsenteret en ny type angreb kaldet Mayhem, der anvender metoden til bitforvrængning i dynamisk RAM, Rowhammer, til at ændre værdierne af variabler i stakken, som bruges i programmet som flag for at afgøre, om godkendelsen og sikkerhedskontrollerne er lykkedes. Praktiske eksempler på angrebet er demonstreret for at omgå godkendelse i SUDO, OpenSSH og MySQL samt for at ændre resultaterne af sikkerhedskontroller i OpenSSL-biblioteket.
Angrebet kan anvendes på applikationer, hvor der ved kontrollerne foretages en sammenligning af afvigelser fra nul. Eksempel på sårbar kode: int auth = 0; … // kode til kontrol, der ændrer værdien af auth ved succesfuld godkendelse if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
I denne kontekst er det tilstrækkeligt for et succesfuldt angreb at forårsage forvrængning af en hvilken som helst bit i hukommelsen, der svarer til den 32-bit variabel auth i stakken. Ved forvrængning af en hvilken som helst bit i variablen vil værdien ikke længere være lig med nul, og betingelsen vil bestemme, at godkendelsen er lykkedes. Sådanne kontrolmønstre er ret udbredte i applikationer og findes f.eks. i SUDO, OpenSSH, MySQL og OpenSSL.

Angrebet kan også anvendes på sammenligninger som "if(auth == 1)", men i dette tilfælde bliver det mere komplekst, da det er nødvendigt at forvrænge ikke bare en hvilken som helst bit ud af 32, men den sidste bit. Metoden kan også anvendes til at påvirke værdierne af variabler i processorregistret, da indholdet af registrene midlertidigt kan blive overført til stakken ved kontekstskift, funktionsopkald eller signalbehandling. I den tid, hvor registerværdierne befinder sig i hukommelsen, kan der ske forvrængninger, og den ændrede værdi vil blive gendannet i registret.

RowHammer-angrebets en af modifikationer anvendes til at kompromittere bits. Da DRAM-hukommelsen udgør et todimensionelt array af celler, som hver består af en kondensator og en transistor, fører vedvarende læsning af det samme hukommelsesområde til spændningsfluktuationer og anomalier, der forårsager et lille tab af ladning i naboceller. Hvis læseintensiteten er høj, kan en nabocelle miste en betydelig mængde ladning, og den efterfølgende regenereringscyklus kan ikke genskabe dens oprindelige tilstand, hvilket fører til ændring af de gemte data i cellen. For at beskytte mod RowHammer har chipproducenterne tilføjet TRR (Target Row Refresh) mekanismen, som blokerer for sådanne celleforvridninger i specifikke tilfælde, men ikke beskytter mod alle mulige angrebsvarianter.
For at beskytte mod Mayhem-angrebet anbefales det at anvende ikke en vurdering af afvigelser fra nul eller lighed med én i sammenligninger, men at tjekke ligheder ved hjælp af en tilfældig forudgående værdi med ikke-nul oktetter. I dette tilfælde kræver det nøjagtigt at forvrænge et betydeligt antal bits for korrekt at indstille variablens ønskede værdi, hvilket er urealistisk, i modsætning til at forvrænge én bit. Eksempel på angrebsresistent kode: int auth = 0xbe406d1a; ... // kontrolkode som indstiller auth til 0x23ab8701 ved succesfuld autentificering if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Den angivne beskyttelsesmetode er allerede implementeret af sudo-udviklerne og er blevet en del af version 1.9.15 som en patch til sårbarheden CVE-2023-42465. Prototypekoden til udførelsen af angrebet planlægges offentliggjort efter rettelserne er indarbejdet i de primære sårbare projekter.
Kilde: opennet.ru
