Před pár dny po Internetu začaly kolovat zprávy o "nové" zranitelnosti operačních systémů Windows, která umožňuje libovolnému uživateli získat systémová oprávnění. Situace je o to závažnější, že zranitelnost pravděpodobně postihuje systémy od Windows 2000 až do Windows 7.
Windows umožňují spouštět i staré 16bitové aplikace určené pro MS-DOS. Tuto činnost má na starosti subsystém NTVDM. DOSové aplikace běží v tzv. virtuálním módu 8086, což je speciální mód, který podporují procesory kompatibilní s x86. V8086 je téměř dokonale virtualizovaným prostředím, ve kterém před mnoha lety běžel MS-DOS. 16bitové aplikace až na pár výjimek nemohou poznat, zda běží ve V8086 či ne.
Mód V8086 však není samospasitelný. Musí nad ním bdít program zvaný jednoduše V8086 monitor, který bude emulovat DOSovým aplikacím komunikaci s hardwarem a obsluhu výjimek a přerušení. A ona kritická chyba se nachází právě při emulaci přerušení pro mód V8086.
Emulace obsluhy přerušení je rozdělena do dvou částí, které musí být spolu přesně synchronizovány. Jak dokazuje proof-of-concept exploit, podaří-li se obsluhu přerušení pro V8086 desynchronizovat, je možné vykonávat kód v režimu jádra - tedy mít přístup absolutně ke všem dveřím, které jsou pro běžné uživatele (ale i administrátory) zamčené.
Chyba, která umožňuje desynchronizaci provést, se nachází v obsluze přerušení #GP (General Protection Fault). Toto přerušení je Intelem určeno i k emulaci obsluhy přerušení V8086.
Tato chyba v obsluze #GP však nemůže být zneužita sama o sobě k získání systémových oprávnění. Může jí zenužít pouze monitor V8086 (NTVDM), Jiné procesy k tomu potřebují oprávnění SeTcbPrivilege, které si mohou přivlastnit až administrátoři.
Bohužel i uživatel s omezenými právy je schopen spustit subsystém NTVDM a donutit tento proces k zneužití chyby v obsluze #GP. Může to provést následujícím způsobem:
Samotné chyby v #GP by uživatel s omezeným oprávněním zneužít nemohl. Problém tkví ve špatné implementaci kontroly volání funkce NtVdmControl, která se právě k zneužití chyby obsluhy #GP používá. Tuto funkci může volat jen minitor V8086.
Předpokládá se, že obě chyby (ale zvlášť ta v #GP) se týkají velmi starého kódu, který se v operačním systému nachází možná už od verze NT 3.51. A Windows NT 3.51 se objevila na trhu v roce 1995.
Sám jsem exploit úspěšně vyzkoušel na plně aktualizovaných 32bitových Windows 7 Professional. Protože se jedná o velmi straou zranitelnost (která však byla objevena teprve před půl rokem), jsou postiženy i systémy Windows 2000, Windows XP, Windows Vista, Windows Server 2003 a Windows Server 2008.
Exploit je velmi uživatelsky přívětivý. Stačí jej pouze spustit a od systémových oprávnění vás dělí pouze zlomek sekundy. K binárkám je přiložen i zdrojový kód, který ukazuje, že celá aplikace je napsána přehledně a umožňuje i méně zkušenému člověku (tím myslím i osoby některými označované jako script-kiddies) vytvořit si na jeho bázi vlastní škodlivý kód. Pozitivní na celé věci je snad jen fakt, že nucení NTVDM k vykonávání cizího kódu pravděpodobně zaznamenají systémy HIPS.
Kód exploitu funguje pouze na 32bitových verzích Windows. Pokládám však za velmi pravděpodobné, že jej půjde upravit i pro 64bitová Windows, což by znamenalo naprosté obejití filosofie digitálně podepsaných ovladačů jádra. Ale třeba se mýlím.
Na závěr ještě podotknu, že autor exploitu tuto zranitelnost oznámil společnosti Microsoft v červnu roku 2009. Chyba však dosud nebyla opravena.
Použité zdroje:
Komentáre
Chybička
RE: Chybička
Windows umoznuji spoustet i aplikace pro DOS
Windows v sobě mají emulátor
Part - 1 - Nieje to iny
Chcel som sem dat dlhsi
To nás mrzí, ale komentáre