Meltdown je zranitelnost hardwarového postranního kanálu , která se vyskytuje u řady mikroprocesorů, zejména těch vyrobených společností Intel a architektury ARM . Meltdown používá chybu implementace spekulativního provádění příkazůna některých procesorech Intel a ARM (ale ne AMD [1] [2] ), což způsobuje, že procesor ignoruje oprávnění stránky při spekulativním provádění instrukcí pro čtení paměti.
Tato chyba zabezpečení umožňuje místnímu útočníkovi (při spouštění speciálního programu) získat neoprávněný přístup pro čtení do privilegované paměti (paměti používané jádrem operačního systému). [3] [4] [5] .
Útoku bylo přiděleno ID zranitelnosti CVE CVE-2017-5754 [6] .
Útok Meltdown nezávisle na sobě objevili výzkumníci z Google Project Zero , Cyberus Technology a Graz University of Technology v polovině roku 2017 a několik měsíců o něm vedou uzavřené diskuse a opravy. Zveřejnění podrobností a oprav bylo naplánováno na 9. ledna 2018, ale podrobnosti o zranitelnosti byly zveřejněny 4. ledna 2018 ve stejnou dobu jako útok Spectre , a to kvůli publikacím novinářů The Register [7] , kteří se dozvěděli o opravy KAISER/KPTI z mailing listu linuxového jádra [8] .
Schopnost útoku je generována třemi mechanismy, které vám umožňují zrychlit procesor, a každý z těchto mechanismů samostatně nevytváří zranitelnost:
Moderní vysoce výkonné mikroprocesory mají schopnost spouštět nový kód bez čekání na dokončení předchozích akcí. Pokud například instrukce větvení čeká na přijetí dat z hlavní paměti, aby se mohla rozhodnout, nečinný procesor může být zaneprázdněn prováděním jednoho ze směrů větve (a v některých architekturách dokonce obou větví) v naději, že bude mít výsledek výpočet připraven v době, kdy je znám výsledek větve. Tato technika se nazývá spekulativní provádění. Pokud je odhad úspěšný, spekulativně provedený kód změní viditelné hodnoty registrů (architektonický stav) a provádění pokračuje. Pokud byla větev provádění předpokládána nesprávně, instrukce z ní nemění viditelný stav procesoru a skutečné provádění se vrátí do bodu větvení.
Vzhledem ke zvláštnostem některých implementací se při spekulativním provádění skutečně provádí přístup do paměti bez ohledu na přístupová práva provádějícího procesu k této paměti; to umožňuje provádění příkazů bez čekání na odezvu paměťového řadiče . Pokud se tato větev spekulativního provádění později ukáže jako správná, bude vyvolána výjimka chybného přístupu do paměti. Pokud je větev vyřazena jako chybná, nebude vyvolána žádná výjimka; ale proměnné načtené do mezipaměti během provádění větve zůstanou v mezipaměti. V souladu s tím autoři útoku navrhli metodu analýzy přítomnosti dat v mezipaměti (na základě doby přístupu k nim), která, pokud je útok správně zkonstruován, může poskytnout představu o tom, co se stalo ve vyřazeném spekulativní exekuční větev a obsah privilegovanější paměti.
Útok lze provést přibližně následovně. [9]
Chcete-li přečíst bit 0 z chráněné oblasti paměti Ap , útočník:
Během normálního provádění způsobí krok 4 bezpečnostní chybu, ale během spekulativního provádění na zranitelných architekturách je tato chyba dočasně ignorována a pokračuje kroky 5 a 6. V důsledku toho se do mezipaměti načte jedna z hodnot – z adresa A0 u nebo A1 u . Po zjištění stavu větvení procesor zruší všechny výsledky kroků 4, 5 a 6, ale stav mezipaměti zůstane nezměněn.
Poté útočníkovi stačí přečíst „jejich“ adresy A0 u a A1 u , změřit k nim přístupovou dobu. A na základě měření určete, který bit (0 nebo 1) byl přečten z chráněné oblasti paměti A p .
Opakováním tohoto algoritmu pro další bity hodnoty V(A p ) můžete získat celý obsah chráněné oblasti paměti jako celku.
Podle výzkumníků „je potenciálně náchylný k útoku jakýkoli mikroprocesor Intel, který implementuje spouštění mimo provoz , tedy jakýkoli procesor od roku 1995 (s výjimkou Intel Itanium a Intel Atom vydaných před rokem 2013).“ [deset]
Očekává se, že zranitelnost ovlivní největší světové poskytovatele cloudu , zejména Amazon Web Services (AWS) [11] , Google Cloud Platform , Microsoft Azure . Poskytovatelé cloudu umožňují různým uživatelům spouštět své aplikace na sdílených fyzických serverech. Protože programy mohou zpracovávat citlivá uživatelská data, bezpečnostní a izolační opatření poskytovaná procesorem se používají k zabránění neoprávněnému přístupu k privilegované paměti (používané jádrem OS). Útok Meltdown při použití na systémech, které neimplementují softwarovou ochranu (záplaty), umožňuje obejít některá opatření na izolaci paměti a získat přístup pro čtení do paměti operačního systému.
Jeden z autorů publikace o zranitelnosti uvádí, že paravirtualizační systémy ( Xen ) a kontejnerové systémy ( Docker , LXC , Openvz atd.) jsou také náchylné k útoku [12] . Plně virtualizované systémy umožňují uživatelským aplikacím číst pouze paměť hostujícího jádra, nikoli paměť hostitelského systému.
Existuje spolehlivý softwarový způsob boje proti útoku, ve kterém tabulka stránek uživatelských procesů nezobrazuje stránky paměti jádra OS (s výjimkou malého počtu oblastí služeb paměti jádra), technologie Kernel page-table isolation (KPTI) . Zároveň se volání se změnou úrovně oprávnění (zejména systémová volání) poněkud zpomalí, protože se musí dodatečně přepnout na jinou tabulku stránek, která popisuje celou paměť jádra OS.
V některých případech může oprava snížit výkon určitých funkcí, jako jsou aplikace, které velmi často provádějí systémová volání. Zároveň testy Phoronix neukazují žádné zpomalení her běžících na Linuxu s patchem KPTI [17] [18] .