Rootkity: skrytí přítomnosti v systému

Pojem rootkit se začal masově užívat teprve nedávno. Co se za tímto názvem skrývá? Jak může tato technologie ohrozit bezpečnosti počítačů? V článku se pokusíme podrobně rozebrat toto téma a samozřejmě poradíme, jak se bránit.
Kapitoly článku

Pojem „root“ je označení pro nejvíce privilegovaného uživatele na unixových systémech. Pokud se v minulosti útočníci chtěli dostat do systému UNIX, získat nad ním kontrolu a tu si následně udržet, museli nainstalovat určité soubory a spustit potřebné procesy. Administrátoři těchto systémů jsou ovšem většinou zkušení, proto by byl podobný zásah brzy odhalen. Útočníci tak museli najít nějaký postup, který by umožnil skrytí přítomnosti těchto souborů.

Rootkit je program, který útočníkovi umožňuje skrytí, souborů, procesů a jiných objektů v systému. Je to program, který útočníkovi umožní úplně skrýt svou přítomnost v počítačovém systému. Může tak nainstalovat programy nebo zadní vrátka, které nebudou běžnými postupy odhaleny. Rootkit všeho docílí tím, že jednoduše řečeno, změní základní postupy, jakými systém pracuje.

Uživatelský a kernelový režim

Operační systém Windows, o kterém bude převážně řeč, podporuje dva základní módy (režimy): uživatelský a kernelový. Zatímco uživatelský režim je neprivilegovaný a striktně omezený, kernelový režim (režim jádra) má přímý přístup k paměti a dalšímu hardwaru. Běžné aplikace běží v uživatelském režimu, nicméně systémové služby nebo ovládače zařízení třetích stran vyžadují přímý přistup k funkcím jádra nebo hardwaru. Proces běžící v kernelovém režimu může měnit nebo zničit jakékoli datové struktury v paměti, včetně kódu samotného operačního systému. V uživatelském režimu je sada instrukcí omezena a lze přistupovat pouze do adresového prostoru daného procesu. I účet administrátora a běžného uživatele se liší jen volností v uživatelském režimu.

Je zřejmé, že i rootkity můžeme rozdělit na dvě základní skupiny: rootkity běžící v uživatelském režimu nebo v režimu jádra. V prvním případě může fungovat jako samostatná aplikace nebo jako součást jiné. Rootkit běžící v režimu jádra, například jako ovladač zařízení, má v podstatě neomezenou moc a může snadno poškodit celý systém.

Vše zůstane skryto

Ať je už rootkit naprogramován jakkoli, většinou je jeho účelem skrývat nejen sebe, ale i další aplikace, soubory, adresáře, klíče v registru či procesy. Může také filtrovat informace, které vrací operační systém. Například pokud chce uživatel nebo jiná aplikace provést výpis adresáře, rootkit zachytí volání dané funkce a zpět vrátí změněné nebo úplně jiné informace.

Můžete si představit program netstat.exe, který vypisuje všechna aktuální síťová připojení. Na internetu je dostupný jednoduchý stejně pojmenovaný skript. Původní program je přejmenován a nahrazen. Při volání původního programu proběhne skript a výsledky jsou tak přesměrovány do dočasného souboru. Poté rootkit provede editaci výsledků v tomto souboru (odstraní určitá připojení podle naprogramování) a teprve potom jsou výsledky zobrazeny. Podobně tak lze modifikovat třeba výpis adresářů. Na internetu je dostupných mnoho programů s různými funkcemi založených na podobném principu. Rootkity jsou nebezpečné také z toho důvodu, že mohou skrývat i jiné běžící aplikace. Nebezpečný malware, skrytý pomocí rootkitu, bude neviditelný i pro bezpečnostní programy, které běží v běžném uživatelském režimu.

Aby rootkit splnil svůj účel a mohl změnit fungování systému, využívá techniky zvané „hooking“. Překlad do češtiny je poněkud složitý, i když se v podstatě jedná o jakési „zaháknutí“ se do něčeho. Způsob, jakým rootkity pracují, je postaven na skutečnosti, jak je samotný operační systém Windows navržen - musí být přizpůsobitelný, rozšířitelný a zpětně kompatibilní. Vzniká tak mnoho napadnutelných míst, které může rootkit zneužít.

IAT hooking

IAT (Import Address Table) je jednou ze sekcí spustitelného souboru. Je využívána při jeho spouštění jako tabulka API funkcí, které program potřebuje. Program totiž dopředu neví, kde přesně v paměti jsou uloženy jednotlivé DDL knihovny obsahující potřebné funkce. Při nahrávání spustitelného souboru prochází loader tuto sekci a vyhledává potřebné funkce. Poté ukládá adresy těchto funkcí zpět do IAT.

Modifikací hodnot v IAT může útočník přesměrovat volání původní funkce na škodlivý kód rootkitu. Samotný rootkit může sám zavolat tuto funkci a poté odfiltrovat výsledky, tedy skrýt konkrétní objekty. Velice často je při vysvětlování tohoto problému použit příklad s výpisem souborů v adresáři. K tomu slouží dvě API volání FindFirstFile a FindNextFile. Klient (program) tedy zavolá FindFirstFile, což v podstatě vrátí první soubor. Poté opakované volá FindNextFile dokud není výpis adresáře kompletní. Pokud jsou záznamy v IAT změněny, může rootkit odchytávat vrácené výsledky a při výskytu souboru, který má skrývat, jednoduše říct, že neexistuje. Programy (a to včetně bezpečnostních programů a skenerů) běžící ve Windows, tak neuvidí tyto soubory.

Rootkit nemusí napadat pouze IAT jednotlivých aplikací, ale běžně pracuje už v samotném základu systému, tedy v režimu jádra. Adresy aktuálních systémových funkcí jsou obsaženy v tabulce systémových volání (System Service Descriptor Table). Rootkit běžící v režimu jádra může změnit tyto adresy za škodlivý kód. Tato technika je velmi silná, protože rootkit nenapadá jednotlivé aplikace, ale přímo jádro, což ovlivní fungování celého systému.

Inline function hooking

Tato metoda je o něco dokonalejší než předchozí metody a je také složitější ji detekovat. Namísto nahrazování jednotlivých pointerů v tabulce, inline hook mění samotnou cílovou funkci. Většinou je několik prvních bajtů funkce nahrazeno nepodmíněným skokem na kód rootkitu. Před tímto ještě rootkit uloží nahrazované bajty, aby bylo zachováno původní chování funkce. Poté může rootkit zaměnit výsledky vrácené původní funkcí. Tuto techniku využívá i Microsoft, protože umožňuje záplatovat systém bez restartu počítače.

Layered filter drivers

Za účelem flexibility využívají Windows architekturu, kdy jsou ovládače zařízení „vrstvené na sebe“. Mezi sebou a operačním systémem komunikují pomocí I/O request packetů (IRP). Filter driver je přidán do existujícího ovládače, přičemž zachytává žádosti na zařízení. Většinou slouží k přidání funkcionality, a to bez nutnosti kompletního přepsání ovládače. Některé antivirové programy využívají tuto techniku při skenování souborů na disku. Také rootkity mohou tohoto zneužít k instalací vlastního ovládače, který může vykonávat předem dané instrukce.

IRP hooking

Každý ovládač má tabulku funkcí, která je inicializována při jeho instalaci. Obsahuje adresy funkcí obsluhující různé typy I/O žádostí. Ty ovládač obdrží od klientské aplikace nebo od operačního systému. Komunikace s ovladačem je obvykle realizována pomocí IRP pro jednu z funkcí z tabulky. V případě IRP hookingu rootkit změní hodnoty v tabulce a místo funkce driveru pak bude vykonán škodlivý kód. Vše lze samozřejmě upravit tak, že původní žádost bude vykonána, ale následně budou změněny výsledky.

V této části jsme se tedy pokusili stručně popsat, jakým způsobem rootkity pracují a jaké techniky využívají. Těch je ve skutečnosti mnohem více, proto určitě nemusíme připomínat, že zájemci o podrobnější informace mohou dále hledat na internetu. Začít by určitě měli na stránce rootkit.com.

Kauza Sony BMG

Nyní se na chvíli vrátíme v čase a podíváme se na poměrně velkou aféru, která odstartovala přibližně v březnu 2005. Tehdy společnost Sony BMG začala používat na svá hudební CD ochranu proti kopírování XCP od firmy First 4 Internet, kterou bylo ošetřeno několik desítek alb. Po prvním vložení CD do počítače se zobrazily licenční podmínky, se kterými musel uživatel souhlasit. Poté se do počítače nainstaloval program, který umožnil vypálení pouze určitého počtu kopií a umožňoval přehrávání hudby pouze pomocí dodávaného přehrávače od firmy Sony.

Jak později, konkrétně 31. října 2005, vyšlo najevo, problém byl v tom, že se do počítače bez vědomí uživatele instaloval i rootkit, který skrýval instalovaný software. Ten navíc odesílal společnosti Sony BMG informace o uživateli a to samozřejmě bez jeho vědomí. Na tuto skutečnost přišel odborník na Windows Mark Russinovich, který prováděl testování nové verze aplikace RootkitRevealer (původní článek je dostupný na jeho blogu ). Tato aplikace slouží právě k vyhledávání rootkitů. Podrobněji se na ni ještě podíváme.

Zneužití ochrany

Už samotná skrytá instalace rootkitu do počítače a chování softwaru by se dalo považovat za protizákonné jednání. Mnohem horší však byl fakt, že přítomnosti rootkitu ve statisících počítačů se dala zneužít k virovým nebo jiným útokům. Netrvalo dlouho a nebezpečné kódy se začaly objevovat. Rootkit pracoval v režimu jádra a skrýval všechny soubory, které začínaly řetězcem $sys$. Například trojský kůň Stinx.E se šířil přes e-mail a kdo spustil přílohu, infikoval svůj počítač. Na disk se vir zapsal pod názvem $sys$drv.exe, takže se díky rootkitu stal neviditelný nejen pro systém, ale i pro bezpečnostní programy. Tady jde jasně vidět, jak mohou být rootkity zneužity a jaké bezpečnostní riziko představují.

Jednání Sony BMG v této kauze je i dnes, s časovým odstupem, až neuvěřitelné. Připomeňme například komentář Thomase Hesse, prezidenta divize pro globální digitální obchod: „Většina lidí vůbec netuší, co to rootkit je, takže proč by se o ně měli zajímat?“ Přes to všechno měl pan Hess alespoň částečnou pravdu. Lidé opravdu v mnoha případech netuší, co vlastně rootkity jsou a pohlíží na ně jako na další nebezpečný vir apod. Společnost po veřejné kritice dodala odinstalátor, který však obsahoval chyby. Deinstalované počítače obsahovaly bezpečnostní díru, která byla zneužitelná z webové stránky.

Sony BMG sice utrpěla rány na pověsti a sklidila velkou kritiku, ovšem samotná kauza přinesla na světlo řadu důležitých otázek. A to nejen ohledně autorských práv a možnostem jejich vymáhání, ale i ohledně bezpečnosti samotné. Když připočtěme skutečnost, že First 4 Internet dodávala své ochranné produkty i jiným společnostem, můžeme jen odhadovat, co nás může potkat v budoucnu. Navíc možnost, že tyto techniky mohou být zneužity, jen ukazuje rozsáhlost bezpečnostního rizika.

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,