Miten Spectre Ja Meltdown Hacks todella toimivat

tekijä Nael Abu-Ghazaleh, Dmitry Ponomarev ja Dmitry Evtyushkin

lähetetty 2019-02-28 16: 00 GMT

syvällinen katsaus näihin mikroprosessorihaavoittuvuuksien vaarallisiin hyväksikäyttöihin ja siihen, miksi niitä saattaa olla enemmän olemassa

kuvitus: Erik Vrielink
/image/MzIzODU1Mw.jpeg
kuvituskuva: Erik Vrielink

olemme tottuneet ajattelemaan tietokoneen suorittimia järjestyksellisinä koneina, jotka etenevät yksinkertaisesta ohjeesta toiseen täysin säännönmukaisesti. Mutta totuus on, että he ovat jo vuosikymmeniä tehneet tehtäviään epäkunnossa ja vain arvailleet, mitä seuraavaksi pitäisi tulla. He ovat tietysti erittäin hyviä siinä. Itse asiassa niin hyvä, että tämä kyky, jota kutsutaan spekulatiiviseksi suoritukseksi, on tukenut suurta osaa laskentatehon parantumisesta viimeisten noin 25 vuoden aikana. Mutta 3. tammikuuta 2018 maailma sai tietää, että tämä temppu, joka oli tehnyt niin paljon nykyaikaisen tietojenkäsittelyn hyväksi, oli nyt yksi sen suurimmista haavoittuvuuksista.

koko vuoden 2017 Ajan Cyberus Technologyn, Google Project Zeron, Grazin teknillisen yliopiston, Rambusin, Adelaiden yliopiston ja Pennsylvanian yliopiston tutkijat sekä riippumattomat tutkijat kuten kryptografi Paul Kocher selvittivät erikseen hyökkäyksiä, joissa hyödynnettiin spekulatiivista toteutusta. Oma ryhmämme oli löytänyt alkuperäisen haavoittuvuuden yhden näistä hyökkäyksistä takana jo vuonna 2016, mutta emme saaneet kaikkia palasia kasaan.

tällaiset Meltdown-ja Spectre-nimiset hyökkäykset eivät olleet tavallisia bugeja. Löytöhetkellä Meltdown pystyi hakkeroimaan kaikki Intel x86-mikroprosessorit ja IBM: n Tehoprosessorit sekä jotkin ARM-pohjaiset suorittimet. Spectre ja sen monet muunnelmat lisäsivät kyseiseen luetteloon Advanced Micro Devices (AMD) – suorittimet. Toisin sanoen, lähes koko maailma computing oli haavoittuvainen.

ja koska spekulatiivinen toteutus on pitkälti leivottu prosessorilaitteistoon, näiden haavoittuvuuksien korjaaminen ei ole ollut helppoa. Tämä aiheuttamatta laskentanopeuksien jauhamista pienemmälle vaihteelle on tehnyt siitä vieläkin vaikeampaa. Itse asiassa vuoden kuluttua työ ei ole läheskään ohi. Tietoturvakorjauksia tarvittiin paitsi prosessorintekijöiltä myös alempien toimitusketjujen valmistajilta, kuten Applelta, Delliltä, Linuxilta ja Microsoftilta. Ensimmäiset tietokoneet powered by sirut, jotka on tarkoituksella suunniteltu kestämään jopa joitakin näistä haavoittuvuuksista saapui vasta äskettäin.

Spectre ja Meltdown ovat seurausta erosta sen välillä, mitä ohjelmiston oletetaan tekevän ja prosessorin mikroarkkitehtuurin-yksityiskohtien siitä, miten se todellisuudessa tekee nuo asiat. Nämä kaksi luokkaa hakata ovat paljastaneet tapa tietoa vuotaa kautta, että ero. Ja on täysi syy uskoa, että lisää keinoja paljastuu. Autoimme löytämään kaksi, Branchscopen ja SpectreRSB: n viime vuonna.

jos aiomme pitää tietojenkäsittelyn parannustahdin käynnissä tietoturvasta tinkimättä, meidän on ymmärrettävä, miten nämä laitteistohaavoittuvuudet tapahtuvat. Se alkaa Spectren ja Meltdownin ymmärtämisestä.

nykyaikaisissa tietojenkäsittelyjärjestelmissä ihmisen ymmärtämillä kielillä, kuten C++: lla, kirjoitetut ohjelmat kootaan assembly-language instructions-perustoiminnoiksi, joita tietokoneen suoritin voi suorittaa. Suorituksen nopeuttamiseksi nykyaikaiset suorittimet käyttävät menetelmää nimeltä putkitus. Kuten liukuhihna, putki on sarja vaiheita, joista jokainen on vaihe, joka tarvitaan loppuun opetusta. Tyypillisiä Intel x86-suorittimen vaiheita ovat ne, jotka tuovat käskyn muistiin ja purkavat sen ymmärtääkseen, mitä ohje tarkoittaa. Pipelining käytännössä tuo parallelismin alas opetuksen suorittamisen tasolle: kun yksi ohje tehdään käyttäen vaihetta, seuraava ohje on vapaa käyttämään sitä.

1990-luvulta lähtien mikroprosessorit ovat turvautuneet kahteen temppuun putkiprosessin nopeuttamiseksi: epäkunnossa olevaan toteutukseen ja spekulointiin. Jos kaksi ohjetta ovat toisistaan riippumattomia—eli yhden ulostulo ei vaikuta toisen syötteeseen—ne voidaan järjestää uudelleen ja niiden tulos on silti oikea. Se on hyödyllistä, koska sen avulla prosessori voi jatkaa toimintaansa, jos ohje pysähtyy putkistossa. Jos esimerkiksi ohje vaatii dataa, joka on DRAM-päämuistissa eikä itse suorittimessa sijaitsevassa välimuistissa, saattaa tiedon saaminen kestää muutaman sadan kellosyklin ajan. Odottelun sijaan prosessori voi siirtää putken läpi toisen ohjeen.

toinen temppu on spekulointi. Ymmärtääksesi sen aloita siitä, että jotkut ohjeet johtavat väistämättä muutokseen, jossa ohjeet tulevat seuraavaksi. Harkitse ohjelmaa, joka sisältää ”Jos” – lausekkeen: se tarkistaa ehdon, ja jos ehto on totta, suoritin hyppää toiseen paikkaan ohjelmassa. Tämä on esimerkki konditionaalisesta ohjeesta, mutta on olemassa myös muita ohjeita, jotka johtavat muutoksiin ohjevirrassa.

pohdi nyt, mitä tapahtuu, kun tällainen haarakonttorin ohje tulee putkistoon. Tilanne johtaa arvoitukseen. Kun ohje saapuu putken alkuun, tiedämme sen lopputuloksen vasta, kun se on edennyt melko syvälle putkistoon. Ja tietämättä tätä lopputulosta, emme voi hakea seuraavaa ohjetta. Yksinkertainen mutta naiivi ratkaisu on estää uusien ohjeiden pääsy putkistoon, kunnes haaratoimiston ohje saavuttaa pisteen, josta tiedämme, mistä seuraava ohje tulee. Monet kellosyklit menevät tässä prosessissa hukkaan, sillä putkistoissa on tyypillisesti 15-25 vaihetta. Mikä vielä pahempaa, haaratoimiston ohjeita tulee melko usein, ja niiden osuus on yli 20 prosenttia kaikista monien ohjelmien ohjeista.

jotta putkiston seisauttaminen ei aiheuttaisi suuria suorituskykykustannuksia, nykyaikaiset prosessorit käyttävät haaran ennustajaksi kutsuttua arkkitehtonista yksikköä arvaillakseen, mistä seuraava käsky haaran jälkeen tulee. Tämän ennusteen tarkoituksena on spekuloida parilla keskeisellä asialla. Ensin otetaan ehdollinen haara, joka saa ohjelman kääntymään toiseen osaan, vai jatkuuko se nykyisellä polulla? Ja toiseksi, jos haaratoimisto viedään, niin mihin ohjelma menee-mikä on seuraava ohje? Näillä ennusteilla prosessoriputki voidaan pitää täynnä.

koska käskytoteutus perustuu ennusteeseen, se toteutetaan ”spekulatiivisesti”: jos ennuste pitää paikkansa, suorituskyky paranee oleellisesti. Mutta jos ennustus osoittautuu virheelliseksi, prosessorin on kyettävä kumoamaan spekulatiivisesti toteutettujen ohjeiden vaikutukset suhteellisen nopeasti.

haarakonttorin suunnittelua on tutkittu tietokonearkkitehtuuriyhteisössä vankasti jo vuosien ajan. Nykyaikaiset ennustajat käyttävät suoritushistoriaa ohjelman sisällä tuloksiensa perustana. Tämä järjestelmä saavuttaa yli 95 prosentin tarkkuudet monissa erilaisissa ohjelmissa, mikä johtaa dramaattisiin suorituskyvyn parannuksiin verrattuna mikroprosessoriin, joka ei spekuloi. Virheselostus on kuitenkin mahdollinen. Valitettavasti Spectre-iskut käyttävät hyväkseen virhettä.

toinen ongelmiin johtanut keinottelun muoto on spekulointi yhden ohjeen sisällä valmisteilla. Se on aika vaikea käsite,joten puretaan se. Oletetaan, että ohje vaatii luvan suorittaa. Ohje voisi esimerkiksi ohjata tietokoneen kirjoittamaan tietomurron käyttöjärjestelmän ytimelle varattuun muistin osaan. Et haluaisi niin tapahtuvan, ellei käyttöjärjestelmä itse olisi hyväksynyt sitä, tai olisit vaarassa kaataa tietokoneen. Ennen Meltdownin ja Spectren löytymistä tavanomainen viisaus oli, että on OK alkaa suorittaa ohjetta spekulatiivisesti jo ennen kuin prosessori on saavuttanut pisteen, jossa se tarkistaa, onko ohjeella lupaa tehdä työnsä.

loppujen lopuksi, jos lupa ei täyty—esimerkissämme käyttöjärjestelmä ei ole hyväksynyt tätä yritystä näprätä muistiaan—tulokset heitetään ulos ja ohjelma osoittaa virheen. Yleensä prosessori voi spekuloida minkä tahansa ohjeen osan ympärillä, joka voi aiheuttaa sen odottamisen, edellyttäen, että ehto lopulta ratkeaa ja huonojen arvausten tulokset kumotaan tehokkaasti. Se on tämän tyyppinen intra-instruction keinottelu, joka on kaikkien Meltdown-bugin varianttien takana, mukaan lukien sen todennäköisesti vaarallisempi versio, ennakoi.

spekulaatiohyökkäykset mahdollistava oivallus on tämä: virheselostuksen aikana ei tapahdu mitään sellaista muutosta, jonka ohjelma voisi suoraan havaita. Toisin sanoen, ei ole ohjelmaa, jota voisit kirjoittaa, joka yksinkertaisesti näyttää kaikki spekulatiivisen suorituksen aikana luodut tiedot. Spekulointi jättää kuitenkin jälkiä vaikuttamalla siihen, kuinka kauan ohjeiden toteuttaminen kestää. Valitettavasti nyt on selvää, että voimme havaita nämä ajoitussignaalit ja poimia niistä salaisia tietoja.

mikä on tämä ajoitustieto, ja miten hakkeri saa sen käsiinsä? Ymmärtää, että, sinun täytyy ymmärtää käsite sivukanavien. Sivukanava on tahaton väylä, joka vuotaa tietoa yksiköstä toiseen (yleensä molemmat ovat ohjelmistoja), tyypillisesti yhteisen resurssin, kuten kiintolevyn tai muistin kautta.

esimerkkinä sivukanavahyökkäyksestä voidaan pitää laitetta, joka on ohjelmoitu kuuntelemaan tulostimesta lähtevää ääntä ja päättelemään tämän äänen avulla, mitä tulostetaan. Ääni on tässä tapauksessa sivukanava.

mikroprosessoreissa mitä tahansa jaettua laitteistoresurssia voidaan periaatteessa käyttää sivukanavana, joka vuotaa tietoa uhriohjelmasta hyökkääjäohjelmaan. Yleisesti käytössä olevassa sivukanavahyökkäyksessä jaettu resurssi on suorittimen välimuisti. Välimuisti on suhteellisen pieni, nopeasti käytettävä muisti prosessoripiirillä, jota käytetään ohjelman useimmin tarvitsemien tietojen tallentamiseen. Kun ohjelma käyttää muistia, prosessori tarkistaa ensin välimuistin; jos tiedot ovat siellä (välimuistin osuma), se otetaan talteen nopeasti. Jos tieto ei ole välimuistissa (huti), prosessori joutuu odottamaan, kunnes se noudetaan päämuistista, mikä voi kestää useita satoja kellosyklejä. Mutta kun data saapuu päämuistista, se lisätään välimuistiin, mikä voi vaatia muiden tietojen heittämistä ulos tehdäkseen tilaa. Välimuisti on jaettu segmentteihin, joita kutsutaan välimuistijoukoiksi, ja jokaisella päämuistin paikalla on vastaava joukko välimuistissa. Tämän organisaation avulla on helppo tarkistaa, onko kätkössä jotain ilman, että tarvitsee etsiä koko asiaa.

välimuistiin perustuvia hyökkäyksiä oli tutkittu laajasti jo ennen Spectren ja Meltdownin ilmestymistä paikalle. Vaikka hyökkääjä ei voi suoraan lukea uhrin tietoja—vaikka tiedot olisivat kätkön kaltaisessa jaetussa resurssissa—hyökkääjä voi saada tietoa muistiosoitteista, joihin uhri on päässyt käsiksi. Nämä osoitteet voivat riippua arkaluonteisista tiedoista, jolloin taitava hyökkääjä voi palauttaa nämä salaiset tiedot.

miten hyökkääjä tämän tekee? Mahdollisia tapoja on useita. Yksi muunnelma, nimeltään Flush and Reload, alkaa siitä, kun hyökkääjä poistaa välimuistista jaettuja tietoja käyttäen ”flush” – ohjetta. Hyökkääjä odottaa, että uhri pääsee käsiksi tietoihin. Koska se ei ole enää kätkössä, uhrin pyytämät tiedot pitää tuoda päämuistista. Myöhemmin hyökkääjä pääsee käsiksi jaettuun dataan ja ajoittaa samalla, kuinka kauan tämä kestää. Välimuistin osuma—eli tieto on taas kätkössä-osoittaa, että uhri pääsi käsiksi tietoihin. Välimuistin huti kertoo, ettei tietoihin ole päästy käsiksi. Joten yksinkertaisesti mittaamalla, kuinka kauan tietojen käyttö kesti, hyökkääjä voi määrittää, mihin välimuisteihin uhri pääsi käsiksi. Se vaatii hieman algoritmista magiaa, mutta tämä tieto siitä, mihin välimuistijoukkoihin päästiin käsiksi ja mihin ei, voi johtaa salausavainten ja muiden salaisuuksien löytymiseen.

Meltdown, Spectre ja niiden muunnelmat noudattavat kaikki samaa kaavaa. Ensin ne käynnistävät spekulaatiot hyökkääjän haluaman koodin toteuttamisesta. Koodi lukee salaisia tietoja ilman lupaa. Sitten hyökkäykset viestivät salaisuuden käyttäen Flushia ja Reloadia tai vastaavaa sivukanavaa. Tuo loppuosa on hyvin ymmärretty ja samanlainen kaikissa hyökkäysvariaatioissa. Näin ollen hyökkäykset eroavat toisistaan vain ensimmäisessä osassa, joka on miten käynnistää ja hyödyntää spekulointia.

img

Meltdown-iskut

Meltdown-iskut hyödyntävät spekulaatiota yhden ohjeen sisällä. Vaikka assembly-kieliset ohjeet ovat tyypillisesti yksinkertaisia, yksi ohje koostuu usein useista operaatioista, jotka voivat riippua toisistaan. Esimerkiksi muistinlukuoperaatiot ovat usein riippuvaisia siitä, mikä ohje täyttää luettavaan muistiosoitteeseen liittyvät oikeudet. Sovelluksella on yleensä lupa lukea vain sille osoitetusta muistista, ei esimerkiksi käyttöjärjestelmälle tai jonkun muun käyttäjän ohjelmalle osoitetusta muistista. Loogisesti, meidän pitäisi tarkistaa käyttöoikeudet ennen kuin sallimme lukemisen edetä, mikä on mitä jotkut mikroprosessorit, erityisesti AMD. Jos lopputulos on kuitenkin oikea, suorittimen suunnittelijat olettivat olevansa vapaita spekulatiivisesti suorittamaan nämä toiminnot epäkunnossa. Siksi Intelin mikroprosessorit lukevat muistin sijainnin ennen käyttöoikeuksien tarkistamista, mutta” toimittavat ” käskyn—jolloin tulokset näkyvät ohjelmalle—vasta kun käyttöoikeudet on täytetty. Mutta koska salaiset tiedot on haettu spekulatiivisesti, ne voidaan löytää sivukanavan avulla, mikä tekee Intelin prosessoreista haavoittuvaisia tälle hyökkäykselle.

ennakoiva hyökkäys on muunnelma Meltdown-haavoittuvuudesta. Tämä hyökkäys vaikuttaa Intelin mikroprosessoreihin heikkouden vuoksi, jota Intel kutsuu nimellä L1 Terminal Fault (L1TF). Siinä missä alkuperäinen Meltdown-hyökkäys perustui viiveeseen käyttöoikeuksien tarkistamisessa, ennakoi perustuu spekulaatioon, joka tapahtuu putken vaiheessa, jota kutsutaan osoitekäännökseksi.

ohjelmisto näkee tietokoneen muistin ja tallennusvarat omana yhtenäisenä virtuaalimuistin venymänä. Mutta fyysisesti nämä varat jaetaan ja jaetaan eri ohjelmien ja prosessien kesken. Osoitekäännös muuttaa virtuaalimuistiosoitteen fyysiseksi muistiosoitteeksi.

mikroprosessorin Erikoispiirit auttavat virtuaalisesta fyysiseen muisti-osoitekäännökseen, mutta se voi olla hidasta, vaatien useita muistihakuja. Asioiden nopeuttamiseksi Intelin mikroprosessorit sallivat keinottelun käännösprosessin aikana, jolloin ohjelma voi spekulatiivisesti lukea L1-nimisen välimuistin osan sisällön riippumatta siitä, kuka omistaa kyseisen datan. Hyökkääjä voi tehdä tämän, ja sitten paljastaa tiedot käyttämällä sivukanava lähestymistapa jo kuvattu.

jossain mielessä ennakointi on vaarallisempaa kuin sulaminen, toisissa se on vähemmän. Toisin kuin Meltdown, Forevow pystyy lukemaan vain L1-välimuistin sisällön, johtuen Intelin suorittimen arkkitehtuurin toteutuksen erityispiirteistä. Kuitenkin, ennakoida voi lukea mitä tahansa sisältöä L1—ei vain tietoja, joille ohjelma on osoitettu.

/image/MzIzODYyNw.jpeg

Spectre-hyökkäykset

Spectre-hyökkäykset manipuloivat haaran ennustusjärjestelmää. Tämä järjestelmä on kolme osaa: haara-suunta predictor, haara-kohde predictor, ja return pino puskuri.

haarasuuntaennustaja ennustaa, otetaanko ehdollinen haara, kuten sellainen, jota käytetään ”jos” – lausekkeen toteuttamiseen ohjelmointikielellä, vai ei. Voit tehdä tämän, se seuraa edellisen käyttäytymisen samankaltaisten haarojen. Se voi tarkoittaa esimerkiksi sitä, että jos oksa otetaan kaksi kertaa peräkkäin, niin tulevaisuuden ennusteiden mukaan se pitäisi ottaa.

haara-kohde-ennustaja ennustaa niin sanottujen epäsuorien haarojen kohdemuistiosoitteen. Ehdollisessa haarassa kirjoitetaan seuraavan ohjeen osoite, mutta epäsuorassa haarassa kyseinen osoite on laskettava ensin. Näitä tuloksia ennustava järjestelmä on haaran kohdepuskuriksi kutsuttu välimuistirakenne. Pohjimmiltaan se pitää kirjaa epäsuorien sivukonttoreiden viimeisestä laskennallisesta kohteesta ja käyttää näitä ennustaakseen, mihin seuraava epäsuora sivukonttori johtaisi.

paluupinopuskuria käytetään ”paluuohjeen” kohteen ennustamiseen. Kun aliohjelmaa ”kutsutaan” ohjelman aikana, palautusohje saa ohjelman jatkamaan työskentelyä kohdassa, josta aliohjelmaa kutsuttiin. Oikean paluupaikan ennustaminen pelkän aikaisemman palautusosoitteen perusteella ei onnistu, koska sama funktio voidaan kutsua koodin monista eri paikoista. Sen sijaan järjestelmä käyttää paluupinopuskuria, prosessorissa olevaa muistinpalaa, joka pitää funktioiden paluuosoitteet sellaisina kuin niitä kutsutaan. Sen jälkeen se käyttää näitä osoitteita, kun aliohjelman koodiin tulee palautus.

kutakin näistä kolmesta rakenteesta voidaan hyödyntää kahdella eri tavalla. Ensinnäkin ennustaja voidaan tahallaan vääristää. Tässä tapauksessa hyökkääjä suorittaa näennäisen viattoman koodin, joka on suunniteltu sotkemaan järjestelmää. Myöhemmin hyökkääjä teloittaa tahallaan haaran, joka määrittää väärin, jolloin ohjelma hyppää hyökkääjän valitsemaan koodinpätkään, jota kutsutaan gadgetiksi. Laite ryhtyy varastamaan tietoja.

toista Spektrihyökkäyksen tapaa kutsutaan suoraruiskutukseksi. Kävi ilmi, että joissakin olosuhteissa kolme ennustajaa jaetaan eri ohjelmien kesken. Tämä tarkoittaa, että hyökkäävä ohjelma voi täyttää predikaattorirakenteet tarkoin valituilla huonoilla tiedoilla suorittaessaan tehtäviään. Kun tietämätön uhri suorittaa ohjelmansa joko samaan aikaan hyökkääjän kanssa tai sen jälkeen, uhri päätyy käyttämään hyökkääjän täyttämää predictor-tilaa ja laukaisee tietämättään gadgetin. Tämä toinen hyökkäys on erityisen huolestuttava, koska se mahdollistaa uhriohjelman hyökkäyksen eri ohjelmasta. Tällainen uhka on erityisen vahingollinen pilvipalvelujen tarjoajille, koska ne eivät voi taata asiakastietojensa suojaamista.

Spectre – ja Meltdown-haavoittuvuudet aiheuttivat ongelmia tietotekniikkateollisuudelle, koska haavoittuvuus on peräisin laitteistosta. Joissakin tapauksissa paras, mitä voimme tehdä nykyisille järjestelmille—jotka muodostavat suurimman osan asennetuista palvelimista ja tietokoneista—on yrittää kirjoittaa ohjelmisto uusiksi yrittääkseen rajoittaa vahinkoa. Mutta nämä ratkaisut ovat ad hoc, epätäydellinen, ja usein johtaa suuri osuma tietokoneen suorituskykyä. Samaan aikaan tutkijat ja SUORITINSUUNNITTELIJAT ovat alkaneet miettiä, miten suunnitella tulevaisuuden suorittimia, jotka pitävät spekulaatiota yllä tietoturvasta tinkimättä.

yksi puolustus, jota kutsutaan kernel page-table isolationiksi (kpti) , on nyt rakennettu Linuxiin ja muihin käyttöjärjestelmiin. Muista, että jokainen sovellus näkee tietokoneen muistin ja tallennusvarat yhtenä yhtenäisenä virtuaalimuistin venymänä aivan omana. Mutta fyysisesti nämä varat jaetaan ja jaetaan eri ohjelmien ja prosessien kesken. Sivutaulukko on olennaisesti käyttöjärjestelmän kartta, joka kertoo sille, mitkä virtuaalimuistin osoitteen osat vastaavat mitäkin fyysisen muistin osoitetta. Ytimen sivutaulukko on vastuussa tämän tekemisestä käyttöjärjestelmän ytimelle. KPTI ja vastaavat järjestelmät puolustautuvat sulamista vastaan tekemällä muistiin tallennetut salaiset tiedot, kuten käyttöjärjestelmän, saavuttamattomiin käyttäjän ohjelman (ja mahdollisesti hyökkääjän ohjelman) ollessa käynnissä. Se tekee tämän poistamalla kielletyt osat sivu-taulukosta. Näin edes spekulatiivisesti toteutettu koodi ei pääse tietoihin käsiksi. Tämä ratkaisu merkitsee kuitenkin ylimääräistä työtä käyttöjärjestelmälle näiden sivujen kartoittamiseksi, kun se suorittaa ja poistaa ne jälkeenpäin.

toinen puolustusluokka antaa ohjelmoijille joukon työkaluja rajoittaa vaarallista spekulaatiota. Esimerkiksi Googlen Retpoline-korjaustiedosto kirjoittaa uudelleen sellaisia haaroja, jotka ovat alttiita Spectre Variant 2: lle, niin että se pakottaa spekulaatiot kohdistamaan hyvänlaatuisen, tyhjän gadgetin. Ohjelmoijat voivat myös lisätä assembly-kieliohjeen, joka rajoittaa Spectre v1: tä rajoittamalla spekulatiivisia muistilukuja, jotka seuraavat ehdollisia haaroja. Kätevästi tämä ohje on jo läsnä suoritinarkkitehtuurissa ja sitä käytetään valvomaan oikeaa järjestystä eri prosessoriytimistä peräisin olevien muistioperaatioiden välillä.

suoritinsuunnittelijoina Intelin ja AMD: n oli mentävä tavallista ohjelmistopäivitystä syvemmälle. Niiden korjaukset päivittävät prosessorin mikrokoodin. Mikrokoodi on ohjekerros, joka sopii tavallisen ohjelmiston kokoonpanokielen ja suorittimen varsinaisen piirin väliin. Mikrokoodi lisää joustavuutta prosessorin suorittamiin ohjeisiin. Se tekee suorittimen suunnittelusta myös yksinkertaisempaa, koska mikrokoodia käytettäessä monimutkaiset ohjeet käännetään useiksi yksinkertaisemmiksi ohjeiksi, jotka on helpompi suorittaa putkistossa.

käytännössä Intel ja AMD muokkasivat mikrokoodiaan muuttaakseen joidenkin assembly-kielisten ohjeiden käyttäytymistä keinottelua rajoittavilla tavoilla. Esimerkiksi Intelin insinöörit lisäsivät vaihtoehtoja, jotka häiritsevät osaa hyökkäyksistä antamalla käyttöjärjestelmän tyhjentää haaraa ennakoivat rakenteet tietyissä olosuhteissa.

eri luokan ratkaisuilla pyritään häiritsemään hyökkääjän kykyä välittää tietoa eteenpäin sivukanavia käyttäen. Esimerkiksi MIT: n DAWG-tekniikka jakaa prosessorin välimuistin turvallisesti niin, että eri ohjelmat eivät jaa sen resursseja. Kunnianhimoisinta on, että on ehdotuksia uusista suoritinarkkitehtuureista, jotka esittelisivät suorittimelle spekuloinnille omistettuja ja prosessorin välimuistista ja muusta laitteistosta erillisiä rakenteita. Näin operaatiot, jotka suoritetaan spekulatiivisesti, mutta joita ei lopulta tehdä, eivät koskaan näy. Jos spekulaatiotulos vahvistetaan, spekulatiiviset tiedot lähetetään käsittelijän päärakenteisiin.

Spekulaatiohaavoittuvuudet ovat olleet prosessoreissa lepotilassa yli 20 vuotta, ja ne ovat pysyneet, sikäli kuin kukaan tietää, hyödyntämättä. Niiden paljastuminen on ravistellut oleellisesti teollisuutta ja korostanut sitä, miten kyberturvallisuus ei ole ongelma vain ohjelmistojärjestelmille vaan myös laitteistoille. Alkuperäisen löydön jälkeen Spectrestä ja Meltdownista on paljastunut kymmenkunta muunnelmaa, joita on todennäköisesti enemmänkin. Spectre ja Meltdown ovat loppujen lopuksi sivuvaikutuksia keskeisistä suunnitteluperiaatteista, joihin olemme luottaneet parantaaksemme tietokoneen suorituskykyä, mikä vaikeuttaa tällaisten haavoittuvuuksien poistamista nykyisistä järjestelmämalleista. On todennäköistä, että uudet SUORITINMALLIT tulevat kehittymään keinottelun säilyttämiseksi ja samalla estämään tällaiset hyökkäykset mahdollistavan sivukanavavuodon. Tulevien tietokonejärjestelmien suunnittelijoiden, mukaan lukien prosessorisirujen suunnittelijoiden, on kuitenkin oltava tietoisia päätöksiensä turvallisuusvaikutuksista, eivätkä he enää optimoi vain suorituskykyä, kokoa ja tehoa.

tekijästä

Nael Abu-Ghazaleh on Kalifornian yliopiston, Riversiden, tietokonetekniikan ohjelman puheenjohtaja. Dmitry Evtyushkin on tietojenkäsittelytieteen apulaisprofessori William and Mary Collegessa Williamsburgissa, Va. Dmitry Ponomarev on tietojenkäsittelytieteen professori New Yorkin osavaltionyliopistossa Binghamtonissa.

tutkia edelleen

Paul Kocher ja muut tutkijat, jotka yhdessä paljastivat Spectren, selittivät sen ensin täällä . Moritz Lipp selitti sulamista puheessaan Usenix Security ’18: ssa. Esikuva esitettiin yksityiskohtaisesti samassa konferenssissa.

ryhmä tutkijoita, joiden joukossa on yksi kirjoittajista, on tehnyt systemaattisen arvion Spectre – ja Meltdown-hyökkäyksistä, jotka paljastavat lisää mahdollisia hyökkäyksiä . IBM: n insinöörit tekivät jotain vastaavaa, ja Googlen insinöörit tulivat hiljattain siihen tulokseen, että sivukanava-ja spekulatiiviset suoritushyökkäykset ovat tulleet jäädäkseen .

Vastaa

Sähköpostiosoitettasi ei julkaista.

More: