SWAPGS — nová zranitelnost ve mechanismu spekulativního vykonávání CPU

Výzkumníci ze společnosti Bitdefender odhalili novou zranitelnost (CVE-2019-1125) ve mechanismu spekulativního vykonávání instrukcí moderních CPU, která získala název SWAPGS, odpovídající názvu procesorové instrukce, která problém vyvolává. Zranitelnost umožňuje nedprivilegovanému útočníkovi umožňuje určit obsah oblastí paměti jádra nebo spuštěných virtuálních strojů. Problém byla potvrzena v procesorech Intel (x86_64) a částečně ovlivňuje v procesorech AMD, u kterých nenastává hlavní vektor útoku. Dříve realizované metody proti zranitelnostem Spectre a Meltdown nechrání před útokem SWAPGS při použití procesorů Intel, ale pro Linux, ChromeOS, Android a Windows již byly navrženy opravy.

Zranitelnost patří do třídy Spectre v1 a vychází z myšlenky obnovit data z procesorové cache, která zůstala po spekulativním vykonávání instrukcí. Bloky předpovídání přechodů moderních CPU pro zvýšení výkonu používají předběžné vykonávání některých instrukcí, které pravděpodobně budou vykonány, avšak nečekají na výpočty všech faktorů určujících jejich vykonání (např. když ještě nejsou vypočítány podmínky přechodu nebo parametry přístupu). Pokud prognóza není potvrzena, procesor odmítá výsledek spekulativního vykonávání, ale zpracovaná data v jeho průběhu zůstávají v procesorové cache a mohou být obnovena pomocí metod určení obsahu cache prostřednictvím bočních kanálů, analyzujících změnu času přístupu k cachovaným a necacheovaným datům.

Specifikum nového útoku spočívá v využití úniku, který vzniká během spekulativního vykonávání instrukce SWAPGS, jež se používá v operačních systémech k nahrazení hodnoty registru GS při přechodu řízení z prostoru uživatele do jádra OS (používaná hodnota GS v prostoru uživatele je nahrazena hodnotou, která se používá při operacích v jádře). V jádře Linux je v GS uložen ukazatel per_cpu, který se používá pro přístup k datům jádra, a v prostoru uživatele jsou ukazatele na TLS (Thread Local Storage).

Aby se vyloučilo dvojí volání instrukce SWAPGS při opětovném volání jádra ze souborového prostoru jádra nebo když se vykonává kód, který nevyžaduje změnu registru GS, provádí se před instrukcí kontrola a podmíněný skok. Mechanismus spekulativního provádění předem přechází k provádění kódu s instrukcí SWAPGS, aniž by čekal na výsledek kontroly, a pokud vybraný větev nebyla potvrzena, výsledek je odmítnut. Takto může nastat situace, kdy spekulativně je vybrána větev, která nepočítá s vykonáváním SWAPGS, ale v průběhu spekulativního vykonávání bude hodnota registru GS změněna instrukcí SWAPGS a použita v závislých operacích s pamětí, které se usazují v keši CPU.

Výzkumníci navrhli dva scénáře útoku, pro které byly připraveny prototypy exploitů. První scénář vychází ze situace, kdy instrukce SWAPGS není vykonávána spekulativně, i když je skutečně použita, a druhý - naopak, když je instrukce SWAPGS vykonávána spekulativně, i když by neměla. Pro každý scénář jsou připraveny dva varianty exploatace: útočník může určit hodnotu na určité adrese ve vyhrazeném prostoru jádra a útočník může provádět vyhledávání určité hodnoty na náhodných adresách v jádře. Provádění útoku zabere spoustu času a pro organizaci úniku může být třeba provést exploit po několik hodin.

Přehrát video

V jádře Linux je problém odstraněna změnou logiky volání instrukce SWAPGS (blokování spekulativního provádění), obdobně jako opravy dalších zranitelností třídy Spectre v1. Předpokládá se, že přidaná ochrana minimálně ovlivní výkon typických pracovních zátěží. Zpoždění nastává během přepínání mezi uživatelským prostorem a jádrem, což může vést ke snížení výkonu, například při intenzivním provádění systémových volání z aplikace nebo časté generování NMI a přerušení.

Oprava vyžaduje instalaci aktualizace jádra jak na hlavním systému, tak v hostitelských prostředích, se následným restartem systému. Pro deaktivaci ochrany v systému Linux může být použita volba „nospectre_v1“, která také deaktivuje opatření k blokování zranitelnosti SWAPGS. Oprava je dostupná ve formě patche pro jádro Linux, 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 Linux zatím nebyly vydány (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). Problém ve Windows byl bez zbytečného povyku odstraněn v červnové aktualizaci. Společnost Google připravila opravila jádro 4.19 dodávané v ChromeOS a Android.

Podle tvrzení výzkumníků ze společnosti Bitdefender byl Intel o problému informován už v srpnu minulého roku. Problém bylo rozhodnuto odstranit softwarově, k čemuž byli přizváni vývojáři z Microsoftu, Google a jádra Linux. Starší procesory Intel, před Ivy Bridge, jsou napadány výrazně obtížněji kvůli absenci podpory instrukce WRGSBASE, která byla využita v exploitu. Systémy ARM, POWER, SPARC, MIPS a RISC-V problémem nejsou dotčeny, protože instrukci SWAPGS nepodporují.

Problém především ohrožuje majitele procesorů Intel —
na systémech AMD se podařilo reprodukovat pouze druhý scénář útoku, který se omezuje na spekulativní zpracování základní hodnoty registru GS, což lze použít k vyhledávání určitých hodnot v náhodných oblastech paměti. Pro zablokování této varianty útoku stačí existují metody ochrany proti zranitelnostem Spectre v1.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster