Google osoittaa Spectre-haavoittuvuuksien hyödyntämisen suorittamalla JavaScriptin selaimessa

Google on julkaissut useita hyväksikäyttöprototyyppejä, jotka osoittavat mahdollisuuden hyödyntää Spectre-luokan haavoittuvuuksia suoritettaessa JavaScript-koodia selaimessa ohittaen aiemmin lisätyt suojausmenetelmät. Hyökkäyksien avulla voidaan päästä käsiksi nykyisen välilehden verkkosisältöä käsittelevän prosessin muistiin. Hyödyntämisen toiminnan testaamiseksi käynnistettiin sivusto leaky.page ja työn logiikkaa kuvaava koodi julkaistiin GitHubille.

Ehdotettu prototyyppi on suunniteltu hyökkäämään Intel Core i7-6500U -prosessoreilla varustettuihin järjestelmiin Linux- ja Chrome 88 -ympäristöissä. Muutoksia tarvitaan hyödyntääkseen muita ympäristöjä. Hyödyntämismenetelmä ei ole Intel-prosessoreille spesifinen - asianmukaisen mukautuksen jälkeen hyväksikäyttö vahvistettiin toimivan järjestelmissä, joissa on muiden valmistajien suorittimet, mukaan lukien ARM-arkkitehtuuriin perustuva Apple M1. Pienten säätöjen jälkeen hyödyntäminen toimii myös muissa käyttöjärjestelmissä ja muissa Chromium-moottoriin perustuvissa selaimissa.

Tavallisiin Chrome 88- ja Intel Skylake -suorittimiin perustuvassa ympäristössä tietoja vuoti nykyisen Chrome-välilehden verkkosisällön käsittelystä vastaavasta prosessista (renderöintiprosessi) nopeudella 1 kilotavu sekunnissa. Lisäksi kehitettiin vaihtoehtoisia prototyyppejä, esimerkiksi hyväksikäyttö, joka mahdollistaa vakauden alenemisen kustannuksella nostaa vuotonopeuden 8kB/s:iin käytettäessä performance.now()-ajastinta 5 mikrosekunnin (0.005 millisekunnin) tarkkuudella. . Valmisteltiin myös yhden millisekunnin ajastintarkkuudella toimiva variantti, jolla voitiin järjestää pääsy toisen prosessin muistiin noin 60 tavua sekunnissa.

Julkaistu demokoodi koostuu kolmesta osasta. Ensimmäinen osa kalibroi ajastimen arvioimaan niiden toimintojen suoritusaikaa, jotka vaaditaan prosessorin välimuistiin jääneiden tietojen palauttamiseksi suorittimen käskyjen spekulatiivisen suorittamisen seurauksena. Toinen osa määrittää JavaScript-taulukon allokoinnissa käytettävän muistiasettelun.

Kolmas osa hyödyntää suoraan Spectre-haavoittuvuutta määrittääkseen nykyisen prosessin muistin sisällön luomalla olosuhteet tiettyjen toimintojen spekulatiiviselle suorittamiselle, jonka tuloksen prosessori hylkää epäonnistuneen ennusteen määrittämisen jälkeen, mutta suoritus suoritetaan jäljet ​​tallennetaan yleiseen välimuistiin, ja ne voidaan palauttaa käyttämällä menetelmiä, joilla määritetään välimuistin sisältö kolmannen osapuolen kanavilla, jotka analysoivat muutoksia välimuistissa olevien ja välimuistissa olevien tietojen käyttöajassa.

Ehdotettu hyödyntämistekniikka poistaa erittäin tarkat ajastimet, jotka ovat käytettävissä performance.now() API:n kautta, ilman tukea SharedArrayBuffer-tyypille, joka mahdollistaa taulukoiden luomisen jaettuun muistiin. Hyökkäys sisältää Spectre-gadgetin, joka saa aikaan hallitun spekulatiivisen koodin suorittamisen, sekä sivukanavan vuotoanalysaattorin, joka määrittää välimuistiin päässeet spekulatiivisen suorituksen aikana saadut tiedot.

Gadget on toteutettu JavaScript-taulukolla, jossa yritetään päästä puskurin rajojen ulkopuoliselle alueelle, joka vaikuttaa haaran ennustuslohkon tilaan kääntäjän (prosessori, eteenpäin katsoen) lisäämän puskurin koon tarkistuksen vuoksi. , suorittaa spekulatiivisesti pääsyn, mutta palauttaa tilan tarkistuksen jälkeen). Välimuistin sisällön analysoimiseksi riittämättömän ajastimen tarkkuuden olosuhteissa ehdotetaan menetelmää, joka pettää prosessoreissa käytettävän Tree-PLRU-välimuistin häätöstrategian ja mahdollistaa jaksojen lukumäärää lisäämällä huomattavasti aikaeroa palautettaessa arvo välimuistista ja kun välimuistissa ei ole arvoa.

On huomattava, että Google julkaisi prototyypin hyväksikäytön osoittaakseen Spectre-luokan haavoittuvuuksia käyttävien hyökkäysten realistisuuden ja rohkaistakseen verkkokehittäjiä käyttämään tekniikoita, jotka minimoivat tällaisten hyökkäysten riskit. Samaan aikaan Google uskoo, että ilman ehdotetun prototyypin merkittävää tarkistamista on mahdotonta luoda universaaleja hyödykkeitä, jotka ovat valmiita paitsi esittelyyn myös laajaan käyttöön.

Riskien vähentämiseksi sivustojen omistajia kehotetaan käyttämään äskettäin käyttöön otettua 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 ja SameSite-evästeet. Nämä mekanismit eivät suojaa suoraan hyökkäyksiltä, ​​mutta mahdollistavat sivustotietojen eristämisen vuodosta prosesseihin, joissa hyökkääjän JavaScript-koodi voidaan suorittaa (vuoto tapahtuu nykyisen prosessin muistista, jossa hyökkääjän koodin lisäksi tietoja toisesta samassa välilehdessä avatusta sivustosta). Pääideana on erottaa eri prosesseissa sivustokoodin suorittaminen epäluotettavista lähteistä saadusta kolmannen osapuolen koodista, esimerkiksi iframe-kehyksen kautta.



Lähde: opennet.ru

Lisää kommentti