Skrývanie vecí na platforme Windows: Register Windows
V tomto miniseriálu se převtělíme do role útočníka. Nebude nás ale zajímat, jak se do cílového počítače nabourat nebo jak v rámci jeho operačního systému získat dostatečná oprávnění. Předpokládáme, že v tomto ohledu útočník již dosáhl úspěchu a jeho další starostí je se na daném stroji udržet. Popíšeme si několik způsobů, jak skrýt různé aspekty své přítomnosti před uživatelem a přidáme ještě pár ošklivých triků. Tento článek pokrývá první třetinu mojí přednášky na konferenci Hakcerfest 2015.
Jako útočníka nás budou zajímat tři oblasti, kde skrývání dává nějaký smysl: registry, souborový systém a síťová komunikace. Pochopení textu by nemělo vyžadovat žádné speciální znalosti; vše potřebné se pokusím v rámci možností vysvětlit, i když třeba v zjednodušené (a ne úplně pravdivé) podobě.
Registry
Registr Windows lze chápat jako úložiště specializované na uchovávání nastavení všeho druhu. Z logického pohledu se jedná o strukturu podobnou souborovému systému; registr tvoří strom sestávající ze dvou druhů objektů:
- Hodnot (registry values) sloužících pro vlastní uchovávání dat. Od souboru se hodnota odlišuje zejména tím, že má pevně definovaný typ dat, která v ní lze ukládat (např. celé číslo či řetězec).
- Klíčů (registry key) plnících roli adresářů. Každý klíč může obsahovat klíče a hodnoty, stejně jako obsah adresáře tvoří další složky a soubory. Klíče tak staví stromovou strukturu registru stejným způsobem jako adresáře u souborového systému.
Na rozdíl od souborového systému je registr specializován na ukládání pouze malých objemů dat. Nedisponuje prostředky, jak například přečíst či změnit pouze část dat určité registrové hodnoty. Vždy pracuje s danou hodnotou jako s celkem. Do jedné hodnoty sice lze uložit i velké množství dat (maximální velikost je omezena na 2 GB), ale práce s nimi bude pomalá a paměťově náročná.
Strom registru je fyzicky uložen v několika souborech na disku a některé jeho části se nacházejí pouze v paměti a při každém startu systému se vytvářejí znovu. Uživatelé registru se o jeho fyzickou strukturu zajímat příliš nemusí, jelikož jej od ní jádro úspěšně odstiňuje.
Pro útočníka patří registr mezi zajímavé oblasti, protože obsahuje velké množství systémových nastavení, případně i nastavení různých nainstalovaných programů. Vhodnou změnou obsahu určitých registrových hodnot lze dosáhnout automatického spuštění programů, donucení aplikací k používání určitých DLL knihoven či načtení ovladače do jádra. Z tohoto důvodu může být pro útočníka zajímavé nejen takové oblasti registru znát, ale i je kontrolovat (například vědět, kdo s nimi právě pracuje). A Windows mu v tomto ohledu vycházejí vstříc.
Data registru jsou ukládána v binární podobě, takže není rozumné je číst či měnit přímo. Pro takové situace existuje program Editor registru (regedit.exe), který dovoluje prohlížet obsah registrového stromu a měnit ho. Informace o významu jednotlivých klíčů a hodnot ale neposkytuje; ty si musí uživatel obstarat sám. Ukázku programu vidíte na obrázku 1. Klíče tvořící stromovou strukturu jsou zobrazeny v levé části okna, pravá slouží k zobrazení seznamu hodnot aktuálně vybraného klíče, jehož celé jméno lze přečíst ve stavovém řádku. O hodnotách se z pravé části dozvíte jméno, typ uložených dat a lidsky čitelné zobrazení těchto dat (konkrétní podoba závisí na typu).
Obrázek 1: Editor registru – základní nástroj pro prohlížení a manipulaci
Filtrování operací
Ovladače mohou požádat systém, aby je upozorňoval, kdykoliv nějaká entita s registrem pracuje. Konkrétně takové upozornění dostávají v následujících situacích:
- těsně před tím, než je daná operace vykonána,
- těsně poté, co je vykonána (nebo pokus o její vykonání skončí nezdarem).
Z tabulky 1 shrnující možnosti, které ovladačům jádro v oblasti sledování registrových aktivit poskytuje, vidíte, že od Windows Vista má útočník nad registrem téměř plnou kontrolu. Nejenže může operace, které se mu nelíbí, blokovat (entita požadující takovou operaci obdrží chybový kód specifikovaný útočníkem) či měnit jejich parametry a výsledky, ale dokonce je možné dosáhnout emulace – ovladač útočníka se o celou operaci postará sám a na samotný registr nepřijde řada.
Tabulka 1: Možnosti ovladačů ohledně manipulace s registrovými operacemi v různých verzích Windows
Verze OS | Monitorování | Blokování | Změna | Emulace |
---|---|---|---|---|
XP SP2/3 | Jen před operací | ANO | NE | NE |
W2k3 | ANO | ANO | NE | NE |
Vista a novější | ANO | ANO | ANO | ANO |
Možnost emulace registrových operací dovoluje útočníkovi nejen efektivně skrývat obsah libovolných klíčů a hodnot před zraky běžících aplikací a ostatních komponent jádra, ale i zpřístupnit obsah, který v registru vůbec neexistuje. Tato schopnost, spolu s faktem, že útočník u každé detekované registrové operace ví, která aplikace se o ni pokouší, dovoluje provádění ošklivostí různého druhu.
Pokud váš překvapuje, že jsme nikde nevedl, jak se výše popisované
rozhraní pro filtrování operací nad registrem nazývá, vězte, že bych
vám jeho jméno rád prozradil. Bohužel jsem v dokumentaci na nic takového
nenarazil. Proto je nejlepší se na něj odkazovat buď přes název funkce
sloužící k registraci za účelem filtrování operací
(CmRegisterCallback
či CmRegisterCallbackEx
), nebo
označovat ovladače toto rozhraní používající slovním spojením
registry filter driver
.