Skrývanie vecí na platforme Windows: Zlo v registri prakticky
Tento článek se zabývá popisem schopností projektu RegHider, který je tvořen převážně ovladačem schopným manipulovat s obsahem registru. Nečekejte tedy žádnou teorii.
RegHider
RegHider je názornou ukázkou toho, co útočník může změnami v chování registru dokázat. Jedná se o ovladač, který svému okolí poskytuje následující služby:
- Skrývání registrových klíčů. Zadané klíče jsou skryty ze seznamu podklíčů jejich rodičů. Navíc, pokud se někdo dotáže na počet potomků určitého klíče, výstupní hodnota je upravena, aby skryté klíče nebyly prozrazeny. Pokud však entita jméno skrytého klíče zná, může k němu volně přistupovat.
- Vymýšlení registrových hodnot. Ovladač dokáže celkem důvěryhodně předstírat, že zadaný registrový klíč obsahuje hodnotu určitého jména, typu a daty, i když v registru žádná taková hodnota neexistuje. Navíc tuto hodnotu zobrazuje pouze procesům, jejichž jméno končí zadaným sufixem.
V praktické ukázce vidíte, že chvíli po přihlášení uživatele do 64bitové verze systému Windows 8.1 došlo k samovolnému spuštění Příkazového řádku. K samovolnému spuštění došlo proto, že aplikace Příkazového řádku byla uvedena v hodnotě s názvem Pseudo v klíči
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Průzkumník Windows v rámci své inicializace tento klíč prohlíží a
pokusí se spustit každý program, který v některé z jeho hodnot nalezne.
Daný klíč patří mezi ty velmi známé a často užívané i pro samovolné
spouštění škodlivých programů. Ovladač RegHider
v
tomto ohledu zavádí novinku v podobě snížení viditelnosti hodnoty
Pseudo
– vidí ji totiž pouze Průzkumník Windows,
pouze pro něho je také určena.
Problém zobrazování určitého obsahu (nejen registru) pouze určitým aplikacím může značně zamotat hlavu nástrojům pro odhalení skrytých či vymyšlených objektů (v dobách své největší slávy se tato skupina nástrojů označovala jako antirootkity). Aby takový nástroj detekoval nesrovnalosti tohoto druhu, musel by je hledat „převlečen“ za entitu, pro kterou jsou zviditelněny (nebo skryty). V ostatních případech nemůže nic najít, protože z jeho pohledu k žádnému skrývání či vymýšlení nedochází.
Útočník může ale zajít ještě dále – může určité aplikace mást
skrýváním a vymýšlením obsahu registru pouze v okamžicích, kdy se na
něj dotazují. Například na výše uvedený Run klíč se Průzkumník
dotazuje pouze při své inicializaci, takže by teoreticky stačilo, kdyby
RegHider emuloval hodnotu Pseudo
, pouze dokud ji
Průzkumník nepřečte. Ve zbývajícím čase, po který poběží, se již na
ní nepodívá, tudíž nemá smysl vytvářet její iluzi.
Dalším zajímavým (a dobře známým) místem, kde by se útočníkovi mohlo hodit obsah registru trochu upravit, je klíč
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
a jeho hodnota AppInit_DLLs. Jedná se o řetězcovou hodnotu uvádějící seznam DLL knihoven (jako oddělovač slouží znak čárky ","). Tyto knihovny se pokusí načíst každá aplikace, která používá systémovou knihovnu user32.dll. Pokud tedy ovladač útočníka do tohoto seznamu "přidá" název své vlastní knihovny, dosáhne jejího načtení (a spuštění) prakticky v každé aplikaci používající grafické uživatelské rozhraní.
Po většinu času však útočník hodnotu AppInit_DLLs nijak emulovat nemusí, protože má význam pouze během inicializace knihovny user32.dll, a to se děje téměř výhradně v rané fázi běhu aplikace. Útočníkovi tedy stačí detekovat, že určitá aplikace právě načetla do paměti user32.dll (to pro ovladač není problém), "přidat" pro ni speciální obsah do hodnoty AppInit_DLLs a emulovat jej tam, dokud si tuto hodnotu aplikace nepřečte. Pak může obsah z hodnoty opět "odebrat". Navenek (například přes Editor registru) "změna" v obsahu hodnoty nebude viditelná. Tuto operaci zatím RegHider nepodporuje.
Detekce ošklivostí
I když se z dosavadního popisu zdá, že útočník je nepřemožitelný, nemusí tomu být zdaleka tak. Nástroje pro detekci nesrovnalostí mají minimálně tři možnosti, jak postupovat:
- Útok na implementaci útočníka. Pokud má útočník dosáhnout svých cílů (skrytí přítomnosti či jiná změna obsahu registru), nemůže si dovolit žádnou nepozornost. Ač má oproti například skrývání entit souborového systému situaci značně zjednodušenou, i tak lze pouhým použitím funkcí pro práci s registrem získat zajímavé vědomosti a případně implementaci útočníka „prostřelit“ nebo alespoň získat kvalifikované podezření. Mezi nativní registrové operace patří třeba možnost uložení určitého podstromu registru do souboru. Útočník je v takovém případě informován pouze o tom, jaký podstrom se ukládá; musí si sám odvodit, zda se tato operace nějak dotýká jím zmanipulovaného obsahu. Pokud by se snažil o skrývání určitých klíčů, může je těsně před provedením samotného uložení do souboru z registru odstranit a po dokončení operace je tam opět vrátit.
- Offline analýza. Soubor obsahující uložený podstrom registru je možné porovnat s jeho kopií buď na běžícím sytému, nebo i offline (soubor s podstromem lze do registru připojit na jiné místo). Další možnost představuje manuální průzkum podstromu bez využití funkcí rozhraní Windows API. Mezi zajímavé projekty v této oblasti jistě patří knihovna Offline Registry Library či projekt chntpw. Oba disponují vlastním parserem registrových struktur. Nevýhoda offline analýzy spočívá mimo jiné ve faktu, že ne všechny klíče (a hodnoty) se do souboru podstromu ukládají. Při vytváření klíče je možné specifikovat speciální příznak, který instruuje jádro, že daný klíč a jeho hodnoty mohou existovat pouze v paměti.
- Online analýza. Další možnost obránce představuje přímý přístup do datových struktur registru bez použití libovolné úrovně registrových API. Jádro se snaží uchovávat celý registrový strom v paměti, přičemž podstromy původně uložené na disku jsou do paměti nějakým způsobem mapovány (buď přímo, nebo načtením z disku). S dostatečnou znalostí těchto datových struktur a fyzické podoby registru je možné vytvořit vlastní implementaci registrových API a ty používat za účelem detekce nesrovnalostí.
Zdroje a odkazy
Tímto končí povídání o ošklivostech, které může zákeřný ovladač (stvořený zákeřným útočníkem) natropit v registru. Příště se podíváme do oblasti souborových systémů. Není však na škodu uvést několik odkazů souvisejících s tímto článkem.
- Filtering Registry Calls
- Ukázka programu RegHider
- Ukázkové zdrojáky včetně RegHideru
- Offline Registry Library
- Chntpw
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 838x (5.92 MB)