Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Skrývání věcí na platformě Windows: Zlo v registru 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.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 781x (5.92 MB)

 

Všechny články v sekci
Pokročilé postupy pro Windows
Článek pro vás napsal Martin Dráb
Avatar
Uživatelské hodnocení:
6 hlasů
Autor se věnuje studiu obecné teorie operačních systémů, vnitřnímu uspořádání jádra OS Windows, trochu také matematice a šifrování
Aktivity