Ciocan de rând - Row hammer

Ciocanul de rând (scris și ca ciocan ) este un exploit de securitate care profită de un efect secundar neintenționat și nedorit în memoria dinamică cu acces aleatoriu (DRAM) în care celulele de memorie interacționează electric între ele prin scurgerea încărcărilor lor, schimbând eventual conținutul din apropiere rânduri de memorie care nu au fost adresate în accesul original la memorie. Această eludare a izolației dintre celulele de memorie DRAM rezultă din densitatea mare a celulelor din DRAM-ul modern și poate fi declanșată de modele de acces la memorie special create , care activează rapid aceleași rânduri de memorie de mai multe ori.

Efectul ciocan de rând a fost utilizat în unele exploatări de securitate a computerului de creștere a privilegiilor , iar atacurile bazate pe rețea sunt, de asemenea, teoretic posibile.

Există diferite tehnici bazate pe hardware pentru a preveni efectul ciocanului de rând, inclusiv suportul necesar în unele procesoare și tipuri de module de memorie DRAM .

fundal

O ilustrare la nivel înalt a organizării DRAM, care include celule de memorie (pătrate albastre), decodoare de adrese (dreptunghiuri verzi) și amplificatoare de sens (pătrate roșii)

În RAM dinamică (DRAM), fiecare bit de date stocate ocupă o celulă de memorie separată care este implementată electric cu un condensator și un tranzistor . Starea de încărcare a unui condensator (încărcat sau descărcat) este cea care determină dacă o celulă DRAM stochează „1” sau „0” ca valoare binară . Un număr mare de celule de memorie DRAM sunt împachetate în circuite integrate , împreună cu o logică suplimentară care organizează celulele în scopul citirii, scrierii și actualizării datelor.

Celulele de memorie (pătrate albastre în ambele ilustrații) sunt organizate în mai multe matrici și adresate prin rânduri și coloane. O adresă de memorie aplicată unei matrice este împărțită în adresa rândului și adresa coloanei, care sunt procesate de decodoarele de adresă de rând și coloană (în ambele ilustrații, dreptunghiuri verticale și orizontale verzi, respectiv). După ce o adresă de rând selectează rândul pentru o operație de citire (selecția este cunoscută și sub numele de activare de rând ), biții din toate celulele din rând sunt transferați în amplificatoarele de sens care formează bufferul de rând (pătrate roșii în ambele ilustrații), din care bitul exact este selectat folosind adresa coloanei. În consecință, operațiile de citire sunt de natură distructivă deoarece proiectarea DRAM necesită rescrierea celulelor de memorie după ce valorile lor au fost citite prin transferul încărcărilor de celule în bufferul de rând. Operațiile de scriere decodează adresele într-un mod similar, dar, ca urmare a proiectării, rândurile întregi trebuie rescrise pentru ca valoarea unui singur bit să fie modificată.

Ca urmare a stocării biților de date utilizând condensatori care au o rată de descărcare naturală, celulele de memorie DRAM își pierd starea în timp și necesită rescrierea periodică a tuturor celulelor de memorie, care este un proces cunoscut sub numele de reîmprospătare. Ca un alt rezultat al proiectării, DRAM memoria este susceptibilă de modificări aleatorii în datele stocate, care sunt cunoscute sub numele de erori de memorie soft și atribuite razelor cosmice și altor cauze. Există diferite tehnici care contracarează erorile de memorie soft și îmbunătățesc fiabilitatea DRAM, dintre care memoria de cod de corectare a erorilor (ECC) și variantele sale avansate (cum ar fi memoria de blocare a pasului ) sunt cele mai utilizate.

Prezentare generală

Activările rapide ale rândurilor (rânduri galbene) pot modifica valorile biților stocați în rândul victimei (rândul violet).

Densitățile crescute ale circuitelor integrate DRAM au condus la celule de memorie fizic mai mici care conțin mai puțină încărcare , rezultând marje de zgomot operaționale mai mici , rate crescute de interacțiuni electromagnetice între celule de memorie și o posibilitate mai mare de pierdere a datelor. Ca rezultat, au fost observate erori de perturbare , fiind cauzate de celulele care interferează reciproc cu funcționarea și se manifestă ca modificări aleatorii ale valorilor biților stocați în celulele de memorie afectate. Conștientizarea erorilor de perturbare datează de la începutul anilor 1970 și Intel 1103 ca primele circuite integrate DRAM disponibile comercial; de atunci, producătorii de DRAM au folosit diverse tehnici de atenuare pentru a contracara erorile de perturbare, cum ar fi îmbunătățirea izolației dintre celule și efectuarea testelor de producție. Cu toate acestea, cercetătorii au demonstrat într-o analiză din 2014 că cipurile DDR3 SDRAM disponibile comercial fabricate în 2012 și 2013 sunt susceptibile la erori de perturbare, folosind în același timp termenul ciocan de rând pentru a denumi efectul secundar asociat care a dus la întoarcerea de biți observată .

Oportunitatea ca efectul ciocanului de rând să apară în memoria DDR3 este atribuită în principal densității mari de celule de memorie DDR3 și rezultatelor interacțiunilor asociate dintre celule, în timp ce activările rapide de rând DRAM au fost determinate ca fiind cauza principală. Activările frecvente ale rândurilor determină fluctuații de tensiune pe liniile de selecție a rândurilor asociate, care s-au observat că induc rate de descărcare mai mari decât cele naturale în condensatoarele aparținând rândurilor de memorie din apropiere (adiacente, în majoritatea cazurilor), care se numesc rânduri victime ; dacă celulele de memorie afectate nu sunt reîmprospătate înainte de a pierde prea multă încărcare, apar erori de perturbare. Testele arată că se poate observa o eroare de perturbare după efectuarea a aproximativ 139.000 de accesuri ulterioare la rândul de memorie (cu spălări de cache ) și că până la o celulă de memorie din fiecare 1.700 de celule poate fi susceptibilă. Aceste teste arată, de asemenea, că rata erorilor de perturbare nu este afectată substanțial de temperatura crescută a mediului, în timp ce depinde de conținutul real al DRAM, deoarece anumite tipare de biți duc la rate de eroare de perturbare semnificativ mai mari.

O variantă numită ciocanire pe două fețe implică activări țintite a două rânduri DRAM care înconjoară un rând victimă: în ilustrația prezentată în această secțiune, această variantă ar activa ambele rânduri galbene cu scopul de a induce întoarcerile de biți în rândul violet, care în acest cazul ar fi rândul victimei. Testele arată că această abordare poate duce la o rată semnificativ mai mare de erori de perturbare, comparativ cu varianta care activează doar unul dintre rândurile DRAM învecinate ale rândului victimei.

Atenuare

Există diferite metode pentru detectarea, prevenirea, corectarea sau atenuarea mai mult sau mai puțin reușită a efectului ciocan de rând. Testele arată că codul simplu de corecție a erorilor , care oferă funcții de corecție cu o singură eroare și de detectare a erorilor duble (SECDED), nu sunt capabili să corecteze sau să detecteze toate erorile de perturbare observate, deoarece unele dintre ele includ mai mult de doi biți răsturnați pe cuvânt de memorie . Mai mult decât atât, cercetările arată că loviturile cu ciocan de trei biți direcționate cu precizie împiedică memoria ECC să observe modificările.

O soluție mai puțin eficientă este introducerea unei reîmprospătări mai frecvente a memoriei, cu intervale de reîmprospătare mai scurte decât cele obișnuite de 64 ms, dar această tehnică are ca rezultat un consum mai mare de energie și o creștere a procesului; unii furnizori furnizează actualizări de firmware care implementează acest tip de atenuare. Una dintre cele mai complexe măsuri de prevenire efectuează identificarea pe bază de contra a rândurilor de memorie accesate frecvent și reîmprospătează proactiv rândurile lor vecine; o altă metodă emite reîmprospătări aleatorii rare, rare, ale rândurilor de memorie învecinate rândurilor accesate, indiferent de frecvența lor de acces. Cercetările arată că aceste două măsuri de prevenire provoacă un impact neglijabil asupra performanței.

De la lansarea microarhitecturii Ivy Bridge , procesoarele Intel Xeon acceptă așa-numita reîmprospătare a pseudo țintelor rândului (pTRR) care poate fi utilizată în combinație cu modulele de memorie duală (DIMM) DDR3 compatibile cu pTRR pentru a atenua efectul ciocanului de rând prin reîmprospătarea automată a posibilelor rânduri de victime, fără impact negativ asupra performanței sau consumului de energie. Atunci când sunt utilizate cu DIMM-uri care nu sunt compatibile cu pTRR, aceste procesoare Xeon cad în mod implicit în efectuarea reîmprospătării DRAM la dublul frecvenței obișnuite, ceea ce duce la o latență a accesului la memorie puțin mai mare și poate reduce lățimea de bandă a memoriei cu până la 2-4%.

LPDDR4 memorie standard mobil publicat de JEDEC include suport hardware opțional pentru așa-numitul refresh rând țintă (TRR) care previne efectul de ciocan rând , fără a afecta negativ performanța sau consumul de energie. În plus, unii producători implementează TRR în produsele lor DDR4 , deși nu face parte din standardul de memorie DDR4 publicat de JEDEC. Pe plan intern, TRR identifică posibilele rânduri de victime, numărând numărul de activări de rând și comparându-l cu valorile predefinite ale cipului - număr maxim de activări specifice (MAC) și valori de activare maximă a ferestrei (t MAW ), și reîmprospătează aceste rânduri pentru a preveni întoarcerea de biți. Valoarea MAC este numărul total maxim de activări de rânduri care pot fi întâlnite pe un anumit rând DRAM într-un interval de timp care este egal sau mai scurt decât timpul MAW t înainte ca rândurile vecine să fie identificate ca rânduri victime; TRR poate semnaliza, de asemenea, un rând ca un rând de victimă dacă suma activărilor de rând pentru cele două rânduri învecinate atinge limita MAC în fereastra de timp t MAW .

Datorită necesității unui număr mare de activări de rând DRAM efectuate rapid, exploatările cu ciocan de rând emit un număr mare de accesări de memorie necache, care cauzează pierderi de cache , care pot fi detectate prin monitorizarea ratei de ratări de cache pentru vârfuri neobișnuite folosind contoare de performanță hardware .

Versiunea 5.0 a software-ului de diagnosticare a memoriei MemTest86 , lansată pe 3 decembrie 2013, a adăugat un test cu ciocan de rând care verifică dacă RAM-ul computerului este susceptibil la erori de perturbare, dar funcționează numai dacă computerul pornește UEFI ; fără UEFI, pornește o versiune mai veche fără test de ciocan.

Implicații

Protecția memoriei , ca modalitate de a preveni accesarea proceselor de memorie care nu a fost atribuită fiecăruia dintre ele, este unul dintre conceptele din spatele celor mai moderne sisteme de operare . Prin utilizarea protecției de memorie în combinație cu alte mecanisme legate de securitate, cum ar fi inelele de protecție , este posibil să se realizeze separarea privilegiilor între procese, în care programele și sistemele de calcul, în general, sunt împărțite în părți limitate la privilegiile specifice de care au nevoie pentru a efectua o anumită sarcină. Utilizarea separării de privilegii poate reduce, de asemenea, gradul de daune potențiale cauzate de atacurile de securitate a computerului, prin restricționarea efectelor acestora la anumite părți ale sistemului.

Erorile de perturbare (explicate în secțiunea de mai sus ) înving efectiv diferite straturi de protecție a memoriei prin „ scurtcircuitarea ” acestora la un nivel hardware foarte scăzut, creând practic un tip unic de vector de atac care permite proceselor să modifice conținutul părților arbitrare ale memoriei principale prin manipularea directă a hardware-ului de memorie subiacent. În comparație, vectorii de atac „convenționali”, cum ar fi depășirile de tampon, vizează eludarea mecanismelor de protecție la nivel de software, prin exploatarea diferitelor greșeli de programare pentru a realiza modificări ale conținutului memoriei principale altfel inaccesibile.

Exploatări

code1a:
  mov (X), %eax  // read from address X
  mov (Y), %ebx  // read from address Y
  clflush (X)    // flush cache for address X
  clflush (Y)    // flush cache for address Y
  mfence
  jmp code1a
Un fragment de cod de asamblare x86 care induce efectul ciocan de rând (adrese de memorie Xși Ytrebuie să fie mapate la rânduri DRAM diferite din aceeași bancă de memorie )

Cercetările inițiale privind efectul ciocanului de rând, publicate în iunie 2014, au descris natura erorilor de perturbare și au indicat potențialul de a construi un atac, dar nu au furnizat niciun exemplu de exploatare de securitate funcțională. O lucrare de cercetare ulterioară din octombrie 2014 nu a implicat existența oricăror probleme legate de securitate care decurg din efectul ciocanului.

La 9 martie, 2015, Google a lui Zero Proiectul a relevat două lucru escaladarea privilegiilor exploatează pe baza efectului de ciocan rând, stabilirea naturii sale exploatabile pe x86-64 arhitectura. Unul dintre exploatările dezvăluite vizează mecanismul Google Native Client (NaCl) pentru a rula un subset limitat de instrucțiuni ale mașinii x86-64 într-un sandbox , exploatând efectul ciocan de rând pentru a scăpa din sandbox și pentru a câștiga capacitatea de a emite apeluri de sistem direct. Această vulnerabilitate NaCl , urmărită ca CVE - 2015-0565 , a fost atenuată prin modificarea NaCl, astfel încât să nu permită executarea instrucțiunii mașinii clflush( spălare linie cache ), care anterior se credea că este necesară pentru construirea unui atac efectiv de ciocan de rând.

Al doilea exploit dezvăluit de Project Zero rulează ca un proces Linux fără privilegii pe arhitectura x86-64, exploatând efectul ciocan de rând pentru a obține acces nerestricționat la toată memoria fizică instalată pe un computer. Prin combinarea erorilor perturbatoare cu pulverizare de memorie , acest lucru exploata este capabil să modifice intrări în tabelul de pagini utilizate de către memoria virtuală sistem de cartografiere adrese virtuale la adrese fizice , care are ca rezultat accesul exploit câștigă memorie fără restricții. Datorită naturii sale și incapacitatea arhitecturii x86-64 de a crea clflusho instrucțiune de mașină privilegiată, acest exploit poate fi cu greu atenuat pe computerele care nu utilizează hardware cu mecanisme de prevenire a ciocanului încorporat. În timp ce a testat viabilitatea exploatărilor, Proiectul Zero a constatat că aproximativ jumătate din cele 29 de laptopuri testate au prezentat erori de perturbare, unele dintre ele apărând pe laptopuri vulnerabile în mai puțin de cinci minute de rulare a codului care induce un ciocan de rând; laptopurile testate au fost fabricate între 2010 și 2014 și au folosit memorie non-ECC DDR3.

În iulie 2015, un grup de cercetători în domeniul securității a publicat o lucrare care descrie o modalitate independentă de arhitectură - și set de instrucțiuni - de exploatare a efectului ciocan de rând. În loc să se bazeze pe clflushinstrucțiunile pentru a efectua curățări de memorie cache, această abordare realizează accesuri de memorie neimprimate prin provocarea unei rate foarte mari de evacuare a memoriei cache folosind modele de acces la memorie selectate cu atenție. Deși politicile de înlocuire cache diferă între procesoare, această abordare depășește diferențele arhitecturale prin folosirea unui cache de strategie de evacuare adaptive algoritm . Dovada conceptului pentru această abordare este oferit atât ca un cod nativ de punere în aplicare, și ca pur JavaScript de punere în aplicare care rulează pe Firefox  39. Implementarea JavaScript, numită Rowhammer.js , folosește tablouri mari tastate și se bazează pe alocarea lor internă folosind pagini mari ; ca rezultat, demonstrează o exploatare la nivel înalt a unei vulnerabilități la nivel foarte scăzut.

În octombrie 2016, cercetătorii au publicat DRAMMER, o aplicație Android care folosește ciocanul de rând, împreună cu alte metode, pentru a obține în mod fiabil accesul root la mai multe smartphone-uri populare. Vulnerabilitatea a fost recunoscută ca CVE - 2016-6728 și Google a lansat o atenuare în termen de o lună. Cu toate acestea, datorită naturii generale a posibilelor implementări ale atacului, un patch software eficient este dificil de implementat în mod fiabil. Începând din iunie 2018, majoritatea propunerilor de patch-uri făcute de mediul academic și industria erau fie impracticabile de implementat, fie insuficiente pentru a opri toate atacurile. Ca atenuare, cercetătorii au propus o apărare ușoară care previne atacurile bazate pe accesul direct la memorie (DMA) prin izolarea tampoanelor DMA cu rânduri de pază.

Vezi si

  • Memorie amestecată  - funcție de controler de memorie care transformă datele utilizatorului scrise în memorie în modele pseudo-aleatorii
  • Întărirea radiațiilor  - actul de a face componentele electronice rezistente la deteriorări sau defecțiuni cauzate de radiațiile ionizante
  • Supărare de eveniment unic  - o schimbare de stare cauzată de ioni sau radiații electromagnetice care lovesc un nod sensibil într-un dispozitiv electronic
  • Eroare ușoară  - un tip de eroare care implică modificări eronate la semnale sau date, dar fără modificări ale dispozitivului sau circuitului subiacent

Note

Referințe

linkuri externe