Útok extrakce CPU cache implementovaný ve webovém prohlížeči bez JavaScriptu

Tým výzkumníků z několika amerických, izraelských a australských univerzit vyvinul tři útoky, které běží na webových prohlížečích, aby extrahovaly informace o obsahu mezipaměti procesoru. Jedna metoda funguje v prohlížečích bez JavaScriptu a další dvě obcházejí stávající metody ochrany proti útokům z postranních kanálů, včetně těch používaných v prohlížeči Tor a DeterFox. Kód pro demonstraci útoků, stejně jako serverové komponenty nezbytné pro útoky, jsou zveřejněny na GitHubu.

K analýze obsahu mezipaměti používají všechny útoky metodu Prime+Probe, která zahrnuje naplnění mezipaměti standardní sadou hodnot a detekci změn měřením doby přístupu k nim při jejich doplňování. Aby se obešly bezpečnostní mechanismy přítomné v prohlížečích, které narušují přesné měření času, dvěma možnostmi se odvolá na server DNS nebo WebSocket ovládaný útočníkem, který uchovává záznam o čase přijatých požadavků. V jednom provedení se jako časová reference používá pevná doba odezvy DNS.

Měření provedená pomocí externích serverů DNS nebo WebSocket pomocí klasifikačního systému založeného na strojovém učení stačila k předpovědi hodnot s přesností až 98 % v nejoptimálnějším scénáři (průměr 80–90 %). Metody útoku 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 extrakce CPU cache implementovaný ve webovém prohlížeči bez JavaScriptu

První varianta útoku DNS Racing využívá klasickou implementaci metody Prime+Probe pomocí JavaScriptových polí. Rozdíly se scvrkají na použití externího časovače založeného na DNS a obslužné rutiny onerror, která se spouští při pokusu o načtení obrázku z neexistující domény. Externí časovač umožňuje útok Prime+Probe na prohlížeče, které omezují nebo zcela zakazují přístup k časovačům JavaScript.

U DNS serveru umístěného ve stejné ethernetové síti se přesnost časovače odhaduje na přibližně 2 ms, což je dostačující k provedení útoku postranním kanálem (pro srovnání, přesnost standardního časovače JavaScript v prohlížeči Tor je snížena na 100 ms). Pro útok není vyžadována kontrola nad serverem DNS, protože doba provedení operace je zvolena tak, aby doba odezvy z DNS sloužila jako známka dřívějšího dokončení kontroly (v závislosti na tom, zda byl spuštěn obslužný program onerror). dříve nebo později se vyvodí závěr o rychlosti operace kontroly s mezipamětí) .

Druhá metoda útoku, „String and Sock“, má za cíl obejít bezpečnostní techniky, které omezují nízkoúrovňové použití polí v JavaScriptu. Místo polí String and Sock používá operace na velmi velkých řetězcích, jejichž velikost je zvolena tak, aby proměnná pokryla celou LLC cache (Last level cache). Dále se pomocí funkce indexOf() hledá v řetězci malý podřetězec, který zpočátku ve zdrojovém řetězci chybí, tzn. výsledkem operace vyhledávání je opakování celého řetězce. Protože velikost řádku odpovídá velikosti mezipaměti LLC, skenování umožňuje provést operaci kontroly mezipaměti bez manipulace s poli. Pro měření zpoždění je místo DNS uskutečněno volání na server WebSocket ovládaný útočníkem – před a po dokončení vyhledávací operace jsou v řádku odeslány dotazy, na základě kterých server vypočítá zpoždění použité k analýze mezipaměti obsah.

Třetí varianta útoku „CSS PP0“ je implementována prostřednictvím HTML a CSS a může fungovat v prohlížečích s vypnutým JavaScriptem. Metoda je podobná "String and Sock", ale není vázána na JavaScript. Během útoku se vygeneruje sada selektorů CSS, které vyhledávají podle masky. Počáteční velký řetězec, který vyplní mezipaměť, je nastaven vytvořením značky div s velmi velkým názvem třídy. Uvnitř je sada dalších divů s vlastními identifikátory. Každý z těchto vnořených divů má svůj vlastní styl se selektorem, který hledá podřetězec. Při vykreslování stránky se prohlížeč nejprve pokusí zpracovat vnitřní prvky div, což má za následek operaci vyhledávání na velkém řádku. Vyhledávání se provádí pomocí záměrně chybějící masky a vede k iteraci přes celý řádek, načež se spustí podmínka „ne“ a provede se pokus o načtení obrázku na pozadí odkazujícího na náhodné domény: #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»);} … X X ...

Subdomény jsou obsluhovány útočníkovým DNS serverem, který může měřit zpoždění v přijímání požadavků. DNS server vydává NXDOMAIN pro všechny požadavky a uchovává protokol o přesném čase požadavků. Výsledkem zpracování sady divs je, že útočníkův server DNS obdrží řadu požadavků, jejichž zpoždění koreluje s výsledkem kontroly obsahu mezipaměti.

Útok extrakce CPU cache implementovaný ve webovém prohlížeči bez JavaScriptu


Zdroj: opennet.ru

Přidat komentář