Spoločnosť Google zverejnila niekoľko prototypov exploitov, ktoré ukazujú, ako je možné zneužiť zraniteľnosti triedy Spectre pri vykonávaní JavaScriptového kódu v prehliadači, a to obídením predtým pridaných ochranných metód. Exploity môžu byť použité na získanie prístupu k pamäti procesu, ktorý spracováva webový obsah na aktuálnej karte. Na testovanie funkčnosti exploitov bol spustený web leaky.page a kód s popisom logiky fungovania bol umiestnený na GitHub.
Navrhnutý prototyp je určený na vykonanie útoku na systémy s procesormi Intel Core i7-6500U v prostredí Linux a Chrome 88. Na aplikáciu exploitov v iných prostrediach sú potrebné zmeny. Metóda exploitácie nie je špecifická pre procesory Intel — po príslušnej adaptácii bola potvrdená funkčnosť exploitov na systémoch s CPU iných výrobcov, vrátane Apple M1 na báze architektúry ARM. Po drobných úpravách je exploit taktiež funkčný v iných operačných systémoch a v iných prehliadačoch založených na engine Chromium.
V prostredí so štandardným Chrome 88 a procesormi Intel Skylake sa podarilo dosiahnuť únik dát z procesu zodpovedajúceho za spracovanie webového obsahu na aktuálnej karte Chrome (renderer process) rýchlosťou 1 kilobajt za sekundu. Okrem toho boli vyvinuté alternatívne prototypy, napríklad exploit, ktorý umožňuje za cenu zníženia stability zvýšiť rýchlosť úniku na 8kB/s pri použití časovača performance.now() s presnosťou 5 mikrosekúnd (0.005 milisekundy). Pripravená bola aj verzia, ktorá pracovala s presnosťou časovača na úrovni jednej milisekundy, ktorá mohla byť použitá na organizovanie prístupu k pamäti iného procesu s rýchlosťou približne 60 bajtov za sekundu.
Zverejnený demonstračný kód sa skladá z troch častí. Prvá časť vykonáva kalibráciu časovača na odhad času potrebného na vykonanie operácií potrebných na obnovu dát, ktoré zostali v cache procesora v dôsledku špekulatívneho vykonávania inštrukcií CPU. Druhá časť určuje rozloženie pamäte používané pri umiestňovaní poľa JavaScript.
Tretia časť priamo vykonáva zneužitie zraniteľnosti Spectre na určenie obsahu pamäte aktuálneho procesu vytvorením podmienok na špekulatívne vykonávanie určitých operácií, ktorých výsledok procesor odmietne po zistení neúspešnej predpovede, ale stopy vykonávania zostávajú v spoločnej cache a môžu byť obnovené pomocou metód určovania obsahu cache cez bočné kanály analyzujúcich zmenu času prístupu k cachovaným a necachovaným dátam.
Navrhnutá technika zneužitia umožňuje obísť potrebu veľmi presných časovačov dostupných cez API performance.now() a bez podpory typu SharedArrayBuffer, ktorý umožňuje vytvárať pole v zdieľanej pamäti. Exploit zahŕňa gadget Spectre, ktorý spúšťa kontrolované špekulatívne vykonávanie kódu, a analyzátor úniku dát cez bočné kanály, ktorý identifikuje cachované údaje získané počas špekulatívneho vykonávania.
Gadget je implementovaný prostredníctvom poľa JavaScript, kde sa pokúša o prístup do oblasti mimo hraníc bufferu, čo vplýva na stav bloku predpovedania prechodov kvôli pridanej kontrole veľkosti bufferu zo strany kompilátora (procesor špekulatívne vykonáva prístup, ale vracia stav späť po kontrole). Na analýzu obsahu cache v podmienkach nedostatočnej presnosti časovača sa navrhuje metóda, ktorá klame stratégii odstraňovania dát z cache Tree-PLRU a umožňuje prostredníctvom zvýšenia počtu cyklov výrazne zvýšiť časový rozdiel pri získavaní hodnoty z cache a pri absencii hodnoty v cache.
Upozorňuje sa, že spoločnosť Google zverejnila prototyp exploitu, aby ukázala realistickosť útokov využívajúcich zraniteľnosti triedy Spectre a na povzbudenie webových vývojárov k používaniu techník minimalizujúcich riziká z podobných útokov. Pri tom Google verí, že bez významnej revízie navrhnutého prototypu nie je možné vytvoriť univerzálne exploity pripravené nielen na demonštráciu, ale aj na široké využitie.
Aby sa znížil riziko, sa vlastníkom webových stránok odporúča používať nedávno zavedené hlavičky Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame-Options, X-Content-Type-Options a SameSite Cookie. Tieto mechanizmy priamo nechránia pred útokmi, ale umožňujú izoláciu údajov webovej stránky pred únikom do procesov, v ktorých môže byť vykonaný JavaScriptový kód útočníka (únik sa deje z pamäte aktuálneho procesu, v ktorom okrem kódu útočníka môžu byť spracovávané aj údaje inej stránky otvorenej v tej istej karte). Hlavná myšlienka je oddeliť v rôznych procesoch vykonávanie kódu stránky od cudzích kódov získaných z nespolehlivých zdrojov, ako je kód zahrnutý cez iframe.

Zdroj: opennet.ru
