Kaj vemo o napadih Spectre in Meltdown na procesorje
Matej Huš
5. jan 2018 ob 22:47:27
Nekaj dni je minilo od objave ranljivosti Spectre in Meltdown v modernih procesorjih, tako da je sedaj znanih že precej več podrobnosti. Čeprav so se proizvajalci operacijskih sistemov Windows, macOS in Linux hitro odzvali in brž izdali popravke, nas bo zaradi vsega skupaj še lep čas bolela glava.
Še posebej utegne glava boleti Intelovega izvršnega direktorja Briana Krzanicha, ki je tik pred javno objavo ranljivosti prodal največji dovoljeni paket Intelovih delnic in zanje iztržil 39 milijonov dolarjev. Drži, da je Krzanich namero prodaje ameriški agenciji za trg vrednostnih papirjev priglasil 30. oktobra lani, a že tedaj so Intelovi inženirji vedeli za napako. Intel je iz neznanega razloga z objavo čakal še nekaj mesecev, Krzanich pa je delnice potem prodal ravno tik pred objavo. Pristojni organi bodo zato preverili, ali je šlo za trgovanje na podlagi notranjih informacij ali ne. Krzanich sicer s tem ni pridobil koristi, ker je tečaj delnic Intela tudi po izbruhu afere ostal nespremenjen, a to ga ne odvezuje odgovornosti.
Toda težava ni omejena na Intel. V resnici gre za dve ločeni, a sorodni ranljivosti, ki so ju poimenovali Spectre in Meltdown. Obe omogočata programom, da dostopijo do pomnilnika in berejo podatke, do katerih niso upravičeni in jih ob pravilnem upoštevanju hierarhije dostopa in privilegijev ne bi smeli biti sposobni videti. Za zdaj ni znano, ali so se v praksi napadi na obe ranljivosti dogajali. Ranljivost Meltdown, ki so jo odkrili Jann Horn (Google Project Zero), Werner Haas in Thomas Prescher (Cyberus Technology) ter Daniel Gruss, Moritz Lipp, Stefan Mangard in Michael Schwarz (Tehniška univerza Gradec) je bolj akutna. Vsi proizvajalci operacijskih sistemov so že izdali popravke, ki jo odpravljajo. Zaradi načina, kako vsi moderni Intelovi procesorji (od leta 1995 dalje, razen nekaterih Itaniumov in Atomov) izvajajo ukaze, jo je enostavno izrabiti. Na AMD-jevih in ARM-jevih procesorjih za zdaj niso potrdili Meltdowna. Trdovratnejši pa je Spectre, ki ždi v Intelovih, AMD-jevih in ARM-jevih procesorjih, kar pomeni, da so ranljivi vsi računalniki od strežnikov in delovnih postaj do pametnih telefonov. Spectre je odkrilo več raziskovalcev iz Google Zero Projecta, Univerz Pensilvanija, Maryland, Adelajda in Gradec, Rambusa in Data61.
Meltdown je posledica nelinearnega izvajanja ukazov, ki ga Intelovi procesorji uporabljajo za pohitritev delovanja. Poenostavljeno povedano procesor začne izvajati nekatere ukaze, še preden je jasno, ali bo njihovo izvajanje sploh potrebno glede na programsko kodo (out of order execution). Če se izkaže, da niso bili potrebni (ker je pogoj v kodi, ki vodi do njih, neizpolnjen), se rezultati zavržejo. Ideja, ki je načeloma koristna, pa povzroči spremembe v registrih in predpomnilniku, ki so merljive. Zato lahko s pametno kodo uporabniški programi dostopijo do podatkov v pomnilniku, ki je rezerviran za jedro, kamor po dizajnu ne bi smeli. Spectre deluje nekoliko drugače, in sicer izkorišča špekulativno izvajanje ukazov (speculative execution). Spectre programov omogoča vpogled v dele pomnilnika, ki pripadajo drugim programom, torej dostop do poljubnega kosa pomnilnika. Oboje je slabo in odpira prostor za napade.
Glavni problem pa je upočasnitev. Po najslabših scenarijih naj bi se določene operacije (to merijo sintetični testi) upočasnile tudi do 50 odstotkov. V realnosti tako velikih upočasnitev ne bomo zaznali, bomo pa videli 10-30 odstotkov počasnejše delovanje. Google zagotavlja, da njegovi testi kažejo, da razlike ne bodo velike, kar bo pomirilo predvsem upravljavce strežnikov in podatkovnih centrov. Ob tem se vedno primerijo še neželeni stranski učinki, kot je na primer nezdružljivost določenih antivirusnih programov za Windows z novimi popravki, ker so uporabljali nedokumentirane klice.
Ob tem se lahko spomnimo na leto 1997, ko je Intel ugotavljal, da sekvenca F0 0F C7 C8 povzroči prenehanje odzivanja Pentiumov in Pentiumov MMX. Tudi takrat je Intel najprej več mesecev ignoriral težavo, kasneje pa poizkusil zmanjšati pomen hrošča - tudi tako, da ga nikoli ni imenoval hrošč. Za razliko od napake leta 1994, ko je Intel moral vpoklicati procesorje, to pot vpoklica ne bo. Napačno deljenje je stvarna napaka, varnostna pomanjkljivost, ki povzroči upočasnitev pri odpravi, pa pač ne.