SWAPGS — nová zraniteľnosť v mechanizme špekulatívneho vykonávania CPU

Výskumníci zo spoločnosti Bitdefender odhalili novú zraniteľnosť (CVE-2019-1125) v mechanizme špekulatívneho vykonávania inštrukcií moderných CPU, ktorá dostala názov SWAPGS, v súlade s názvom procesorovej inštrukcie, ktorá problém spôsobila. Zraniteľnosť umožňuje umožňuje neoprávnenému útočníkovi zistiť obsah oblastí pamäte jadra alebo spustených virtuálnych strojov. Problém bol potvrdený v procesoroch Intel (x86_64) a čiastočne týka v procesoroch AMD, pre ktoré sa nezjavuje hlavný vektor útoku. Predtým implementované metódy proti zraniteľnostiam Spectre a Meltdown nechránia pred útokom SWAPGS pri používaní procesorov Intel, ale pre Linux, ChromeOS, Android a Windows už boli navrhnuté opravy.

Zraniteľnosť patrí do triedy Spectre v1 a zakladá sa na myšlienke obnovy dát z procesorovej cache, ktoré zostali po špekulatívnom vykonávaní inštrukcií. Bloky predpovedania prechodov moderných CPU na zvýšenie výkonu používajú predbežné vykonávanie určitých inštrukcií, ktoré pravdepodobne budú vykonané, ale nečakajú na výpočet všetkých faktorov, ktoré určujú ich vykonanie (napríklad keď ešte neboli vypočítané podmienky prechodu alebo parametre prístupu). Ak predpoklad nie je potvrdený, procesor zahodí výsledok špekulatívneho vykonávania, ale dáta spracované v jeho priebehu zostávajú v procesorovej cache a môžu byť obnovené pomocou metód na určenie obsahu cache cez vedľajšie kanály, ktoré analyzujú zmenu času prístupu k vyrovnávanej a nevyrovnávanej pamäti.

Charakteristika nového útoku spočíva v využívaní úniku, ktorý vzniká počas špekulatívneho vykonávania inštrukcie SWAPGS, ktorá sa používa v operačných systémoch na nahradenie hodnoty registra GS pri prechode riadenia z užívateľského priestoru do jadra OS (používaná hodnota GS v užívateľskom priestore sa nahrádza hodnotou používanou pri operáciách v jadre). V jadre Linuxu sa v GS uchováva ukazovateľ per_cpu, ktorý sa používa na prístup k dátam jadra, a v užívateľskom priestore sú ukazovatele na TLS (Thread Local Storage).

Aby sa zabránilo dvojitému vyvolaniu inštrukcie SWAPGS pri opakovanom volaní jadra z priestoru jadra alebo keď sa vykonáva kód, ktorý nevyžaduje zmenu registra GS, pred inštrukciou sa vykonáva kontrola a podmienený prechod. Mechanizmus špekulatívneho vykonávania prechádza vopred k vykonávaniu kódu s inštrukciou SWAPGS, aniž by čakal na výsledok kontroly, a ak zvolená vetva nie je potvrdená, ignoruje výsledok. Tak sa môže vyskytnúť situácia, kedy špekulatívne bude zvolená vetva, ktorá nepredpokladá vykonávanie SWAPGS, ale počas špekulatívneho vykonávania sa hodnota registra GS zmení inštrukciou SWAPGS a použije sa v závislých operáciách s pamäťou, ktoré sa ukladajú do CPU cache.

Vedci navrhli dva scenáre útoku, pre ktoré boli pripravené prototypy exploitov. Prvý scenár vychádza z situácie, keď sa inštrukcia SWAPGS nevykonáva špekulatívne, hoci sa používa pri skutočnej vykonávanej operácii, a druhý - naopak, keď sa inštrukcia SWAPGS vykonáva špekulatívne, hoci by sa nemala. Pre každý scenár sú navrhnuté dve možnosti zneužitia: útočník môže určiť hodnotu na určitú adresu v oblasti jadra a útočník môže vykonať hľadanie určitej hodnoty na náhodných adresách v jadre. Vykonávanie útoku trvá veľa času a na organizáciu úniku môže byť potrebné vykonať exploit po niekoľko hodín.

Prehrajte video

V jadre Linux je problém bola odstránená prostredníctvom zmeny logiky vyvolávania inštrukcie SWAPGS (blokovanie špekulatívneho vykonávania), podobne ako pri oprave iných zraniteľností triedy Spectre v1. Predpokladá sa, že pridaná ochrana minimálne ovplyvní výkon typických pracovných záťaží. Zdržanie vzniká v štádiu prechodu medzi priestorom používateľa a jadrom, čo môže viesť k zníženiu výkonu, napríklad pri intenzívnom vykonávaní systémových volaní z aplikácie alebo pri častom generovaní NMI a prerušeniach.

Oprava si vyžaduje inštaláciu aktualizácie jadra v hlavnom systéme aj v hosťujúcich prostrediach s následným reštartovaním systému. Na deaktiváciu ochrany v Linuxe je možné použiť možnosť „nospectre_v1“, ktorá taktiež vypína opatrenia na blokovanie zraniteľnosti SWAPGS. Oprava je dostupná vo forme patchu jadra Linux, ktoré už bolo zahrnuté do vydaní 4.19.65, 5.2.7, 4.14.137, 4.9.188 a 4.4.188. Aktualizácie pre distribúcie Linux zatiaľ neboli vydané (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). V systéme Windows bola problém bez zbytočného rozruchu odstránená v júlovej aktualizácii. Spoločnosť Google pripravila opravný balík pre jadro 4.19, dodávané v ChromeOS a Android.

Podľa vyhlásení výskumníkov zo spoločnosti Bitdefender, bola spoločnosť Intel o probléme informovaná už v auguste minulého roka. Problém sa rozhodol vyriešiť softvérovo, pričom do koordinovanej výroby opravy boli zapojení vývojári z Microsoftu, Googlu a jadra Linux. Staršie procesory Intel, do Ivy Bridge, sú výrazne ťažšie napadnuteľné kvôli nedostatku podpory inštrukcie WRGSBASE, použitej v explóite. Systémy ARM, POWER, SPARC, MIPS a RISC-V nie sú zraniteľné, pretože nepodporujú inštrukciu SWAPGS.

Problém hlavne ohrozuje vlastníkov procesorov Intel —
na systémoch AMD sa podarilo reprodukovať iba druhý scenár útoku, ktorý je obmedzený na špekulatívne spracovanie základnej hodnoty registru GS, ktorú je možné využiť na vyhľadávanie určitých hodnôt v náhodných oblastiach pamäte. Na blokovanie tejto varianty útoku stačí existujúcich metód ochrany pred zraniteľnosťami Spectre v1.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster