Onderzoekers van het Worcester Polytechnic Institute (Verenigde Staten) hebben een nieuw type aanval genaamd Mayhem gepresenteerd, die gebruik maakt van de Rowhammer-techniek om bits in dynamisch geheugen te verstoren. Dit wordt gebruikt om de waarden van variabelen op de stack te wijzigen, die in de software als vlaggen worden gebruikt voor het bepalen van de succesvolle authenticatie en het doorlopen van veiligheidscontroles. Praktische toepassingen van de aanval zijn gedemonstreerd om authenticatie in SUDO, OpenSSH en MySQL te omzeilen, en om de uitkomsten van veiligheidscontroles in de OpenSSL-bibliotheek te wijzigen.
De aanval kan worden toegepast op applicaties waarin bij controles gebruik wordt gemaakt van een vergelijkingen van verschillen van waarden met nul. Voorbeeld van kwetsbare code: int auth = 0; … // controlecode, die de waarde van auth wijzigt bij succesvolle authenticatie if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
In de context van dit voorbeeld is het voldoende om een bit in het geheugen te verstoren dat betrekking heeft op de 32-bit variabele auth op de stack voor een succesvolle aanval. Het verstoren van welk bit dan ook in de variabele zorgt ervoor dat de waarde niet meer gelijk is aan nul, en de voorwaarde in de if-statement bepaalt dat de authenticatie succesvol was. Dergelijke controlepatronen komen vaak voor in applicaties en zijn bijvoorbeeld te vinden in SUDO, OpenSSH, MySQL en OpenSSL.

De aanval kan ook worden toegepast op vergelijkingen zoals 'if(auth == 1)', maar in dit geval wordt het ingewikkelder, omdat niet zomaar elk van de 32 bits moet worden verstoren, maar de laatste bit. De methode kan ook worden gebruikt om invloed uit te oefenen op de waarden van variabelen in de CPU-registers, aangezien de inhoud van registers tijdelijk naar de stack kan worden geschreven tijdens contextwisseling, functie-aanroepen of het activeren van een signaalhandler. Gedurende de tijd dat de registerwaarden zich in het geheugen bevinden, kunnen deze worden verstoord, en het gewijzigde waarde kan in het register worden hersteld.

Om bits te vervormen, wordt een van de varianten van de RowHammer-aanval gebruikt. Aangezien DRAM-geheugen een tweedimensionale array van cellen is, die uit een condensator en een transistor bestaat, leidt het continu lezen van hetzelfde geheugengebied tot spanningsfluctuaties en anomalieën, waardoor er een kleine hoeveelheid lading verloren gaat in aangrenzende cellen. Als de leesintensiteit hoog is, kan een aangrenzende cel genoeg lading verliezen en kan de volgende regeneratiecyclus haar oorspronkelijke staat niet herstellen, wat leidt tot een wijziging van de opgeslagen gegevens in die cel. Om RowHammer te beschermen, hebben chipfabrikanten een TRR (Target Row Refresh) mechanisme toegevoegd, dat vervorming van cellen in specifieke gevallen blokkeert, maar niet beschermt tegen alle mogelijke aanvalsvormen.
Om je te beschermen tegen de Mayhem-aanval, wordt aangeraden om bij vergelijkingen niet de afwijkingen van nul of overeenkomsten met één te evalueren, maar overeenkomsten te controleren met behulp van een willekeurige seed met niet-nul bytes. In dit geval is het noodzakelijk om een aanzienlijk aantal bits precies te vervormen om de gewenste waarde van de variabele in te stellen, wat onrealistisch is, in tegenstelling tot het vervormen van één bit. Voorbeeld van code die niet vatbaar is voor de aanval: int auth = 0xbe406d1a; … // controlecode die de waarde auth instelt op 0x23ab8701 bij succesvolle authenticatie if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
De genoemde beschermingsmethode is al door de ontwikkelaars van sudo toegepast en is opgenomen in release 1.9.15 als een patch voor de kwetsbaarheid CVE-2023-42465. Een prototypecode voor het uitvoeren van de aanval wordt na het aanbrengen van correcties in de belangrijkste kwetsbare projecten gepubliceerd.
Bron: opennet.ru
