APIC/EPIC! Intelovi čipi razkrivajo skrivnosti, ki jih niti jedro ne bi smelo videti… PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

APIC/EPIC! Intelovi čipi razkrivajo skrivnosti, ki jih niti jedro ne bi smelo videti ...

Tukaj je BWAIN tega tedna, naš šaljivi izraz za a Napaka z impresivnim imenom.

BWAIN je priznanje, ki ga podelimo, ko se nova napaka kibernetske varnosti ne le izkaže za zanimivo in pomembno, ampak se pojavi tudi z lastnim logotipom, imenom domene in spletnim mestom.

Ta je sinhroniziran Puščanje ÆPIC, igra besed APIC in EPIC.

Prvo je okrajšava za Napredni programabilni krmilnik prekinitev, slednja pa je preprosto beseda "epski", kot v velikan, ogromen, ekstremna, mega, ogromno.

Črka Æ se v pisni angleščini ne uporablja že od saških časov. Njegovo ime je æsc, izrečeno pepel (kot pri drevesu) in v veliki meri predstavlja zvok črke A v sodobni besedi PEPEL. Predvidevamo pa, da bi morali besedo izgovoriti ÆPIC tukaj kot "APIC-slash-EPIC" ali kot "ah!-eh?-PIC".

Za kaj gre?

Vse to odpira pet fascinantnih vprašanj:

  • Kaj je APIC, in zakaj ga potrebujem?
  • Kako lahko imate te podatke celo jedro ne moreš pokukati?
  • Kaj povzroča ta epski neuspeh v APIC?
  • Ali Puščanje ÆPIC vpliva na mene?
  • Kaj storiti o tem?

Kaj je APIC?

Vrnimo se v leto 1981, ko se je prvič pojavil IBM PC.

Računalnik je vključeval čip, imenovan Programabilni prekinitveni krmilnik Intel 8259A, ali PIC. (Poznejši modeli, od PC AT naprej, so imeli dva PIC-ja, povezana skupaj, da podpirajo več prekinitvenih dogodkov.)

Namen PIC-a je bil dobesedno prekiniti program, ki se izvaja na osrednjem procesorju (CPE) osebnega računalnika, kadar koli se zgodi nekaj časovno kritičnega, kar zahteva takojšnjo pozornost.

Te prekinitve strojne opreme so vključevale dogodke, kot so: tipkovnica prejme pritisk tipke; serijska vrata, ki sprejemajo znak; in ponavljajoči se časovnik strojne opreme.

Brez tovrstnega sistema prekinitev strojne opreme bi moral biti operacijski sistem poln funkcijskih klicev, da bi redno preverjal dohodne pritiske na tipke, kar bi bila izguba energije procesorja, ko nihče ne tipka, vendar ne bi bil odziven dovolj, ko so.

Kot si lahko predstavljate, je PIC kmalu sledil nadgrajen čip, imenovan APIC, napredno nekakšen PIC, vgrajen v sam CPE.

Danes APIC-ji zagotavljajo veliko več kot le povratne informacije s tipkovnice, serijskih vrat in sistemskega časovnika.

Dogodke APIC sprožijo (in zagotavljajo podatke v realnem času) dogodki, kot je pregrevanje, in omogočajo strojno interakcijo med različnimi jedri v sodobnih večjedrnih procesorjih.

In današnje Intelove čipe, če jih lahko zelo poenostavimo, lahko na splošno konfiguriramo za delovanje na dva različna načina, znana kot način xAPIC in način x2APIC.

Tu xAPIC je "podedovan" način pridobivanja podatkov iz krmilnika prekinitev in x2APIC je sodobnejši način.

Če še bolj poenostavimo, xAPIC temelji na tako imenovanem MMIO, kratek za pomnilniško preslikan vhod/izhod, za branje podatkov iz APIC, ko registrira zanimiv dogodek.

V načinu MMIO lahko ugotovite, kaj je sprožilo dogodek APIC, tako da preberete iz določene regije pomnilnika (RAM), ki zrcali vhodne/izhodne registre samega čipa APIC.

Ti podatki xAPIC so preslikani v 4096-bajtni pomnilniški blok nekje v fizičnem RAM-u računalnika.

To poenostavi dostop do podatkov, vendar zahteva nadležno, zapleteno (in, kot bomo videli, potencialno nevarno) interakcijo med APIC čipom in sistemskim pomnilnikom.

Nasprotno pa x2APIC to zahteva od vas neposredno prebrati podatke APIC iz samega čipa, z uporabo tako imenovanih Registri, specifični za model (MSR).

Po mnenju Intela izogibanje delu procesa MMIO "zagotavlja znatno povečano naslovljivost procesorja in nekatere izboljšave pri dostavi prekinitev."

Predvsem pridobivanje podatkov APIC neposredno iz registrov na čipu pomeni, da skupna količina podprtih podatkov in največje število jeder CPU, ki jih je mogoče upravljati hkrati, nista omejena na 4096 bajtov, ki so na voljo v načinu MMIO.

Kako lahko imate podatke, v katere ne more pokukati niti jedro?

Verjetno ste že uganili, da podatki, ki končajo v pomnilniškem območju MMIO, ko uporabljate način xAPIC, niso vedno tako skrbno upravljani, kot bi morali biti ...

... in zato je nekakšno "puščanje podatkov" v to področje MMIO srce te težave.

Ampak glede na to, da ti že potrebujejo pooblastila na ravni sistemskega skrbnika najprej prebrati podatke MMIO, zato bi lahko tako ali tako skoraj zagotovo dobili vse in vse podatke v pomnilniku ...

… zakaj bi to, da bi se podatki drugih ljudi pomotoma prikazali v podatkovnem območju APIC MMIO, predstavljalo Epski puščati?

To bi lahko v praksi nekoliko olajšalo nekatere vrste napadov kraje podatkov ali strganja pomnilnika RAM, vendar vam zagotovo ne bi dalo več zmožnosti vohljanja po pomnilniku, ki ste jo v teoriji že imeli?

Na žalost ta predpostavka ne drži, če katera koli programska oprema v sistemu uporablja Intelov SGX, okrajšava za Razširitve programske zaščite.


VEČ O SGX


SGX podpirajo številni najnovejši procesorji Intel in zagotavlja način, da jedro operacijskega sistema "zapre" kos kode in podatkov v fizični blok RAM-a, tako da tvori tako imenovano enklavo.

Zaradi tega se vsaj začasno obnaša podobno kot posebni varnostni čipi v mobilnih telefonih, ki se uporabljajo za shranjevanje skrivnosti, kot so ključi za dešifriranje.

Ko je enklava »zaklepanje« SGX nastavljena, lahko samo programska koda, ki se izvaja znotraj zaprtega pomnilniškega območja, bere in piše vsebino tega RAM-a.

Posledično so notranje podrobnosti vseh izračunov, ki se zgodijo po aktiviranju enklave, nevidne nobeni drugi kodi, niti, procesu ali uporabniku v sistemu.

Vključno s samim jedrom.

Obstaja način, da pokličete kodo, ki je bila zaprta v enklavo, in način, da vrne rezultate izračunov, ki jih lahko izvede, vendar ni možnosti, da bi obnovili, vohunili ali razhroščevali kodo in njegove povezane podatke med izvajanjem.

Enklava se dejansko spremeni v črno skrinjico, v katero lahko dovajate vnose, kot so podatki, ki jih želite podpisati z zasebnim ključem, in ekstrahirate izhode, kot je ustvarjen digitalni podpis, iz katere pa ne morete odstraniti kriptografskih ključev. uporabljeno v postopku podpisovanja.

Kot si lahko predstavljate, če bi se podatki, ki naj bi bili zapečateni znotraj enklave SGX, kdaj pomotoma podvojili v MMIO RAM, ki se uporablja za "zrcaljenje" podatkov APIC, ko uporabljate način "preslikave pomnilnika" xAPIC ...

... to bi kršilo varnost SGX, ki pravi, da nobeni podatki ne smejo izhajati iz enklave SGX, potem ko je bila ustvarjena, razen če so namerno izvoženi s kodo, ki se že izvaja v sami enklavi.

Kaj povzroča to epsko napako v APIC?

Raziskovalci, ki stojijo za Papir za puščanje ÆPIC odkrili, da z ureditvijo branja podatkov APIC prek zvitega in nenavadnega zaporedja dostopov do pomnilnika ...

... lahko pretentajo procesor, da zapolni prostor APIC MMIO ne le s podatki, ki so bili pravkar prejeti iz APIC samega, ampak tudi s podatki, ki jih je CPE pravkar uporabil pred kratkim za druge namene.

To vedenje je stranski učinek dejstva, da čeprav je pomnilniška stran APIC MMIO velika 4096 bajtov, čip APIC v načinu xAPIC dejansko ne proizvede podatkov v vrednosti 4096 bajtov in CPE ne nevtralizira vedno pravilno neuporabljene dele regije MMIO tako, da jih najprej napolnite z ničlami.

Namesto tega so bili stari podatki, ki so ostali v predpomnilniku procesorja, izpisani skupaj z novimi podatki, prejetimi iz samega čipa APIC.

Kot pravijo raziskovalci, se napaka skrči na tisto, kar je znano kot branje neinicializiranega pomnilnika, kjer pomotoma ponovno uporabite ostanke podatkov nekoga drugega v RAM-u, ker jih niti oni niti vi niste najprej splaknili prejšnjih skrivnosti.

Ali puščanje ÆPIC vpliva name?

Za celoten seznam prizadetih čipov glejte Intelovo lastno svetovanje.

Kolikor lahko ugotovimo, ste verjetno prizadeti, če imate procesor Intel 10. ali 11. generacije.

Toda če imate popolnoma nov CPE 12. generacije (najnovejši v času pisanja), se zdi, da so prizadeti samo čipi strežniškega razreda.

Ironično je, da je Intel pri čipih za prenosne računalnike 12. generacije opustil SGX, zato ta napaka ne velja, ker je nemogoče imeti kakršne koli "zapečatene" enklave SGX, ki bi lahko uhajale.

Seveda tudi na potencialno ranljivem čipu, če se ne zanašate na nobeno programsko opremo, ki uporablja SGX, tudi napaka ne velja.

In hrošč, sinhroniziran CVE-2022-21233, lahko izkoristi le napadalec, ki že ima lokalni skrbniški (root) dostop do vašega računalnika.

Redni uporabniki ne morejo dostopati do podatkovnega bloka APIC MMIO in zato nimajo možnosti pokukati v karkoli tam, kaj šele v tajne podatke, ki bi lahko ušli iz enklave SGX.

Torej, gostujoči virtualni stroji (VM), ki tečejo pod nadzorom gostiteljskega operacijskega sistema v hipervizorju, kot je HyperV, VMWare ali VirtualBox, skoraj zagotovo ne morejo uporabiti tega trika za ropanje skrivnosti drugih gostov ali samega gostitelja.

To je zato, ker gostujoči VM na splošno nimajo dostopa do pravega vezja APIC v gostiteljskem procesorju; namesto tega vsak gost dobi svoj simulirani APIC, ki je edinstven za ta VM.

Kaj storiti?

Ne paničite.

Na prenosnem ali namiznem računalniku morda sploh niste ogroženi, bodisi zato, ker imate starejši (ali, na vašo srečo, popolnoma nov!) računalnik, bodisi zato, ker se vseeno ne zanašate na SGX.

In tudi če ste tvegani, ima vsakdo, ki vstopi v vaš prenosnik kot skrbnik/root, verjetno dovolj moči, da vam že povzroči veliko težav.

Če imate ranljive strežnike in se zanašate na SGX kot del svoje operativne varnosti, preverite Intelovo varnostno svetovanje INTEL-SA-00657 za informacije o zaščiti in ublažitvi.

Po mnenju raziskovalcev, ki so to napisali, »Intel [je] izdal posodobitve mikrokode in kompleta za razvoj programske opreme SGX za odpravo težave.«

Zdi se, da ekipa za jedro Linux prav zdaj dela na popravku, ki vam bo omogočil, da konfigurirate svoj sistem tako, da bo vedno uporabljal x2APIC (ki, kot se spomnite od prej, ne prenaša podatkov APIC prek skupnega pomnilnika), in bo elegantno preprečil, da bi bil sistem po zagonu prisiljen vrniti v način xAPIC.


Časovni žig:

Več od Gola varnost