Forskare frÄn Worcester Polytechnic Institute (USA) har presenterat en ny typ av attack som kallas Mayhem, som anvÀnder Rowhammer dynamiska minnesbitvridningsmetod för att Àndra vÀrdena pÄ variabler pÄ stacken som anvÀnds i programmet som flaggor för att avgöra om autentiseringen har lyckats eller inte och för att klara sÀkerhetskontroller. Praktiska exempel pÄ hur attacken anvÀnds för att kringgÄ autentisering i SUDO, OpenSSH och MySQL, samt för att Àndra resultatet av sÀkerhetsrelaterade kontroller i OpenSSL-biblioteket.
Attacken kan tillÀmpas pÄ applikationer som anvÀnder jÀmförelser av vÀrden som skiljer sig frÄn noll under kontroller. Exempel pÄ sÄrbar kod: int auth = 0; ⊠// kontrollkod som Àndrar auth-vÀrdet vid lyckad autentisering if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
I detta exempel krÀver en lyckad attack att vilken bit som helst i minnet som motsvarar 32-bitars variabeln auth pÄ stacken Àr korrupt. Om nÄgon bit i variabeln Àr korrupt kommer vÀrdet inte lÀngre att vara noll och den villkorliga operatorn avgör om autentiseringen lyckades. SÄdana verifieringsmönster Àr ganska vanliga i applikationer och finns till exempel i SUDO, OpenSSH, MySQL och OpenSSL.

Attacken kan ocksÄ tillÀmpas pÄ jÀmförelser av typen "if(auth == 1)", men i detta fall Àr den svÄrare att genomföra, eftersom det Àr nödvÀndigt att inte förvrÀnga nÄgon bit av 32, utan den sista biten. Metoden kan ocksÄ anvÀndas för att pÄverka vÀrdena pÄ variabler i processorregister, eftersom innehÄllet i registren tillfÀlligt kan dumpas till stacken vid kontextbyte, anrop av funktioner eller utlösning av en signalhanterare. Under den tid som registervÀrdena finns i minnet kan detta minne förvrÀngas och det Àndrade vÀrdet ÄterstÀlls till registret.

För att förvrÀnga bitar anvÀnds en av modifieringarna av RowHammer-klassattacken. Eftersom DRAM-minne Àr en tvÄdimensionell matris av celler, som var och en bestÄr av en kondensator och en transistor, leder kontinuerlig lÀsning av samma minnesomrÄde till spÀnningsfluktuationer och avvikelser som orsakar en liten laddningsförlust i angrÀnsande celler. Om lÀsintensiteten Àr hög kan den angrÀnsande cellen förlora en tillrÀckligt stor mÀngd laddning och nÀsta regenereringscykel kommer inte att ha tid att ÄterstÀlla sitt ursprungliga tillstÄnd, vilket kommer att leda till en förÀndring av vÀrdet pÄ data som lagras i cellen. För att skydda mot RowHammer har chiptillverkare lagt till TRR-mekanismen (Target Row Refresh), som blockerar cellförvrÀngning i speciella fall, men inte skyddar mot alla möjliga attackvarianter.
För att skydda mot Mayhem-attacken rekommenderas det att anvÀnda en matchningskontroll med ett slumpmÀssigt frövÀrde med oktetter som inte Àr noll, istÀllet för en utvÀrdering av skillnader frÄn noll eller matchningar med ett i jÀmförelser. I det hÀr fallet, för att stÀlla in önskat vÀrde för variabeln, Àr det nödvÀndigt att noggrant förvrÀnga ett betydande antal bitar, vilket Àr orealistiskt, till skillnad frÄn att förvrÀnga en enda bit. Ett exempel pÄ kod som inte Àr mottaglig för attacker: int auth = 0xbe406d1a; ⊠// verifieringskod som stÀller in auth-vÀrdet till 0x23ab8701 vid lyckad autentisering if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Den angivna skyddsmetoden har redan tillÀmpats av sudo-utvecklare och inkluderades i version 1.9.15 som en ÄtgÀrd för sÄrbarheten CVE-2023-42465. Prototypkoden för attacken planeras att publiceras efter att korrigeringar har gjorts för de huvudsakliga sÄrbara projekten.
KĂ€lla: opennet.ru
