User login

SecIT na Facebooku

SecIT.sk na Facebooku

Reply to comment

3.75
Average: 3.8 (4 votes)
Your rating: None

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.

Nutné pozadí

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é.

Kde chyba vězí, a jak se jí podařilo zneužít

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:

  • Spustit nějakou DOSovou aplikaci (například program debug.exe, který se nachází v systémovém adresáři). Tím se automaticky spustí i NTVDM. Zatím se nejedná o žádnou bezpečnostní chybu. Kdyby se subsystém nespustil, uživatelé s omezenými právy by nemohli pouštět DOSové aplikace.
  • NTVDM se bohužel spustí pod účtem uživatele s omezenými právy. Z toho vyplývá, že uživatel s tímto procesem může manipulovat. Zde je právě zakopán onen pověstný pes.
  • Do spuštěného NTVDM lze vložit libovolný kód, který v kontextu tohoto procesu může zneužít chybu v obsluze #GP a provést libovolnou akci v režimu jádra.

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.

Závěr

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:

Reply

The content of this field is kept private and will not be shown publicly.
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.

Links

SecIT.sk fórum

IRC kanál: #secit
IRC server: irc.secit.sk
Porty (SSL): 6696, 9998
Porty (bez SSL): 6667, 6670

Freeweb by WebSupport.sk

© SecIT.sk - info(at)secit.sk - Všetky práva vyhradené. Žiaden obsah umiestnený na našom portáli a fóre sa nesmie kopírovať!