Forskare frÄn Worcester Polytechnic Institute (USA) har presenterat en ny typ av attack kallad Mayhem, som anvÀnder en metod för att förvrida bitar i dynamiskt RAM, Rowhammer, för att Àndra variabelvÀrden i stacken som anvÀnds i programmet som flaggor för att avgöra om autentisering har lyckats och om sÀkerhetskontroller har passerats. Praktiska exempel pÄ attackens tillÀmpning har demonstrerats för att kringgÄ autentisering i SUDO, OpenSSH och MySQL, samt för att Àndra resultaten av sÀkerhetsrelaterade kontroller i OpenSSL-biblioteket.
Attacken kan tillÀmpas pÄ applikationer dÀr kontroller anvÀnder en jÀmförelse av skillnader i vÀrden frÄn noll. Exempel pÄ sÄrbar kod: int auth = 0; ⊠// kontrollkod som Àndrar vÀrdet pÄ auth vid lyckad autentisering if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
I sammanhanget av detta exempel Àr det tillrÀckligt för en lyckad attack att uppnÄ förvrÀngning av vilken bit som helst i minnet kopplad till den 32-bitars variabeln auth i stacken. Vid förvrÀngning av vilken bit som helst i variabeln kommer vÀrdet inte lÀngre att vara lika med noll och det villkorliga operatorn kommer att bedöma att autentiseringen har lyckats. Liknande kontrollmönster Àr ganska vanliga i applikationer och förekommer till exempel i SUDO, OpenSSH, MySQL och OpenSSL.

Attacken kan Àven tillÀmpas pÄ jÀmförelser av typen "if(auth == 1)", men i detta fall blir genomförandet mer komplicerat, eftersom man mÄste förvrÀnga den sista biten av de 32. Metoden kan ocksÄ anvÀndas för att pÄverka vÀrdena av variabler i CPU-register, eftersom innehÄllet i registren kan tillfÀlligt lagras i stacken vid kontextbyten, funktionsanrop eller signalhantering. Under den tid dÄ registervÀrdena finns i minnet kan förvrÀngningar göras, och det förÀndrade vÀrdet kan ÄterstÀllas i registret.

För att förvrÀnga bitar anvÀnds en av modifieringarna av RowHammer-attacken. Eftersom DRAM-minnet bestÄr av en tvÄdimensionell matris av celler, dÀr varje cell bestÄr av en kondensator och en transistor, leder kontinuerlig lÀsning av samma minnesomrÄde till spÀnningsfluktuationer och anomalier som orsakar en liten förlust av laddning i angrÀnsande celler. Om lÀsningsintensiteten Àr hög kan en angrÀnsande cell förlora tillrÀckligt med laddning och nÀsta regenereringscykel hinner inte ÄterstÀlla dess ursprungliga tillstÄnd, vilket leder till en Àndring av de lagrade datavÀrdena i cellen. För att skydda mot RowHammer har chipstillverkare lagt till mekanismen TRR (Target Row Refresh), som blockerar förvrÀngning av celler i specifika fall, men inte skyddar mot alla möjliga attackvarianter.
För att skydda mot Mayhem-attacken rekommenderas det att vid jÀmförelser inte anvÀnda bedömningen av skillnader frÄn noll eller överensstÀmmelse med ett, utan att kontrollera överensstÀmmelser med ett slumpmÀssigt seedvÀrde med icke-noll oktetter. I detta fall krÀvs det att ett betydande antal bitar precis förvrÀngs för att stÀlla in det önskade vÀrdet av variabeln, vilket Àr orealistiskt i jÀmförelse med att förvrÀnga en enda bit. Exempel pÄ kod som inte Àr utsatt för attack: int auth = 0xbe406d1a; ⊠// kontrollkod som stÀller in auth-vÀrdet till 0x23ab8701 vid lyckad autentisering if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Den angivna skyddsmethoden har redan anvÀnts av utvecklarna av sudo och ingÄr i utgÄvan 1.9.15 som en patch för sÄrbarheten CVE-2023-42465. Prototypkoden för att utföra attacken planeras att publiceras efter att korrigeringar har gjorts i de huvudsakliga sÄrbara projekten.
KĂ€lla: opennet.ru
