APIC/EPIC! Cipurile Intel scurg secrete pe care nici măcar nucleul nu ar trebui să le vadă... PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

APIC/EPIC! Cipurile Intel scurg secrete pe care nici măcar nucleul nu ar trebui să le vadă...

Iată BWAIN de săptămâna aceasta, termenul nostru glumeț pentru a Bug cu un nume impresionant.

BWAIN este o distincție pe care o acordăm atunci când o nouă defecțiune de securitate cibernetică nu numai că se dovedește a fi interesantă și importantă, dar apare și cu propriul logo, nume de domeniu și site web.

Acesta este dublat Scurgere ÆPIC, un joc de cuvinte cu cuvintele APIC și EPIC.

Primul este prescurtarea pentru Controller de întrerupere programabil avansat, iar acesta din urmă este pur și simplu cuvântul „epic”, ca în gigant, masiv, extremă, Mega, umilă.

Litera Æ nu a fost folosită în limba engleză scrisă din vremea sașilor. Numele lui este æsc, pronunțat cenuşă (ca în copac) și reprezintă destul de mult sunetul A în cuvântul modern ASH. Dar presupunem că ar trebui să pronunți cuvântul ÆPIC aici fie ca „APIC-slash-EPIC”, fie ca „ah!-eh?-PIC”.

Despre ce e vorba?

Toate acestea ridică cinci întrebări fascinante:

  • Ce este un APICși de ce am nevoie de el?
  • Cum poți avea date care chiar și miezul nu te poți uita la?
  • Ce cauzează acest eșec epic în APIC?
  • Îmi place Scurgere ÆPIC ma afecteaza?
  • Ce sa fac despre?

Ce este un APIC?

Să revenim în 1981, când a apărut pentru prima dată IBM PC.

PC-ul includea un cip numit Controler de întrerupere programabil Intel 8259A, sau PIC. (Modelele ulterioare, de la PC AT încoace, au avut două PIC-uri, legate împreună, pentru a suporta mai multe evenimente de întrerupere.)

Scopul PIC-ului a fost literalmente de a întrerupe programul care rulează pe procesorul central (CPU) al PC-ului ori de câte ori avea loc ceva critic în timp care necesita atenție imediată.

Aceste întreruperi hardware au inclus evenimente precum: tastatura primește o apăsare a tastei; portul serial care primește un caracter; și un temporizator hardware care se repetă.

Fără un sistem de întrerupere hardware de acest fel, sistemul de operare ar trebui să fie plin de apeluri de funcții pentru a verifica în mod regulat apăsările de taste primite, ceea ce ar fi o risipă de putere a procesorului atunci când nimeni nu tasta, dar nu ar răspunde. destul când au făcut-o.

După cum vă puteți imagina, PIC-ul a fost urmat în curând de un cip modernizat numit APIC, O avansat un fel de PIC integrat în procesorul însuși.

În zilele noastre, APIC-urile oferă mult mai mult decât doar feedback de la tastatură, portul serial și temporizatorul de sistem.

Evenimentele APIC sunt declanșate de (și oferă date în timp real despre) evenimente precum supraîncălzirea și permit interacțiunea hardware între diferitele nuclee din procesoarele multicore contemporane.

Și cipurile Intel de astăzi, dacă ne putem simplifica foarte mult, pot fi, în general, configurate să funcționeze în două moduri diferite, cunoscute sub numele de modul xAPIC și Modul x2APIC.

Aici, xAPIC este modalitatea „moștenită” de extragere a datelor de la controlerul de întrerupere și x2APIC este modul mai modern.

Simplificand și mai mult, xAPIC se bazează pe ceea ce se numește MMIO, scurt pentru intrare/ieșire mapată în memorie, pentru citirea datelor din APIC atunci când acesta înregistrează un eveniment de interes.

În modul MMIO, puteți afla ce a declanșat un eveniment APIC citind dintr-o anumită regiune a memoriei (RAM), care oglindește registrele de intrare/ieșire ale cipulului APIC însuși.

Aceste date xAPIC sunt mapate într-un bloc de memorie de 4096 de octeți undeva în memoria RAM fizică a computerului.

Acest lucru simplifică accesarea datelor, dar necesită o interacțiune enervantă, complexă (și, după cum vom vedea, potențial periculoasă) între cipul APIC și memoria sistemului.

În schimb, x2APIC vă cere citiți direct datele APIC de la cip în sine, folosind ceea ce sunt cunoscute ca Registre specifice modelului (MSR-uri).

Potrivit Intel, evitând partea MMIO a procesului „oferă o adresabilitate semnificativ crescută a procesorului și unele îmbunătățiri la livrarea întreruperilor.”

În special, extragerea datelor APIC direct din registrele de pe cip înseamnă că cantitatea totală de date acceptată și numărul maxim de nuclee CPU care pot fi gestionate în același timp nu se limitează la cei 4096 de octeți disponibili în modul MMIO.

Cum poți avea date pe care nici măcar nucleul nu le poate arunca cu ochiul?

Probabil ați ghicit deja că datele care ajung în zona de memorie MMIO atunci când utilizați modul xAPIC nu sunt întotdeauna gestionate atât de atent cum ar trebui...

… și astfel că un fel de „scurgere de date” în acea zonă MMIO este miezul acestei probleme.

Dar având în vedere că tu au nevoie deja de puteri la nivel de administrator de sistem pentru a citi datele MMIO în primul rând și, prin urmare, aproape sigur că ați putea obține oricum toate datele din memorie...

…de ce ar fi afișat din greșeală datele altor persoane în zona de date APIC MMIO reprezintă un epic scurgere?

Ar putea face unele tipuri de atac de furt de date sau de răzuire a memoriei RAM ușor mai ușor în practică, dar cu siguranță nu ți-ar oferi mai multă capacitate de snooping memorie pe care o aveai deja în teorie?

Din păcate, această presupunere nu este adevărată dacă vreun software de pe sistem utilizează SGX de la Intel, prescurtare pentru Extensii de protecție software.


Aflați mai multe despre SGX


SGX este susținut de multe procesoare Intel recente și oferă o modalitate prin care nucleul sistemului de operare „sigila” o bucată de cod și date într-un bloc fizic de RAM, astfel încât să formeze ceea ce este cunoscut ca o enclavă.

Acest lucru îl face să se comporte, cel puțin temporar, la fel ca cipurile speciale de securitate din telefoanele mobile care sunt folosite pentru a stoca secrete precum cheile de decriptare.

Odată ce „blocarea” SGX a enclavei este setată, numai codul de program care rulează în zona de memorie închisă poate citi și scrie conținutul acelei RAM.

Ca urmare, detaliile interne ale oricăror calcule care au loc după activarea enclavei sunt invizibile pentru orice alt cod, fir, proces sau utilizator din sistem.

Inclusiv nucleul în sine.

Există o modalitate de a apela codul care a fost sigilat în enclavă și o modalitate de a returna rezultatul calculelor pe care le-ar putea efectua, dar nu există nicio modalitate de a recupera, sau de a spiona sau de a depana codul și datele asociate acestuia în timp ce rulează.

Enclava se transformă efectiv într-o cutie neagră la care puteți alimenta intrări, cum ar fi date care trebuie semnate cu o cheie privată și puteți extrage rezultate, cum ar fi semnătura digitală generată, dar din care nu puteți scoate cheile criptografice. utilizate în procesul de semnare.

După cum vă puteți imagina, dacă datele care ar trebui să fie sigilate într-o enclavă SGX ar trebui vreodată să fie duplicate accidental în memoria RAM MMIO care este folosită pentru a „oglindi” datele APIC atunci când utilizați modul xAPIC „mapată în memorie”...

… asta ar încălca securitatea SGX, care spune că nicio dată nu ar trebui să apară vreodată dintr-o enclavă SGX după ce a fost creată, cu excepția cazului în care sunt exportate în mod deliberat prin cod care rulează deja în interiorul enclavei în sine.

Ce cauzează acest eșec epic în APIC?

Cercetătorii din spatele ÆPIC Scurgere hârtie a descoperit că prin aranjarea citirii datelor APIC printr-o secvență vicleană și neobișnuită de accesări la memorie...

… ar putea păcăli procesorul să umple spațiul APIC MMIO nu numai cu date proaspăt primite de la APIC în sine, ci și cu date care tocmai s-au întâmplat să fi fost folosite recent de CPU în alt scop.

Acest comportament este un efect secundar al faptului că, deși pagina de memorie APIC MMIO are o dimensiune de 4096 de octeți, cipul APIC în modul xAPIC nu produce de fapt o valoare de 4096 de octeți de date, iar CPU nu neutralizează întotdeauna corect. părțile neutilizate ale regiunii MMIO umplând-o mai întâi cu zerouri.

În schimb, datele vechi rămase în memoria cache a procesorului au fost scrise împreună cu noile date primite de la cipul APIC însuși.

După cum spun cercetătorii, bug-ul se rezumă la ceea ce este cunoscut sub numele de citire memorie neinițializată, unde reutilizați din greșeală datele rămase ale altcuiva în RAM, deoarece nici ei, nici dvs. nu le-ați îndepărtat mai întâi de secretele sale anterioare.

Mă afectează scurgerea ÆPIC?

Pentru o listă completă a jetoanelor afectate, consultați Avizul propriu al Intel.

Din câte putem spune, dacă ai un procesor Intel din a 10-a sau a 11-a generație, probabil că ești afectat.

Dar dacă aveți un procesor nou-nouț din a 12-a generație (cel mai recent la momentul scrierii), atunci se pare că doar cipurile de tip server sunt afectate.

În mod ironic, în cipurile de laptop din a 12-a generație, Intel a renunțat la SGX, așa că această eroare nu se aplică, deoarece este imposibil să existe enclave SGX „sigilate” care s-ar putea scurge.

Desigur, chiar și pe un cip potențial vulnerabil, dacă nu vă bazați pe niciun software care utilizează SGX, atunci nici bug-ul nu se aplică.

Și bug-ul, dublat CVE-2022-21233, poate fi exploatat numai de un atacator care are deja acces local, la nivel de administrator (rădăcină) la computerul dvs.

Utilizatori obișnuiți nu pot accesa blocul de date APIC MMIO și, prin urmare, nu au nicio modalitate de a arunca o privire la nimic acolo, cu atât mai puțin date secrete care s-ar fi putut scurge dintr-o enclavă SGX.

De asemenea, mașini virtuale invitate (VM-urile) care rulează sub controlul unui sistem de operare gazdă într-un hypervisor precum HyperV, VMWare sau VirtualBox aproape sigur nu pot folosi acest truc pentru a jefui secrete de la alți oaspeți sau de la gazda în sine.

Asta pentru că VM-urile invitate, în general, nu au acces la circuitele APIC reale din procesorul gazdă; în schimb, fiecare oaspete primește propriul său APIC simulat, care este unic pentru acel VM.

Ce să fac?

Nu intra în panică.

Pe un laptop sau un computer desktop, este posibil să nu fii deloc în pericol, fie pentru că ai un computer mai vechi (sau, norocul tău, un nou-nouț!), fie pentru că oricum nu te bazezi pe SGX.

Și chiar dacă ești un risc, oricine intră în laptopul tău ca admin/root are probabil suficientă putere pentru a-ți provoca deja o lume de necazuri.

Dacă aveți servere vulnerabile și vă bazați pe SGX ca parte a securității operaționale, verificați avizul de securitate Intel INTEL-SA-00657 pentru informații de protecție și atenuare.

Potrivit cercetătorilor care au scris acest lucru, „Intel [a] lansat actualizări de microcod și SGX Software Development Kit pentru a remedia problema.”

Echipa de kernel Linux pare să lucreze chiar acum la un patch care vă va permite să vă configurați sistemul astfel încât să folosească întotdeauna x2APIC (care, după cum vă veți aminti de mai devreme, nu transmite date APIC prin intermediul memoriei partajate), și va preveni cu grație ca sistemul să fie forțat înapoi în modul xAPIC după pornire.


Timestamp-ul:

Mai mult de la Securitate goală