Většina škodlivého kódu je napsaná velmi lamersky. Proto jsou programy jako HjackThis nebo Combofix stále našimi dobrými pomocníky, ačkoliv mají fatální slabiny. Existuje však i malá část malware, která je napsána velmi zkušenými a vnitřností operačního systému znalými jedinci. Někteří (včetně mě) považují Rustock C právě za takový kousek. Proto si o něm povíme něco bližšího.
Písmeno "C" značí už třetí verzi tohoto rootkitu. Přechozí verze jsou zajímavé také, protože jejich objevení znamenalo velký posun ve vývoji antirootkitových programů, ikdyž jen některých. S Rustockem B má stále problémy mnoho antirootkitů, zvláště od AV firem. Použité techniky se postupně zlepšovaly, až dosáhly vysokého stupně dokonalosti v Rustocku C.
Úkol všech tří dílů tohoto malwaru je stejný - spamování, přičemž rootkit se snaží zajistit skrytí škodlivé činnosti jak před uživatelovým okem, tak před firewally.
Není přesně známo, kdy byl Rustock C vypuštěn. Předpokládá se, že se tak mohlo stát v lednu 2007. V červenci byl objeven nezávislou skupinou výzkumíků, avšak antivirové firmy stále popíraly jeho existenci. Až na jaře letošního roku jej objevili pracovníci společnosti, jenž vyvíjí antivirus DrWeb. Rustock C tedy mohl přežívat nedetekován i 15 měsíců. Neslyšel jsem o rootkitu, kterému by se podařil takový kousek. Za tímto úspěchem kupodivu nestojí žádná revoluční technika skrývání, ale trochu neobvyklé použití technik již známých. Rootkit mohl být bez větších problémů detekován antirootkity, které existovaly v době jeho vzniku. A například IceSword jej detekoval, ovšem vyžadovalo to velkou trpělivost od uživatele.
Rootkit používá zejména techniky "inline" hákování. Čásk kódu hákované funkce je přepsán skokem na rutinu Rustocku, která může řízení vrátit originální funkci. Zmanipuluje však její činnost, pokud by mohlo jinak dojít k odhalení. To není nic neobvyklého, mnoho rootkitů a virů používá stejnou techniku. Většinou ale přepisují začátek funkce následující instrukcí:
Jmp RutinaMalwaru
jenž je pět bajtů dlouhá. Protože drtivá většina rutin má pětibajtový prolog, je takové hákování velmi triviální (proto se také používá). Rustock C ale vkládá do ubohé hákované funkce následující kód:
push cs
nop
sub esp, 4
mov dword ptr [esp], RutinaMalwaru
retf
Tato sekvence má více jak deset bajtů, tudíž její vložení do cílové funkce je o mnoho složitější. Ale antirootkity ji nepovažovaly za hákování. Tudíž skeny systému z tohoto hlediska neobjevily nic podezřelého. A o to jde především, že?
Rustock C se skládá v podstatě ze dvou částí: z ovladače-rootkitu a z DLL knihovny, jenž je zodpovědná za posílání spamu. Tato DLL knihovna se nachází v procesu winlogon.exe, leč samozřejmě ji běžnými způsoby nenajdete. Vlákna, otevřené handly a paměťové prostředky, kterých knihovna využívá, jsou skryty opět pomocí hákování v jádře operačního systému. Většina rootkitů k tomuto účelu využívá změnu System Service Dispatch Table. To je sice efektnivní, ale snadno detekovatelné. Rustock C však postupuje jinak - pozmění kód rutiny nt!_KiSystemService, jenž je zodpovědná za předání řízení na příslušnou adresu v SSDT. SSDT jako taková není pozměněna, ale kód, který ji používá, ano. Rustock C si dává pozor například na tato systémová volání:
NtCreateThread
NtDelayExecution
NtDuplicateObject
NtOpenThread
NtProtectVirtualMemory
NtQuerySystemInformation
NtReadVirtualMemory
NtResumeThread
NtTerminateProcess
NtTerminateThread
NtWriteVirtualMemory
Některé z těchto funkcí přitom programy využívají, pokud chtějí zjišťovat nějaká fakta o cizím procesu. Například manipulací s výsledky volání NtQuerySystemInformation rootkit docílí skrytí vláken a otevřených handlů. Hákování paměťových funkcí zabrání snadnému nalezení DLL knihovny a manipulace se strukturou Process Environment Block (PEB) procesu winlogon.exe celou skrývačku dokončí. Winlogon.exe je také proces, kterému věří firewally, což je další výhodou pro Rustock C, který však nespoléhá jenom na tento fakt, ale pozměňuje kód i v některých síťových ovladačích (tcpip.sys například).
Rootkit samozřejmě nezahálí ani s ochranou svého ovladače v paměti jádra. Není tam totiž žádný ovladač - vše je vykonáváno několika vlákny nad pamětí, jenž nikomu nepatří. Soubor ovladače rootkitu nenajdete ani na disku, protože tento malware infikuje hodné ovladače Microsoftu. Tohle považuji asi za největší vychytávku. Infekce souboru se samozřejmě projeví ve změně jeho velikosti. Rootkit však hákuje ovladače souborového systému a operačnímu systému se snaží namluvit, že soubor je čístý (má stejnou velikost a stejný obsah jako legitimní ovladač Microsoftu). Rustock ale nezůstává zahnízděn v jednom souboru, ale postupem častu "cestuje" - vrátí aktuálně nakažený soubor ovladače do původního stavu a infikuje jiný. Další vychytávka související se soubory slouží k oklamání antirootkitů - soubory ovladačů, které jsou v jádře patchovány, jsou při načítání z disku upraveny tak, aby háky nebyly vidět. To oklamalo například GMER. Vychytávky fungují jak na NTFS, tak i na FAT32.
Další silnou stránkou rootkitu je šifrování. Kód rootkitu je šifrován (a to v několika vrstvách) a během dešifrování jsou vyzkoušeny nejrůznější antidebugovací a antidisassemblovací triky. Rootkit nespustíte ve virtuální mašině ani pod debuggerem (debugger buď nebude fungovat, nebo dojde k pádu systému). Součástí je také ochrana vlastního kódu.
Rustock C samozřejmě detekovat lze. Jednak je to způsobeno technikami, které používá a jednak díky chybám, které obsahuje. Chyby se týkají falšování velikosti souborů (nejsou náležitě upraveny všechny hodnoty). Protože nenapadá ovladače disku, lze jeho přítomnost (přítomnost infikovaných ovladačů a fakt, že velikosti některých souborů nesouhlasí) přímým přístupem na disk přes tyto ovladače. Antirootkity však většinou hlídají, jestli se na disku nenachází nějaký skrytý soubor či alternativní datový proud - podivné chování velikosti však ne.
Na začátku jsem se zmínil, že IceSword je schopný Rustocka detekovat, ale že to je velmi ošemetné. IceSword totiž umí prohlížet souborový systém a přitom ukazuje velikost souboru zjištovanou jak přes ovladače souborového systému, tak přímo z disku. Takže pokud máte dost trpělivosti na to, abyste prošli všechny ovladače v systémových adresářích a zkontrolovali, zda souhlasí velikosti, tak rootkit najdete. Ale žádné tlačítko Scan na to není.
Ono bychom to dělat neměli, ale člověk si musí přiznat, že tento rootkit si zaslouží obdiv díky tomu, jak je napsán a díky neovyklému způsobu použití některých skrývacích technik. Aspoň můj obdiv má.
Závěrem ještě dodám, že jsem Rustock C nereverzil, tudíž ne všechny informace v tomto článku musí být pravdivé. Výčet vlastností rootkitu tedy nepovažujte za úplný, ještě pár tajemství skrývá. Informace pro napsání tohoto článku byly čerpány z mých vlastních znalostí a z následujícíh stránek:
Komentáre
Jen další zdroj:
RE: Jen další zdroj
Alexander Gostev, Kaspersky
Yes, I know about this. When