Mayhem - attack mot minnesbitar för att kringgå sudo- och OpenSSH-autentisering

Forskare från Worcester Polytechnic Institute (USA) har introducerat en ny typ av Mayhem-attack som använder Rowhammers dynamiska random access memory bit distortion teknik för att ändra värdena på stackvariabler som används som flaggor i programmet för att avgöra om autentisering och säkerhetskontroller har passerade. Praktiska exempel på attacken visas för att kringgå autentisering i SUDO, OpenSSH och MySQL, samt att ändra resultatet av säkerhetsrelaterade kontroller i OpenSSL-biblioteket.

Attacken kan appliceras på applikationer som använder kontroller för att jämföra värden som skiljer sig från noll. Exempel på sårbar kod: int auth = 0; ... // verifieringskod som ändrar autentiseringsvärdet i händelse av framgångsrik autentisering if(auth != 0) return AUTH_SUCCESS; annars returnerar AUTH_FAILURE;

I samband med detta exempel, för en framgångsrik attack räcker det att korrumpera vilken bit som helst i minnet som är associerat med 32-bitars auth-variabeln på stacken. Om någon bit i variabeln är skadad kommer värdet inte längre att vara noll och den villkorliga operatorn kommer att avgöra om autentiseringen har slutförts. Sådana valideringsmönster är ganska vanliga i applikationer och finns till exempel i SUDO, OpenSSH, MySQL och OpenSSL.

Mayhem - attack med minnesbit för att kringgå sudo- och OpenSSH-autentisering

Attacken kan också tillämpas på jämförelser av formen "if(auth == 1)", men i det här fallet blir implementeringen mer komplicerad, 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 spolas in i stacken när en kontextväxling, funktionsanrop eller signalhanterare avfyras. Under tidsperioden medan registervärden finns i minnet kan förvrängningar införas i detta minne och det ändrade värdet kommer att återställas till registret.

Mayhem - attack med minnesbit för att kringgå sudo- och OpenSSH-autentisering

För att förvränga bitarna används en av modifikationerna av RowHammer-klassattacken. Eftersom DRAM-minne är en tvådimensionell uppsättning celler, som var och en består av en kondensator och en transistor, resulterar kontinuerliga avläsningar av samma minnesområde i spänningsfluktuationer och anomalier som orsakar en liten laddningsförlust i närliggande 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 i värdet på data som lagras i cellen . För att skydda mot RowHammer har chiptillverkarna lagt till en TRR (Target Row Refresh) mekanism, som blockerar cellkorruption i speciella fall, men inte skyddar mot alla möjliga attackvariationer.

För att skydda mot Mayhem-attacken rekommenderas det att i jämförelser inte använda en utvärdering av skillnader från noll eller en slump med en, utan en matchkontroll med ett slumpmässigt frövärde med oktetter som inte är noll. I detta fall, för att ställa in det önskade värdet på variabeln, är det nödvändigt att noggrant förvränga ett betydande antal bitar, vilket är orealistiskt, i motsats till förvrängningen av en bit. Exempel på icke-attackerbar kod: int auth = 0xbe406d1a; ... // verifieringskod som ställer in auth-värdet till 0x23ab8701 i händelse av framgångsrik autentisering if(auth == 0x23ab8701) return AUTH_SUCCESS; annars returnerar AUTH_FAILURE;

Den angivna skyddsmetoden har redan använts av sudo-utvecklarna och inkluderades i release 1.9.15 som en fix för CVE-2023-42465-sårbarheten. De planerar att publicera en prototyp av koden för att utföra attacken efter att korrigeringar har gjorts till de främsta sårbara projekten.

Källa: opennet.ru

Lägg en kommentar