Cum Spectre și Meltdown Hacks într-adevăr a lucrat

de Nael Abu-Ghazaleh, Dmitri Ponomarev și Dmitri Evtyushkin

postat 2019-02-28 16: 00 GMT

o privire aprofundată asupra acestor exploatări periculoase ale vulnerabilităților microprocesorului și de ce ar putea exista mai multe dintre ele acolo

Ilustrație: Erik Vrielink
/image/MzIzODU1Mw.jpeg
Ilustrație: Erik Vrielink

suntem obișnuiți să gândim procesoarele de computer ca mașini ordonate care trec de la o instrucțiune simplă la alta cu regularitate completă. Dar adevărul este, că de zeci de ani acum, au făcut sarcinile lor din ordine și doar ghicitul la ceea ce ar trebui să vină în continuare. Sunt foarte buni la asta, desigur. Atât de bine, de fapt, că această abilitate, numită execuție speculativă, a susținut o mare parte din îmbunătățirea puterii de calcul în ultimii 25 de ani sau cam asa ceva. Dar, pe 3 ianuarie 2018, lumea a aflat că acest truc, care a făcut atât de mult pentru calculul modern, era acum una dintre cele mai mari vulnerabilități ale sale.

pe parcursul anului 2017, cercetătorii de la Cyberus Technology, Google Project Zero, Universitatea de Tehnologie din Graz, Rambus, Universitatea din Adelaide și Universitatea din Pennsylvania, precum și cercetători independenți, cum ar fi criptograful Paul Kocher, au elaborat separat atacuri care au profitat de execuția speculativă. Propriul nostru grup a descoperit vulnerabilitatea inițială din spatele unuia dintre aceste atacuri în 2016, dar nu am pus toate piesele împreună.

aceste tipuri de atacuri, numite Meltdown și Spectre, nu au fost bug-uri obișnuite. În momentul în care a fost descoperit, Meltdown ar putea hack toate microprocesoarele Intel x86 și procesoarele IBM Power, precum și unele procesoare bazate pe ARM. Spectre și numeroasele sale variante au adăugat procesoare Advanced Micro Devices (AMD) la acea listă. Cu alte cuvinte, aproape întreaga lume a computerelor era vulnerabilă.

și pentru că execuția speculativă este în mare parte coaptă în hardware-ul procesorului, remedierea acestor vulnerabilități nu a fost o treabă ușoară. Făcând acest lucru fără a provoca viteze de calcul pentru a se pisa în treapta de viteză redusă a făcut-o chiar mai greu. De fapt, după un an, slujba este departe de a se termina. Patch-urile de securitate au fost necesare nu doar de la producătorii de procesoare, ci și de la cei din lanțul de aprovizionare, cum ar fi Apple, Dell, Linux și Microsoft. Primele computere alimentate de cipuri care sunt proiectate intenționat pentru a fi rezistente chiar și la unele dintre aceste vulnerabilități au sosit abia recent.

Spectre și Meltdown sunt rezultatul diferenței dintre ceea ce ar trebui să facă software—ul și microarhitectura procesorului-detaliile despre modul în care face de fapt aceste lucruri. Aceste două clase de hacks au descoperit o modalitate de informații pentru a scurge prin această diferență. Și există toate motivele să credem că mai multe căi vor fi descoperite. Am ajutat la găsirea a două, Branchscope și SpectreRSB, anul trecut.

dacă vom menține ritmul îmbunătățirilor de calcul fără a sacrifica securitatea, va trebui să înțelegem cum se întâmplă aceste vulnerabilități hardware. Și asta începe cu înțelegerea Spectre și Meltdown.

în sistemele moderne de calcul, programele software scrise în limbaje inteligibile de om, cum ar fi C++, sunt compilate în instrucțiuni de limbaj de asamblare-operații fundamentale pe care procesorul computerului le poate executa. Pentru a accelera execuția, procesoarele moderne folosesc o abordare numită pipelining. Ca o linie de asamblare, conducta este o serie de etape, fiecare dintre acestea fiind un pas necesar pentru a finaliza o instrucțiune. Unele etape tipice pentru un procesor Intel x86 includ cele care aduc instrucțiunea din memorie și o decodează pentru a înțelege ce înseamnă instrucțiunea. Pipelining aduce practic paralelismul până la nivelul de execuție a instrucțiunilor: atunci când o instrucțiune se face folosind o etapă, următoarea instrucțiune este liberă să o folosească.

începând cu anii 1990, microprocesoarele s-au bazat pe două trucuri pentru a accelera procesul de conducte: execuția în afara ordinului și speculațiile. Dacă două instrucțiuni sunt independente una de cealaltă—adică ieșirea uneia nu afectează intrarea alteia-ele pot fi reordonate și rezultatul lor va fi în continuare corect. Acest lucru este util, deoarece permite procesorului să continue să funcționeze dacă o instrucțiune se oprește în conductă. De exemplu, dacă o instrucțiune necesită date care se află în memoria principală DRAM, mai degrabă decât în memoria cache situată în CPU în sine, ar putea dura câteva sute de cicluri de ceas pentru a obține aceste date. În loc să aștepte, procesorul poate muta o altă instrucțiune prin conductă.

al doilea truc este speculația. Pentru ao înțelege, începeți cu faptul că unele instrucțiuni conduc în mod necesar la o schimbare în care instrucțiunile vin în continuare. Luați în considerare un program care conține o declarație „dacă”: verifică o condiție și, dacă condiția este adevărată, procesorul sare într-o altă locație din program. Acesta este un exemplu de instrucțiune de ramură condiționată, dar există și alte instrucțiuni care duc, de asemenea, la modificări ale fluxului de instrucțiuni.

acum gândiți-vă ce se întâmplă când o astfel de instrucțiune de ramură intră într-o conductă. Este o situație care duce la o enigmă. Când instrucțiunea ajunge la începutul conductei, nu știm rezultatul acesteia până când nu a progresat destul de adânc în conductă. Și fără a cunoaște acest rezultat, nu putem prelua următoarea instrucțiune. O soluție simplă, dar naivă, este de a împiedica introducerea de noi instrucțiuni în conductă până când instrucțiunea de ramură ajunge la un punct în care știm de unde va veni următoarea instrucțiune. Multe cicluri de ceas sunt irosite în acest proces, deoarece conductele au de obicei 15 până la 25 de etape. Și mai rău, instrucțiunile de ramură apar destul de des, reprezentând peste 20 la sută din toate instrucțiunile din multe programe.

pentru a evita costul ridicat de performanță al blocării conductei, procesoarele moderne folosesc o unitate arhitecturală numită predictor de ramură pentru a ghici de unde va veni următoarea instrucțiune, după o ramură. Scopul acestui predictor este de a specula despre câteva puncte cheie. În primul rând, va fi luată o ramură condiționată, determinând programul să se îndrepte spre o altă secțiune a programului sau va continua pe calea existentă? Și în al doilea rând, dacă ramura este luată, unde va merge programul—care va fi următoarea instrucțiune? Înarmat cu aceste predicții, conducta procesorului poate fi păstrată plină.

deoarece executarea instrucțiunii se bazează pe o predicție, aceasta este executată „speculativ”: dacă predicția este corectă, performanța se îmbunătățește substanțial. Dar dacă predicția se dovedește incorectă, procesorul trebuie să poată anula relativ rapid efectele oricăror instrucțiuni executate speculativ.

proiectarea predictorului de ramură a fost cercetată solid în comunitatea arhitecturii computerelor de mulți ani. Predictorii moderni folosesc Istoricul execuției în cadrul unui program ca bază pentru rezultatele lor. Această schemă atinge o precizie de peste 95% pe multe tipuri diferite de programe, ceea ce duce la îmbunătățiri dramatice ale performanței, în comparație cu un microprocesor care nu speculează. Cu toate acestea, este posibilă specularea greșită. Și, din păcate, atacurile Spectre exploatează greșelile.

o altă formă de speculație care a dus la probleme este speculația într-o singură instrucțiune în conductă. Acesta este un concept destul de greu de înțeles, așa că hai să-l despachetăm. Să presupunem că o instrucțiune necesită permisiunea de a executa. De exemplu, o instrucțiune ar putea îndruma computerul să scrie o bucată de date în porțiunea de memorie rezervată nucleului sistemului de operare. Nu ați dori ca acest lucru să se întâmple, cu excepția cazului în care a fost sancționat de sistemul de operare în sine sau ați risca să prăbușiți computerul. Înainte de descoperirea Meltdown și Spectre, înțelepciunea convențională a fost că este bine să începeți executarea instrucțiunii speculativ chiar înainte ca procesorul să ajungă la punctul de a verifica dacă instrucțiunea are sau nu permisiunea de a-și face munca.

în cele din urmă, dacă permisiunea nu este satisfăcută—în exemplul nostru, Sistemul de operare nu a sancționat această încercare de a juca cu memoria sa—rezultatele sunt aruncate și programul indică o eroare. În general, procesorul poate specula în jurul oricărei părți a unei instrucțiuni care ar putea determina așteptarea, cu condiția ca starea să fie rezolvată în cele din urmă și orice rezultat din presupuneri proaste să fie, efectiv, anulat. Este acest tip de speculații intra-instruire care se află în spatele tuturor variantelor bug-ului Meltdown, inclusiv versiunea sa probabil mai periculoasă, prefigurare.

intuiția care permite atacurile speculative este aceasta: în timpul specificării greșite, nu apare nicio schimbare pe care un program o poate observa direct. Cu alte cuvinte, nu există niciun program pe care să-l puteți scrie care să afișeze pur și simplu datele generate în timpul execuției speculative. Cu toate acestea, faptul că speculațiile apar lasă urme afectând cât timp este nevoie de instrucțiuni pentru a executa. Și, din păcate, acum este clar că putem detecta aceste semnale de sincronizare și extrage date secrete de la ei.

ce este această informație de sincronizare, și cum un hacker face rost de ea? Pentru a înțelege acest lucru, trebuie să înțelegeți conceptul de canale laterale. Un canal lateral este o cale neintenționată care scurge informații de la o entitate la alta (de obicei ambele sunt programe software), de obicei printr-o resursă partajată, cum ar fi un hard disk sau o memorie.

ca exemplu de atac pe canal lateral, luați în considerare un dispozitiv care este programat să asculte sunetul emis de o imprimantă și apoi folosește acel sunet pentru a deduce ceea ce este tipărit. Sunetul, în acest caz, este un canal lateral.

în microprocesoare, orice resursă hardware partajată poate fi, în principiu, utilizată ca un canal lateral care scurge informații de la un program victimă la un program atacator. Într-un atac de canal lateral utilizat în mod obișnuit, resursa partajată este memoria cache a procesorului. Memoria cache este o memorie relativ mică, cu acces rapid pe cipul procesorului utilizat pentru a stoca datele cele mai frecvent necesare unui program. Când un program accesează memoria, procesorul verifică mai întâi memoria cache; dacă datele sunt acolo (o lovitură cache), acestea sunt recuperate rapid. Dacă datele nu se află în memoria cache (o lipsă), procesorul trebuie să aștepte până când este preluat din memoria principală, care poate dura câteva sute de cicluri de ceas. Dar odată ce datele sosesc din memoria principală, acestea sunt adăugate în memoria cache, ceea ce poate necesita aruncarea altor date pentru a face loc. Cache-ul este împărțit în segmente numite seturi cache și fiecare locație din memoria principală are un set corespunzător în cache. Această organizație facilitează verificarea dacă ceva este în cache fără a fi nevoie să căutați totul.

atacurile bazate pe Cache au fost cercetate pe larg chiar înainte ca Spectre și Meltdown să apară pe scenă. Deși atacatorul nu poate citi direct datele victimei—chiar și atunci când aceste date se află într—o resursă partajată, cum ar fi memoria cache-atacatorul poate obține informații despre adresele de memorie accesate de victimă. Aceste adrese pot depinde de date sensibile, permițând unui atacator inteligent să recupereze aceste date secrete.

cum face atacatorul acest lucru? Există mai multe moduri posibile. O variantă, numită Flush and Reload, începe cu atacatorul care elimină datele partajate din memoria cache folosind instrucțiunea „flush”. Atacatorul așteaptă apoi ca victima să acceseze aceste date. Deoarece nu mai este în cache, orice date pe care victima le solicită trebuie aduse din memoria principală. Mai târziu, atacatorul accesează datele partajate în timp ce cronometrează cât durează acest lucru. O lovitură în cache-adică datele sunt din nou în cache—indică faptul că victima a accesat datele. O lipsă de memorie cache indică faptul că datele nu au fost accesate. Deci, pur și simplu măsurând cât timp a durat accesarea datelor, atacatorul poate determina ce seturi de cache au fost accesate de victimă. Este nevoie de un pic de magie algoritmică, dar această cunoaștere a seturilor de cache au fost accesate și care nu au fost poate duce la descoperirea cheilor de criptare și a altor secrete.

Meltdown, Spectre și variantele lor urmează același tipar. În primul rând, declanșează speculații pentru a executa codul dorit de atacator. Acest cod citește date secrete fără permisiune. Apoi, atacurile comunică secretul folosind Flush and Reload sau un canal lateral similar. Această ultimă parte este bine înțeleasă și similară în toate variantele de atac. Astfel, atacurile diferă doar în prima componentă, care este modul de declanșare și exploatare a speculațiilor.

img

atacurile Meltdown

atacurile Meltdown exploatează speculațiile într-o singură instrucțiune. Deși instrucțiunile de limbaj de asamblare sunt de obicei simple, o singură instrucțiune constă adesea din mai multe operații care pot depinde una de cealaltă. De exemplu, operațiile de citire a memoriei depind adesea de instrucțiunea care satisface permisiunile asociate cu adresa de memorie citită. O aplicație are de obicei permisiunea de a citi numai din memoria care i-a fost atribuită, nu din memoria alocată, să zicem, sistemului de operare sau programului altui utilizator. În mod logic, ar trebui să verificăm permisiunile înainte de a permite citirea să continue, ceea ce fac unele microprocesoare, în special cele de la AMD. Cu toate acestea, cu condiția ca rezultatul final să fie corect, designerii CPU au presupus că sunt liberi să execute speculativ aceste operațiuni în afara ordinului. Prin urmare, microprocesoarele Intel citesc locația memoriei înainte de a verifica permisiunile, dar numai „comite” instrucțiunea—făcând rezultatele vizibile pentru program—atunci când permisiunile sunt satisfăcute. Dar, deoarece datele secrete au fost preluate speculativ, acestea pot fi descoperite folosind un canal lateral, făcând procesoarele Intel vulnerabile la acest atac.

atacul prefigurat este o variație a vulnerabilității Meltdown. Acest atac afectează microprocesoarele Intel din cauza unei slăbiciuni pe care Intel o numește L1 Terminal Fault (L1TF). În timp ce atacul inițial Meltdown s-a bazat pe o întârziere în verificarea permisiunilor, prefigurare se bazează pe speculații care apar în timpul unei etape a conductei numită traducere de adrese.

Software-ul vizualizează memoria și activele de stocare ale computerului ca o singură porțiune contiguă de memorie virtuală proprie. Dar fizic, aceste active sunt împărțite și partajate între diferite programe și procese. Traducerea adreselor transformă o adresă de memorie virtuală într-o adresă de memorie fizică.

circuitele specializate de pe microprocesor ajută la traducerea adresei de memorie virtuală-fizică, dar poate fi lentă, necesitând mai multe căutări de memorie. Pentru a accelera lucrurile, microprocesoarele Intel permit speculații în timpul procesului de traducere, permițând unui program să citească speculativ conținutul unei părți a cache-ului numit L1, indiferent de cine deține aceste date. Atacatorul poate face acest lucru și apoi dezvăluie datele folosind abordarea canalului lateral pe care am descris-o deja.

în unele privințe, prefigurarea este mai periculoasă decât topirea, în alte moduri este mai puțin. Spre deosebire de Meltdown, prefigurarea poate citi conținutul numai al cache-ului L1, datorită specificului implementării de către Intel a arhitecturii procesorului său. Cu toate acestea, prefigurare poate citi orice conținut în L1—nu doar date adresabile de program.

/image/MzIzODYyNw.jpeg

atacurile Spectre

atacurile Spectre manipulează sistemul de predicție a ramurilor. Acest sistem are trei părți: predictorul direcției ramurii, predictorul țintă a ramurii și tamponul stivei de retur.

predictorul direcției de ramură prezice dacă o ramură condiționată, cum ar fi cea utilizată pentru a implementa o declarație „dacă” într-un limbaj de programare, va fi luată sau nu. Pentru a face acest lucru, urmărește comportamentul anterior al ramurilor similare. De exemplu, poate însemna că, dacă o ramură este luată de două ori la rând, predicțiile viitoare vor spune că ar trebui luată.

predictorul țintă de ramură prezice adresa de memorie țintă a ceea ce se numesc ramuri indirecte. Într-o ramură condiționată, adresa următoarei instrucțiuni este precizată, dar pentru o ramură indirectă acea adresă trebuie calculată mai întâi. Sistemul care prezice aceste rezultate este o structură cache numită tampon țintă de ramură. În esență, ține evidența ultimei ținte calculate a ramurilor indirecte și le folosește pentru a prezice unde ar trebui să conducă următoarea ramură indirectă.

tamponul stivei de retur este utilizat pentru a prezice ținta unei instrucțiuni „return”. Când o subrutină este „apelată” în timpul unui program, instrucțiunea de returnare face ca programul să reia activitatea în punctul din care a fost apelată subrutina. Încercarea de a prezice punctul potrivit la care să reveniți pe baza adreselor de returnare anterioare nu va funcționa, deoarece aceeași funcție poate fi apelată din mai multe locații diferite din cod. În schimb, sistemul folosește tamponul return stack, o bucată de memorie de pe procesor, care păstrează adresele de returnare ale funcțiilor așa cum sunt numite. Apoi folosește aceste adrese atunci când se întâlnește o întoarcere în codul subrutinei.

fiecare dintre aceste trei structuri poate fi exploatată în două moduri diferite. În primul rând, predictorul poate fi greșit în mod deliberat. În acest caz, atacatorul execută un cod aparent nevinovat conceput pentru a încurca sistemul. Mai târziu, atacatorul execută în mod deliberat o ramură care va specula greșit, determinând programul să sară la o bucată de cod aleasă de atacator, numită gadget. Gadgetul începe apoi să fure date.

un al doilea mod de atac Spectre se numește injecție directă. Se pare că, în anumite condiții, cei trei predictori sunt împărțiți între diferite programe. Ceea ce înseamnă acest lucru este că programul de atac poate umple structurile predictor cu date proaste alese cu grijă pe măsură ce se execută. Atunci când o victimă involuntară execută programul lor, fie în același timp cu atacatorul sau după aceea, victima va lichidarea folosind starea predictor care a fost completat de către atacator și involuntar pornit un gadget. Acest al doilea atac este deosebit de îngrijorător, deoarece permite unui program de victime să fie atacat dintr-un alt program. O astfel de amenințare dăunează în special furnizorilor de servicii cloud, deoarece nu pot garanta că datele clienților lor sunt protejate.

vulnerabilitățile Spectre și Meltdown au prezentat o enigmă industriei de calcul, deoarece vulnerabilitatea provine din hardware. În unele cazuri, cel mai bun lucru pe care îl putem face pentru sistemele existente—care alcătuiesc cea mai mare parte a serverelor și PC—urilor instalate-este să încercăm să rescriem software-ul pentru a încerca să limităm daunele. Dar aceste soluții sunt ad-hoc, incomplete și duc adesea la un mare succes pentru performanța computerului. În același timp, cercetătorii și designerii CPU au început să se gândească la modul de proiectare a viitoarelor procesoare care păstrează speculațiile fără a compromite securitatea.

o apărare, numită kernel page-table isolation (KPTI) , este acum încorporată în Linux și alte sisteme de operare. Amintiți-vă că fiecare aplicație vizualizează memoria și activele de stocare ale computerului ca o singură întindere contiguă de memorie virtuală proprie. Dar fizic, aceste active sunt împărțite și partajate între diferite programe și procese. Tabelul de pagini este în esență harta sistemului de operare, spunându-i ce părți ale unei adrese de memorie virtuală corespund adreselor de memorie fizică. Tabelul de pagini kernel este responsabil pentru a face acest lucru pentru nucleul sistemului de operare. KPTI și sisteme similare se apără împotriva topirii făcând datele secrete din memorie, cum ar fi sistemul de operare, inaccesibile atunci când rulează programul unui utilizator (și potențial programul unui atacator). Ea face acest lucru prin eliminarea părților interzise din tabelul de pagini. În acest fel, chiar și Codul executat speculativ nu poate accesa datele. Cu toate acestea, această soluție înseamnă o muncă suplimentară pentru ca sistemul de Operare să mapeze aceste pagini atunci când le execută și să le dezactiveze ulterior.

o altă clasă de apărare oferă programatorilor un set de instrumente pentru a limita speculațiile periculoase. De exemplu, patch-ul Retpoline de la Google rescrie tipul de ramuri care sunt vulnerabile la Spectre Variant 2, astfel încât forțează speculațiile să vizeze un gadget benign și gol. Programatorii pot adăuga, de asemenea, o instrucțiune de limbaj de asamblare care limitează Spectre v1, prin restricționarea citirilor de memorie speculativă care urmează ramurilor condiționale. În mod convenabil, această instrucțiune este deja prezentă în arhitectura procesorului și este utilizată pentru a impune ordonarea corectă între operațiile de memorie originare pe diferite nuclee de procesor.

în calitate de designeri de procesoare, Intel și AMD au trebuit să meargă mai adânc decât un patch software obișnuit. Corecțiile lor actualizează microcodul procesorului. Microcodul este un strat de instrucțiuni care se potrivește între limbajul de asamblare al software-ului obișnuit și circuitele reale ale procesorului. Microcodul adaugă flexibilitate setului de instrucțiuni pe care un procesor îl poate executa. De asemenea, simplifică proiectarea unui procesor, deoarece atunci când se utilizează microcod, instrucțiunile complexe sunt traduse în mai multe instrucțiuni mai simple, care sunt mai ușor de executat într-o conductă.

practic, Intel și AMD și-au ajustat microcodul pentru a schimba comportamentul unor instrucțiuni de limbaj de asamblare în moduri care limitează speculațiile. De exemplu, inginerii Intel au adăugat opțiuni care interferează cu unele dintre atacuri, permițând sistemului de Operare să golească structurile de predicție a ramurilor în anumite circumstanțe.

o altă clasă de soluții încearcă să interfereze cu capacitatea atacatorului de a transmite datele folosind canale laterale. De exemplu, tehnologia DAWG a MIT împarte în siguranță memoria cache a procesorului, astfel încât diferite programe să nu partajeze niciuna dintre resursele sale. Cel mai ambițios, există propuneri pentru noi arhitecturi de procesoare care ar introduce structuri pe CPU care sunt dedicate speculațiilor și separate de memoria cache a procesorului și de alte componente hardware. În acest fel, orice operațiuni care sunt executate speculativ, dar nu sunt în cele din urmă comise nu sunt niciodată vizibile. Dacă rezultatul speculației este confirmat, datele speculative sunt trimise structurilor principale ale procesorului.

vulnerabilitățile speculative au rămas latente în procesoare de peste 20 de ani și au rămas, din câte știe cineva, neexploatate. Descoperirea lor a zguduit substanțial industria și a subliniat modul în care securitatea cibernetică nu este doar o problemă pentru sistemele software, ci și pentru hardware. De la descoperirea inițială, au fost dezvăluite aproximativ o duzină de variante de Spectre și Meltdown și este probabil că există mai multe. Spectre și Meltdown sunt, la urma urmei, efecte secundare ale principiilor de proiectare de bază pe care ne-am bazat pentru a îmbunătăți performanța computerului, ceea ce face dificilă eliminarea unor astfel de vulnerabilități în proiectele actuale de sistem. Este probabil ca noile modele de CPU să evolueze pentru a păstra speculațiile, prevenind în același timp tipul de scurgere a canalelor laterale care permite aceste atacuri. Cu toate acestea, viitorii proiectanți de sisteme informatice, inclusiv cei care proiectează cipuri de procesoare, trebuie să fie conștienți de implicațiile de securitate ale deciziilor lor și să nu se mai optimizeze doar pentru performanță, dimensiune și putere.

despre autor

Nael Abu-Ghazaleh este președinte al programului de inginerie informatică de la Universitatea din California, Riverside. Dmitry Evtyushkin este profesor asistent de informatică la Colegiul William și Mary, din Williamsburg, Va. Dmitry Ponomarev este profesor de informatică la Universitatea de Stat din New York la Binghamton.

pentru a cerceta mai departe

Paul Kocher și ceilalți cercetători care au dezvăluit colectiv Spectre au explicat mai întâi aici . Moritz Lipp a explicat Meltdown în această discuție la Usenix Security ‘ 18. Prefigurarea a fost detaliată la aceeași conferință.

un grup de cercetători, inclusiv unul dintre autori, au venit cu o evaluare sistematică a atacurilor Spectre și Meltdown care descoperă atacuri potențiale suplimentare . Inginerii IBM au făcut ceva similar, iar inginerii Google au ajuns recent la concluzia că atacurile de execuție cu canale laterale și speculative sunt aici pentru a rămâne .

Lasă un răspuns

Adresa ta de email nu va fi publicată.

More: