APIC/EPIC! Intel-sirut vuotavat salaisuuksia, joita edes ytimen ei pitäisi nähdä… PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

APIC/EPIC! Intel-sirut vuotavat salaisuuksia, joita edes ytimen ei pitäisi nähdä…

Tässä on tämän viikon BWAIN, hauska termimme a Bugi vaikuttavalla nimellä.

BWAIN on tunnustus, jonka jaamme, kun uusi kyberturvallisuusvika ei vain osoittautunut kiinnostavaksi ja tärkeäksi, vaan myös ilmaantuu omalla logollaan, verkkotunnuksellaan ja verkkosivustollaan.

Tämä on dubattu ÆPIC Vuoto, sanapeli APIC ja EPIC.

Edellinen on lyhenne sanoista Kehittynyt ohjelmoitava keskeytysohjain, ja jälkimmäinen on yksinkertaisesti sana "eeppinen", kuten jättiläinen, massiivinen, äärimmäinen, mega, hirveä.

Kirjainta Æ ei ole käytetty kirjallisessa englannissa sitten Saksin ajan. Sen nimi on æsc, lausutaan tuhka (kuten puussa), ja se edustaa melko pitkälti A:n ääntä nykyaikaisessa sanassa ASH. Mutta oletamme, että sinun pitäisi lausua sana ÆPIC tässä joko nimellä "APIC-slash-EPIC" tai "ah!-eh?-PIC".

Mistä siinä kaikessa on kyse?

Kaikki tämä herättää viisi kiehtovaa kysymystä:

  • Mikä on APIC, ja miksi tarvitsen sitä?
  • Miten sinulla voi olla sellaista dataa jopa ydin ei voi kurkistaa?
  • Mistä tämä eeppinen epäonnistuminen johtuu APIC:ssä?
  • Onko ÆPIC Vuoto vaikuttaa minuun?
  • Mitä tehdä siitä?

Mikä on APIC?

Palataanpa takaisin vuoteen 1981, jolloin IBM PC ilmestyi ensimmäisen kerran.

PC sisälsi sirun nimeltä Intel 8259A ohjelmoitava keskeytysohjaintai PIC. (Myöhemmissä malleissa, PC AT:stä eteenpäin, oli kaksi PIC-korttia, jotka oli ketjutettu yhteen, tukemaan useampia keskeytystapahtumia.)

PIC:n tarkoitus oli kirjaimellisesti keskeyttää tietokoneen keskusprosessorilla (CPU) käynnissä oleva ohjelma aina, kun tapahtui jotain aikakriittistä, joka vaati heti huomiota.

Nämä laitteistokeskeytykset sisälsivät tapahtumia, kuten: näppäimistö saa näppäinpainalluksen; sarjaportti vastaanottaa merkin; ja toistuva laitteistoajastin tikittää.

Ilman tämänkaltaista laitteiston keskeytysjärjestelmää käyttöjärjestelmän pitäisi olla täynnä toimintokutsuja saapuvien näppäinpainallusten tarkistamiseksi säännöllisesti, mikä olisi suorittimen tehon tuhlausta, kun kukaan ei kirjoittaisi, mutta ei reagoiisi. tarpeeksi kun he tekivät.

Kuten voit kuvitella, PIC:tä seurasi pian päivitetty siru nimeltä APIC, kehittynyt eräänlainen PIC, joka on rakennettu itse suorittimeen.

Nykyään APIC:t tarjoavat paljon muutakin kuin vain palautetta näppäimistöltä, sarjaportilta ja järjestelmäajastimelta.

APIC-tapahtumat laukaisevat (ja tarjoavat reaaliaikaista tietoa) tapahtumista, kuten ylikuumenemisesta, ja mahdollistavat laitteiston vuorovaikutuksen eri ytimien välillä nykyaikaisissa moniytimisissä prosessoreissa.

Ja nykypäivän Intel-sirut, jos voimme hyvin yksinkertaistaa, voidaan yleensä konfiguroida toimimaan kahdella eri tavalla, ns. xAPIC-tila ja x2APIC-tila.

Täällä xAPIC on "vanha" tapa poimia tietoja keskeytysohjaimesta, ja x2APIC on nykyaikaisempi tapa.

Yksinkertaistaen vielä entisestään, xAPIC luottaa siihen, mitä kutsutaan MMIO, lyhenne jstk muistikartoitettu tulo/lähtö, tietojen lukemiseen APIC:stä, kun se rekisteröi kiinnostavan tapahtuman.

MMIO-tilassa voit selvittää, mikä laukaisi APIC-tapahtuman, lukemalla tietystä muistialueesta (RAM), joka peilaa itse APIC-sirun tulo-/lähtörekisterit.

Nämä xAPIC-tiedot on yhdistetty 4096-tavuiseen muistilohkoon jossain tietokoneen fyysisessä RAM-muistissa.

Tämä yksinkertaistaa tietojen käyttöä, mutta vaatii ärsyttävää, monimutkaista (ja kuten tulemme näkemään, mahdollisesti vaarallista) vuorovaikutusta APIC-sirun ja järjestelmämuistin välillä.

Sitä vastoin x2APIC vaatii sinua lukea APIC-tiedot suoraan itse sirusta käyttämällä ns Mallikohtaiset rekisterit (MSR:t).

Intelin mukaan prosessin MMIO-osan välttäminen "tarjoaa huomattavasti paremman prosessorin osoitettavuuden ja joitain parannuksia keskeytystoimitukseen."

Erityisesti APIC-tietojen purkaminen suoraan sirujen rekistereistä tarkoittaa, että tuetun tiedon kokonaismäärä ja samanaikaisesti hallittavissa olevien CPU-ytimien enimmäismäärä ei rajoitu MMIO-tilassa käytettävissä olevaan 4096 tavuun.

Kuinka sinulla voi olla tietoja, joita edes ydin ei voi kurkistaa?

Olet todennäköisesti jo arvannut, että xAPIC-tilassa MMIO-muistialueelle päätyviä tietoja ei aina hallita niin huolellisesti kuin pitäisi…

…ja siten jonkinlainen "tietovuoto" tälle MMIO-alueelle on tämän ongelman ydin.

Mutta koska sinä tarvitsevat jo sysadmin-tason valtuudet lukea MMIO-tiedot alun perin, ja siksi voit melkein varmasti saada mitä tahansa ja kaikki tiedot muistista joka tapauksessa…

…miksi se, että muiden ihmisten tiedot näkyvät vahingossa APIC MMIO -tietoalueella, tarkoittaisi? eepos vuotaa?

Se saattaa helpottaa jonkin tyyppisiä datan varastamista tai RAM-muistia kaapivia hyökkäyksiä käytännössä, mutta se ei varmastikaan antaisi sinulle enää teoriassa jo olemassa olevaa muistin haukkumiskykyä?

Valitettavasti tämä oletus ei pidä paikkaansa, jos jokin järjestelmän ohjelmisto käyttää Intelin SGX:tä, lyhenne sanoista Software Guard -laajennukset.


LUE LISÄÄ SGX:stä


Monet viimeaikaiset Intel-suorittimet tukevat SGX:ää, ja se tarjoaa käyttöjärjestelmän ytimelle tavan "sulkea" koodi- ja datapala fyysiseen RAM-lohkoon muodostaen niin sanotun erillisalueen.

Tämä saa sen käyttäytymään ainakin tilapäisesti samalla tavalla kuin matkapuhelimien erityiset suojapiirit, joita käytetään salaisuuksien, kuten salauksenpurkuavaimien, tallentamiseen.

Kun erillisalueen SGX-lukko on asetettu, vain suljetun muistialueen sisällä oleva ohjelmakoodi voi lukea ja kirjoittaa kyseisen RAM-muistin sisältöä.

Tämän seurauksena enklaaven aktivoinnin jälkeen tapahtuvien laskelmien sisäiset yksityiskohdat ovat näkymättömiä muille järjestelmän koodille, säikeelle, prosessille tai käyttäjälle.

Mukaan lukien itse ydin.

On olemassa tapa kutsua koodia, joka on suljettu erillisalueeseen, ja tapa palauttaa mahdollisesti suorittamiensa laskutoimitusten tulos, mutta koodia ei voi palauttaa, vakoilla tai virheenkorjata. siihen liittyvät tiedot sen ollessa käynnissä.

Enklaavi muuttuu tehokkaasti mustaksi laatikoksi, johon voit syöttää syötteitä, kuten yksityisellä avaimella allekirjoitettavia tietoja, ja poimia ulostuloja, kuten luodun digitaalisen allekirjoituksen, mutta josta et voi räjäyttää salausavaimia käytetään allekirjoitusprosessissa.

Kuten voit kuvitella, jos SGX-enklaaven sisällä sinetöidyn tiedot joutuvat vahingossa päällekkäin MMIO-RAM-muistiin, jota käytetään APIC-tietojen "peilaamiseen", kun käytät xAPIC-muistikartoitettua tilaa…

…joka loukkaisi SGX:n turvallisuutta, joka sanoo, ettei SGX-enklaavista saa koskaan tulla mitään tietoja sen luomisen jälkeen, ellei sitä ole tarkoituksellisesti viety koodilla, joka on jo käynnissä itse erillisalueessa.

Mikä aiheuttaa tämän eeppisen epäonnistumisen APIC:ssä?

Tutkijat taustalla ÆPIC Vuotavaa paperia havaitsi, että järjestämällä APIC-tietojen lukemisen ovelan ja epätavallisen muistin käyttöjakson kautta…

…he voisivat huijata prosessorin täyttämään APIC MMIO -tilan, ei vain itse APIC:ltä juuri saaduilla tiedoilla, vaan myös tiedoilla, joita CPU on äskettäin käyttänyt johonkin muuhun tarkoitukseen.

Tämä käyttäytyminen on sivuvaikutus siitä, että vaikka APIC MMIO -muistisivu on kooltaan 4096 tavua, APIC-siru xAPIC-tilassa ei itse asiassa tuota 4096 tavua dataa, eikä suoritin aina neutraloi oikein. MMIO-alueen käyttämättömät osat täyttämällä se ensin nolilla.

Sen sijaan prosessorin välimuistiin jääneet vanhat tiedot kirjoitettiin ulos itse APIC-sirun uusien tietojen kanssa.

Kuten tutkijat sanoivat, vika tiivistyy ns alustamaton muistin luku, jossa käytät vahingossa uudelleen jonkun muun RAM-muistiin jääneitä tietoja, koska he tai sinä et ole tyhjentänyt sitä aiemmista salaisuuksistaan ​​ensin.

Vaikuttaako ÆPIC-vuoto minuun?

Täydellinen luettelo vaikuttavista siruista on kohdassa Intelin oma neuvonta.

Sikäli kuin voimme kertoa, jos sinulla on 10. tai 11. sukupolven Intel-prosessori, se todennäköisesti vaikuttaa sinuun.

Mutta jos sinulla on upouusi 12. sukupolven CPU (viimeisin kirjoitushetkellä), vaikuttaa siltä, ​​että se vaikuttaa vain palvelinluokan siruihin.

Ironista kyllä, 12. sukupolven kannettavien tietokoneiden siruissa Intel on luopunut SGX:stä, joten tämä virhe ei koske, koska on mahdotonta saada "sinetöityjä" SGX-alueita, jotka voisivat vuotaa.

Tietenkin jopa mahdollisesti haavoittuvassa sirussa, jos et luota mihinkään SGX:ää käyttävään ohjelmistoon, vika ei myöskään päde.

Ja bugi, dubattu CVE-2022-21233, vain hyökkääjä, jolla on jo paikallinen järjestelmänvalvojatason (root) käyttöoikeus tietokoneellesi, voi käyttää hyväkseen.

Tavalliset käyttäjät ei pääse käsiksi APIC MMIO -tietolohkoon, joten heillä ei ole mahdollisuutta kurkistaa siellä mitään, puhumattakaan salaisista tiedoista, jotka ovat saattaneet vuotaa SGX-enklaavista.

Myös, vierailevat virtuaalikoneet (VM), jotka toimivat isäntäkäyttöjärjestelmän hallinnassa hypervisorissa, kuten HyperV, VMWare tai VirtualBox, eivät läheskään varmasti voi käyttää tätä temppua salaisuuksien ryöstämiseen muilta vierailta tai itse isännältä.

Tämä johtuu siitä, että vieras-VM:t eivät yleensä pääse käsiksi isäntäprosessorin todellisiin APIC-piireihin. Sen sijaan jokainen vieras saa oman simuloidun APIC:n, joka on ainutlaatuinen kyseiselle VM:lle.

Mitä tehdä?

Älä hätää.

Kannettavassa tai pöytätietokoneessa et ehkä ole vaarassa ollenkaan, joko siksi, että sinulla on vanhempi (tai, onneksi, upouusi!) tietokone tai koska et kuitenkaan luota SGX:ään.

Ja vaikka olisitkin vaarassa, kenellä tahansa, joka päätyy kannettavaan tietokoneeseesi järjestelmänvalvojana/root-käyttäjänä, on luultavasti tarpeeksi voimaa aiheuttaakseen sinulle jo nyt ongelmia.

Jos sinulla on haavoittuvia palvelimia ja luotat SGX:ään osana käyttöturvallisuuttasi, tarkista Intelin tietoturvatiedote INTEL-SA-00657 suojelua ja lieventämistä koskevia tietoja varten.

Tämän kirjoittaneiden tutkijoiden mukaan "Intel [on] julkaissut mikrokoodi- ja SGX Software Development Kit -päivitykset korjatakseen ongelman."

Linux-ytimen tiimi näyttää myös työskentelevän tällä hetkellä korjaustiedoston parissa, jonka avulla voit määrittää järjestelmäsi niin, että se käyttää aina x2APIC-koodia (joka, kuten muistat aiemmasta, ei lähetä APIC-tietoja jaetun muistin kautta). ja estää sulavasti järjestelmän pakottamisen takaisin xAPIC-tilaan käynnistyksen jälkeen.


Aikaleima:

Lisää aiheesta Naked Security