SWAPGS – nová zranitelnost v mechanismu spekulativního provádění CPU

Výzkumníci z Bitdefenderu identifikován nová zranitelnost (CVE-2019-1125) v mechanismu provádění spekulativních instrukcí moderních CPU, který se nazývá SWAPGS, což odpovídá názvu instrukce procesoru způsobující problém. Zranitelnost umožňuje neprivilegovaný útočník může určit obsah oblastí paměti jádra nebo spuštěných virtuálních strojů. Problém potvrzeno v procesorech Intel (x86_64) a částečně ovlivňuje Procesory AMD, u kterých se neobjevuje hlavní vektor útoku. Dříve implementované metody proti zranitelnostem Spectre a Meltdown nechrání před útokem SWAPGS při použití procesorů Intel, ale opravy již byly navrženy pro Linux, ChromeOS, Android a Windows.

Zranitelnost patří do třídy Spectre v1 a je založena na myšlence obnovy dat z mezipaměti procesoru zbývajících po spekulativním provedení instrukcí. Ke zlepšení výkonu jednotky predikce větvení moderních CPU používají preemptivní provádění některých instrukcí, které se s největší pravděpodobností vykonají, ale bez čekání na výpočet všech faktorů, které určují jejich provedení (například když podmínky větvení nebo přístupové parametry nemají ještě vypočítáno). Pokud se předpověď nepotvrdí, procesor zahodí výsledek spekulativního provádění, ale data zpracovaná během něj zůstávají v mezipaměti procesoru a mohou být obnovena pomocí metod pro určení obsahu mezipaměti prostřednictvím postranních kanálů, analyzujících změnu v přístupu. čas do mezipaměti a neuložených dat.

Zvláštností nového útoku je využití úniku, ke kterému dochází při spekulativním provádění instrukce SWAPGS, která se v operačních systémech používá k nahrazení hodnoty registru GS ​​při přechodu řízení z uživatelského prostoru do jádra OS (dále jen GS hodnota použitá v uživatelském prostoru je nahrazena hodnotou použitou během operací v jádře ). V linuxovém jádře GS ukládá ukazatel per_cpu používaný pro přístup k datům jádra a uživatelský prostor ukládá ukazatele na TLS (Thread Local Storage).

Aby se zabránilo volání instrukce SWAPGS dvakrát při opětovném přístupu k jádru z prostoru jádra nebo při provádění kódu, který nevyžaduje změnu registru GS, je před instrukcí provedena kontrola a podmíněné větvení. Spekulativní prováděcí engine proaktivně pokračuje ve vykonávání kódu s instrukcí SWAPGS, aniž by čekal na výsledek kontroly, a pokud vybraná větev není potvrzena, výsledek zahodí. Může tedy nastat situace, kdy je spekulativně vybrána větev, která nezahrnuje provádění SWAPGS, ale během spekulativního provádění bude hodnota registru GS ​​změněna instrukcí SWAPGS a použita v závislých paměťových operacích, které skončí v mezipaměti CPU.

Výzkumníci navrhli dva scénáře útoku, pro které byly připraveny prototypy exploitů. První scénář je založen na situaci, kdy instrukce SWAPGS není prováděna spekulativně, ačkoli je ve skutečnosti používána při provádění, a druhý je opačný, kdy je instrukce SWAPGS prováděna spekulativně, ačkoli by ve skutečnosti neměla být provedena. Pro každý scénář existují dvě možnosti zneužití: útočník může určit hodnotu na konkrétní adrese v oblasti jádra a útočník může vyhledat konkrétní hodnotu na náhodných adresách v jádře. Provedení útoku trvá dlouho a zneužití může trvat několik hodin, než dojde k úniku.

V linuxovém jádře je problém vyloučeno změnou logiky volání instrukce SWAPGS (blokování spekulativního provádění), podobně jako při opravě jiných zranitelností třídy Spectre v1. Očekává se, že přidaná ochrana bude mít minimální dopad na výkon typické pracovní zátěže. Latence nastává během fáze přepínání mezi uživatelským a jaderným prostorem, což může mít za následek slabý výkon, když například dochází k těžkému systémovému volání z aplikace nebo častému generování NMI a přerušení.

Oprava vyžaduje instalaci aktualizace jádra na hostitelský systém i prostředí hosta a poté restartování systému. Pro deaktivaci ochrany v Linuxu lze použít volbu „nospectre_v1“, která také zakáže opatření k blokování zranitelnosti SWAPGS. Oprava je k dispozici jako náplast pro linuxové jádro, které je již součástí vydání 4.19.65, 5.2.7, 4.14.137, 4.9.188 a 4.4.188. Aktualizace pro distribuce Linuxu ještě nebyly vydány (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, ubuntu). Ve Windows byl problém v tichosti vyřešen Červencová aktualizace. Společnost Google připravený oprava pro jádro 4.19 dodávaná s ChromeOS a Android.

Podle výzkumníků z Bitdefenderu byl Intel o problému informován již v srpnu loňského roku. Bylo rozhodnuto problém opravit programově, do koordinovaného vývoje opravy se zapojili vývojáři z Microsoftu, Googlu a linuxového jádra. Na starší procesory Intel, starší než Ivy Bridge, je mnohem obtížnější zaútočit kvůli chybějící podpoře instrukce WRGSBASE použité v exploitu. Systémy ARM, POWER, SPARC, MIPS a RISC-V nejsou tímto problémem ovlivněny, protože nepodporují instrukci SWAPGS.

Problém se týká především majitelů procesorů Intel -
Na systémech AMD se podařilo reprodukovat pouze druhý scénář útoku, který je omezen na spekulativní zpracování základní hodnoty registru GS, pomocí kterého lze hledat konkrétní hodnoty v náhodných paměťových oblastech. Chcete-li zablokovat tuto možnost útoku je dostačující stávající metody ochrany proti Spectre v1.

Zdroj: opennet.ru

Přidat komentář