
„Meltdown“ ir „Spectre“: štai ką daro „Intel“, „Apple“, „Microsoft“ ir kiti

„Meltdown“ ir „Spectre“ trūkumai – dvi susijusios spragos, leidžiančios plačiai atskleisti informaciją iš kiekvieno pagrindinio procesoriaus, su ypač rimtais „Intel“ ir kai kurių ARM lustų trūkumais – iš pradžių buvo atskleistos privačiai lustų įmonėms, operacinių sistemų kūrėjams ir debesų kompiuterijos tiekėjams. Buvo planuota, kad tas privatus atskleidimas bus viešas kurį laiką kitą savaitę, leisdamas šioms įmonėms sukurti (ir, jei reikia debesų kompanijų, diegti) tinkamus pataisymus, sprendimo būdus ir sušvelninimus.
Tyrėjams išsiaiškinus vieną iš trūkumų prieš planuojamą atskleisti, šis grafikas buvo staiga paankstintas, o trečiadienį viešai paskelbta pažeidžiamumų pora, paskatinusi gana netvarkingą atsakymų rinkinį iš susijusių bendrovių.
Į „Meltdown“ ir „Spectre“ porą reaguoja trys pagrindinės įmonių grupės: procesorių įmonės, operacinių sistemų įmonės ir debesų tiekėjai. Jų reakcijos buvo gana įvairios.
Ką daro „Meltdown“ ir „Spectre“
Trumpas problemos apibendrinimas: šiuolaikiniai procesoriai atlieka spekuliacinį vykdymą. Norėdami maksimaliai padidinti našumą, jie bando vykdyti instrukcijas dar prieš įsitikindami, kad tas instrukcijas reikia vykdyti. Pavyzdžiui, perdirbėjai atspės, kokiu būdu bus paimta šaka, ir vykdys nurodymus remdamiesi tuo spėjimu. Jei spėjimas teisingas, puiku; procesorius atliko tam tikrą darbą, nelaukdamas, ar filialas paimtas, ar ne. Jei spėjimas neteisingas, jokios didelės problemos; rezultatai atmetami ir procesorius vėl vykdo teisingą šakos pusę.
Nors šis spekuliacinis vykdymas visiškai nekeičia programos elgsenos, „Spectre“ ir „Meltdown“ tyrimai rodo, kad tai aptinkamais būdais trikdo procesoriaus būseną. Šį sutrikimą galima nustatyti kruopščiai matuojant, kiek laiko reikia atlikti tam tikras operacijas. Naudojant šiuos laikus, vienas procesas gali padaryti išvadą apie kitam procesui priklausančių duomenų savybes ar net operacinės sistemos branduolį ar virtualios mašinos hipervizorių.
Šis informacijos nutekėjimas gali būti naudojamas tiesiogiai; pavyzdžiui, kenkėjiškas naršyklės „JavaScript“ gali pavogti naršyklėje saugomus slaptažodžius. Jis taip pat gali būti naudojamas kartu su kitais saugumo trūkumais, siekiant padidinti jų poveikį. Informacijos nutekėjimas linkęs pakenkti tokioms apsaugoms kaip ASLR (adresų erdvės išdėstymo atsitiktinė atranka), todėl šie trūkumai gali padėti efektyviai išnaudoti buferio perpildymą.
„Meltdown“, kurį galima pritaikyti praktiškai kiekvienam daugelį metų pagamintam „Intel“ lustui, kartu su tam tikrais didelio našumo ARM dizainais yra lengviau išnaudojamas ir leidžia bet kuriai vartotojo programai perskaityti didžiulius branduolio duomenų fragmentus. Gera žinia, kokia ji yra, yra ta, kad „Meltdown“ taip pat yra lengviau tvirtai apsisaugoti. Trūkumas priklauso nuo to, kaip operacinės sistemos dalijasi atmintimi tarp vartotojo programų ir branduolio, o sprendimas – nors ir sprendimas, už kurį baudžiama už našumą – yra nutraukti šį bendrinimą.
„Spectre“, pritaikytas „Intel“, AMD ir ARM lustams ir tikriausiai visiems kitiems rinkoje esantiems procesoriams, siūlantiems spekuliacinį vykdymą, taip pat yra subtilesnis. Tai apima apgaulingą bandymą išbandyti masyvo ribas, kad būtų galima perskaityti atmintį per vieną procesą, kuris gali būti naudojamas virtualių mašinų ir smėlio dėžučių vientisumui užkirsti, ir kryžmines atakas naudojant procesoriaus šakos numatymo elementus (aparatinę įrangą, kuri atspėja šakos pusę ir kontroliuoja spekuliacinį vykdymą). Atrodo, kad buvo sukurti kai kurių „Spectre“ aspektų sisteminiai pataisymai, tačiau norint apsisaugoti nuo visų pataisų, reikės pakeisti (arba bent jau perkompiliuoti) rizikos grupių programas.
„Intel“
„Intel“
Taigi, apie atsakymus. „Intel“ yra bendrovė, kurią šios problemos labiausiai paveikė. „Spectre“ pasiekia visus, tačiau „Meltdown“ – tik „Intel“ ir ARM. Be to, jis pasiekia tik aukščiausio našumo ARM dizainą. „Intel“ praktiškai kiekviena mikroschema, pagaminta per pastaruosius penkerius, dešimt ir galbūt net 20 metų, yra pažeidžiama „Meltdown“.
Trečiadienį pateiktas pirminis bendrovės pareiškimas buvo apgaulės šedevras. Jame yra daugybė techniškai teisingų teiginių, pavyzdžiui, „šie išnaudojimai neturi galimybių sugadinti, modifikuoti ar ištrinti duomenų“, bet visiškai šalia. Niekas neteigė kitaip! Pareiškime nėra išskiriamas „Meltdown“ – trūkumas, kurį, atrodo, išvengė didžiausias „Intel“ konkurentas, AMD, ir „Spectre“, ir todėl neįmanoma parodyti nevienodo poveikio skirtingų bendrovių produktams.
Tolesnė „Intel“ medžiaga buvo geresnė. Visų pirma, šis dokumentas, kuriame aprašomi švelninimo būdai ir būsimi procesoriaus pakeitimai, siekiant įvesti anti-Spectre funkcijas, atrodo protingas ir tikslus.
Jei norite išspręsti „Spectre“ masyvo ribų problemą, „Intel“ rekomenduoja įterpti nuoseklinimo instrukciją (lfence
yra „Intel“ pasirinkimas, nors yra ir kitų) kodais tarp testavimas masyvo ribos ir prieiti masyvas. Serializavimo instrukcijos užkerta kelią spekuliacijoms: prieš pradedant vykdyti serializavimo instrukciją, reikia atlikti visas instrukcijas, pasirodžiusias prieš serializavimo instrukciją. Šiuo atveju tai reiškia, kad testas masyvo ribų turi būti galutinai apskaičiuota prieš tai masyvas yra prieinamas; neleidžiama spekuliacinės prieigos prie masyvo, kuris daro prielaidą, kad bandymai bus sėkmingi.
Mažiau aišku, kur reikėtų pridėti šias nuoseklinimo instrukcijas. „Intel“ teigia, kad galima sukurti euristiką, siekiant išsiaiškinti geriausias vietas programoje, kad jos būtų įtrauktos, tačiau įspėja, kad jų tikriausiai nereikėtų naudoti atliekant kiekvieną masyvo ribų testą; spekuliacinio vykdymo praradimas užtraukia per didelę bausmę. Galima įsivaizduoti, kad galbūt masyvo ribos, atsirandančios iš vartotojo duomenų, turėtų būti serijinės, o kitos paliktos nepakeistos. Šis sunkumas pabrėžia „Spectre“ sudėtingumą.
„Spectre“ šakos numatymo atakai „Intel“ savo procesorius papildys naujomis galimybėmis, kad pakeistų šakos numatymo elgesį. Įdomu tai, kad kai kurie esami procesoriai, kurie jau yra klientų sistemose, turės šias galimybes atnaujinti atnaujindami mikrokodą. Būsimos kartos procesoriai taip pat apims galimybes, o „Intel“ žada mažesnį poveikį. Iš viso yra trys naujos galimybės: viena „apriboti“ tam tikrų rūšių šakų numatymą, viena – užkirsti kelią vienai „HyperThread“ įtakoti kitos „HyperThread“ šakos numatiklį tame pačiame šerdyje ir vienas veikti kaip tam tikras šakos numatymo barjeras. „kuris neleidžia šakoms iki„ barjero “paveikti šakų po užtvaru.
Šiuos naujus apribojimus turės palaikyti ir naudoti operacinės sistemos; jie nebus prieinami atskiroms programoms. Kai kurios sistemos jau turi mikrokodo atnaujinimą; visi kiti turės palaukti, kol jų sistemos tiekėjai susitvarkys.
Gebėjimas pridėti šią galimybę atnaujinant mikrokodą yra įdomus ir rodo, kad procesoriai jau turėjo galimybę tam tikru būdu apriboti ar padaryti negaliojančią šakos numatymo priemonę – ji tiesiog niekada nebuvo viešai dokumentuota ar įgalinta. Galimybė tikriausiai egzistuoja bandymų tikslais.
„Intel“ taip pat siūlo būdą, kaip koduoti tam tikras šakas su „grąžinimo“ instrukcijomis. Tai įgalinantys pataisymai jau buvo įtraukti į gcc kompiliatorių. Grąžinimo instrukcijose filialas nėra numatomas vienodai, todėl nėra jautrūs tam pačiam informacijos nutekėjimui. Tačiau atrodo, kad jie nėra visiškai apsaugoti nuo šakų numatymo įtakos; norint, kad ši transformacija būtų patikima apsauga, reikalingas „Broadwell“ ar naujesnių procesorių mikrokodo atnaujinimas.
Šis metodas pareikalautų visų pažeidžiamų programų, operacinės sistemos ir hipervizoriaus sukompiliavimo.
„Meltdown“ „Intel“ rekomenduoja pataisyti operacinės sistemos lygį, kuris pirmą kartą sukėlė susidomėjimą ir intrigas praėjusių metų pabaigoje. Bendrovė taip pat teigia, kad būsimiems perdirbėjams bus šiek tiek nenurodyta problema.
AMD
AMD atsakymas turi daug mažiau detalių. Manoma, kad AMD lustai apskritai nėra jautrūs „Meltdown“ trūkumui. Bendrovė taip pat sako (neaiškiai), kad ji turėtų būti mažiau jautri šakos prognozavimo atakai.
Vis dėlto masyvo ribų problema buvo įrodyta AMD sistemose, todėl AMD siūlo visai kitokį nei „Intel“ sprendimą: būtent operacinės sistemos pataisas. Neaišku, kas tai gali būti – nors „Intel“ išleido baisų PR, jis taip pat pagamino gerą baltraštinį popierių, o AMD iki šiol tik pasiūlė PR – ir tai, kad tai prieštarauja „Intel“ (ir, kaip vėliau pamatysime, ARM) atsakymui, yra labai savotiška.
AMD elgesys prieš tai visa tai pateko į viešumą, taip pat buvo gana įtariama. Su AMD, kaip ir su kitomis svarbiomis šios srities įmonėmis, tyrėjai susisiekė privačiai, ir ketinta visą informaciją saugoti iki koordinuoto išleidimo kitą savaitę, siekiant maksimaliai išplatinti pleistrus prieš atskleidžiant problemas. Paprastai tas privatus kontaktas užmezgamas su sąlyga, kad bus laikomasi bet kokio embargo ar neatskleidimo susitarimo.
Tiesa, AMD iš tikrųjų neatskleidė trūkumų detalių dar nepasibaigus embargui, tačiau vienas iš kompanijos kūrėjų buvo labai arti. Tik po Kalėdų AMD kūrėjas prisidėjo prie „Linux“ pataisos, pašalinusios AMD lustus iš „Meltdown“ švelninimo. Pastaboje su šiuo pataisu kūrėjas rašė: „AMD mikroarchitektūra neleidžia atminties nuorodų, įskaitant spekuliacines nuorodas, kuriomis galima pasiekti aukštesnio privilegijuoto lygio duomenis, kai veikia mažiau privilegijuotu režimu, kai dėl tos prieigos atsirastų puslapio gedimas“.
Būtent ši konkreti informacija – tai trūkumas, susijęs su spekuliaciniais bandymais pasiekti naudotojo programų branduolio duomenis – neabejotinai paskatino tyrėjus išsiaiškinti, kokia yra problema. Pranešimas žymiai susiaurino paiešką, nurodydamas tikslias sąlygas, reikalingas trūkumui sukelti.
Bendrovei, veikiančiai pagal embargą, kai daugelis skirtingų žaidėjų bandė sinchronizuoti ir koordinuoti savo atnaujinimus, pataisas, informacinius dokumentus ir kitą informaciją, tai buvo labai nenaudingas poelgis. Nors saugumo bendruomenėje tikrai yra tokių, kurie priešinasi tokiam informacijos embargui ir nori kuo greičiau atskleisti visą informaciją, atsižvelgiant į likusį pramonės požiūrį į šiuos trūkumus, AMD veiksmai atrodo bent jau neapgalvoti.
RANKA
ARM atsakymas buvo aukso standartas. Daug techninių detalių baltraštyje, tačiau ARM nusprendė tai palikti atskirai, be klaidinančio „Intel“ PR ar migloto AMD netikslumo.
Dėl masyvo ribų atakos ARM pristato naują instrukciją, kuri suteikia spekuliacijos barjerą; panaši į „Intel“ nuoseklinimo instrukcijas, naujoji ARM instrukcija turėtų būti įterpta tarp masyvo ribų testo ir pačios masyvo prieigos. ARM netgi pateikia kodo pavyzdį, kad tai parodytų.
ARM neturi bendro požiūrio į šakos numatymo atakos sprendimą, ir, skirtingai nei „Intel“, atrodo, kad ji nekuria jokio tiesioginio sprendimo. Tačiau bendrovė pažymi, kad daugelyje jos lustų jau yra įdiegtos sistemos, leidžiančios atšaukti arba laikinai išjungti šakos numatymo funkciją, ir kad operacinės sistemos turėtų tai naudoti.
ARM naujausias didelio našumo dizainas „Cortex A-75“ taip pat yra pažeidžiamas „Meltdown“ atakų. Siūlomas sprendimas yra tas pats, kurį siūlo „Intel“, ir tas pats, kurį, kaip žinoma, įdiegė „Linux“, „Windows“ ir „MacOS“: pakeiskite atminties atvaizdavimą taip, kad branduolio atminties susiejimai nebebūtų dalijami su vartotojo procesais. ARM inžinieriai prisidėjo prie „Linux“ pataisų, kad tai įgyvendintų ARM lustams.