Mayhem - útok na poškození paměťových bitů za účelem obejití autentizace sudo a OpenSSH

Výzkumníci z Worcester Polytechnic Institute (USA) představili nový typ útoku Mayhem, který využívá techniku ​​bitového zkreslení paměti Rowhammer s dynamickým náhodným přístupem ke změně hodnot proměnných zásobníku používaných jako příznaky v programu, aby se rozhodlo, zda má ověření autentizace a bezpečnostní kontroly. prošel. Praktické příklady útoku jsou demonstrovány na obcházení autentizace v SUDO, OpenSSH a MySQL a také na změnu výsledku bezpečnostních kontrol v knihovně OpenSSL.

Útok lze použít na aplikace, které používají kontroly k porovnání hodnot, které se liší od nuly. Příklad zranitelného kódu: int auth = 0; ... // ověřovací kód, který změní hodnotu auth v případě úspěšné autentizace if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;

V kontextu tohoto příkladu stačí pro úspěšný útok poškodit jakýkoli bit v paměti spojený s 32bitovou proměnnou auth na zásobníku. Pokud je některý bit v proměnné poškozen, hodnota již nebude nula a podmíněný operátor určí úspěšné dokončení autentizace. Takové ověřovací vzory jsou v aplikacích zcela běžné a nacházejí se například v SUDO, OpenSSH, MySQL a OpenSSL.

Mayhem - útok na mandlování paměťových bitů k obejití sudo a autentizace OpenSSH

Útok lze aplikovat i na porovnávání tvaru „if(auth == 1)“, ale v tomto případě se jeho implementace zkomplikuje, protože je nutné zkreslit nikoli bit z 32, ale poslední bit. Metodu lze také použít k ovlivnění hodnot proměnných v registrech procesoru, protože obsah registrů může být dočasně vyprázdněn do zásobníku, když se spustí přepínač kontextu, volání funkce nebo obsluha signálu. Během doby, kdy jsou hodnoty registru v paměti, mohou být do této paměti vloženy zkreslení a změněná hodnota bude obnovena do registru.

Mayhem - útok na mandlování paměťových bitů k obejití sudo a autentizace OpenSSH

Pro zkreslení bitů se používá jedna z modifikací útoku třídy RowHammer. Protože paměť DRAM je dvourozměrné pole buněk, z nichž každá se skládá z kondenzátoru a tranzistoru, provádění nepřetržitého čtení stejné oblasti paměti má za následek kolísání napětí a anomálie, které způsobují malou ztrátu náboje v sousedních článcích. Pokud je intenzita čtení vysoká, může sousední článek ztratit dostatečně velké množství náboje a další regenerační cyklus nestihne obnovit svůj původní stav, což povede ke změně hodnoty dat uložených v článku. . K ochraně proti RowHammer přidali výrobci čipů mechanismus TRR (Target Row Refresh), který ve speciálních případech blokuje poškození buněk, ale nechrání před všemi možnými variacemi útoků.

Pro ochranu před útokem Mayhem se doporučuje používat při porovnávání nikoli hodnocení rozdílů od nuly nebo shody s jedničkou, ale kontrolu shody pomocí náhodné počáteční hodnoty s nenulovými oktety. V tomto případě je pro nastavení požadované hodnoty proměnné nutné přesně zkreslit značný počet bitů, což je na rozdíl od zkreslení jednoho bitu nereálné. Příklad neútočného kódu: int auth = 0xbe406d1a; ... // ověřovací kód, který nastaví hodnotu auth na 0x23ab8701 v případě úspěšné autentizace if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;

Uvedenou metodu ochrany již použili vývojáři sudo a byla zahrnuta ve verzi 1.9.15 jako oprava chyby zabezpečení CVE-2023-42465. Po opravě hlavních zranitelných projektů plánují zveřejnit prototyp kódu pro provedení útoku.

Zdroj: opennet.ru

Přidat komentář