Sociálne siete

SecIT.sk na Facebooku SecIT.sk na Google+ SecIT.sk na Twitteri

Podporte nás


V prípade, že Vám obsah nášho portálu niekedy nejakým spôsobom pomohol, či bol pre Vás prínosom prosím podporte jeho chod ľubovoľnou čiastkou. Ďakujeme!

Štítky

Vyhľadávanie

You are here

Domov
Upozornenie: Obsah je licenčne chránený a bez písomných súhlasov autora článku a vlastníka webovej stránky nesmie byť v žiadnej forme ďalej kopírovaný a šírený v pôvodnom, či v akokoľvek upravenom stave.

HijackThis - Aplikace prvního nasazení

Zajisté všichni znáte aplikaci Hijackthis, která si probojovala první místo v použití při odvirovávání systémů a to díky několika funkcím, jako je zjištění programů, spouštějících se po startu systému a následného uložení tohoto výpisu do textového souboru. Myslím, že nemá smysl pokračovat v popisu, co všechno Hijackthis umí a proč se neustále používá všude, kde se jen dá, raději přistoupíme k technické stránce celé věci.

Upozornění: Následující informace jsou určeny pouze pro studijní účely, autor za jejich zneužití nenese zodpovědnost. Článek je chráněn autorskými právy a není dovoleno jej publikovat bez dovolení autora na jiných portálech, než SECIT.sk.

© SECIT.sk 2008

Analýza samotného Hijackthis

První věc, kterou bychom měli o Hijackthis vědět je jazyk, ve kterém je tento program napsán, jedná se o Visual Basic 6, na čemž není nic špatného v případě, kdy jej používá člověk, který není limitován schopnostmi tohoto jazyka, v jiném případě se jedná o velmi limitující jazyk s mnoha překážkami a všelijakými "zradami".

Unicode vs. ANSI

Pokud Vám tato označení nic neříkají, nevadí, pokusím se Vám je vysvětlit. Každý znak je v ANSI kódování uložen jako 1 byte v paměti. Jako ukončení takového textového řetězce je použit byte o hodnotě 0 (= null char). Díky limitované délce 1 bytu (2^8 možných znaků) není možné pomocí ANSI kódování implementovat jazyky, které mají větší znakovou sadu, než má latinka - prostě se do 1 bytu nevlezou všechny znaky - např. Katakana, Čínština, atd. Tento problém řeší UNICODE kódování tak, že na jeden znak je použito libovolné množství bytů, které jsou ukončeny jedním null charem. Celý textový řetězec je pak ukončen dvěma null chary.

Příklad:
ANSI: [t], [e], [s], [t], 0
UNICODE: [t], 0, [e], 0, [s], 0, [t], 0, 0

Pokud se budeme snažit přečíst textový řetězec napsaný v UNICODE jako ANSI, přečteme pouze znak "t", protože je ukončen jedním null charem. Pokud se budeme snažit číst ANSI řetězec jako UNICODE, bude program pokračovat v načítání řetězce dál v paměti, než nenarazí na dva null chary.

Zneužití proti Hijackthis:
Hijackthis používá pouze ANSI funkce, stačí tedy jako jméno procesu, nebo jméno hodnoty v registru použít unicode a tyto údaje pak budou chybně interpretovány na jeho výstupu.

Použití high-level funkcí č. 1

Samotný systém Windows poskytuje nespočet různých funkcí - tzv. API funkce, které mají za úkol zjednodušit práci programátorům, kteří pak nejsou nuceni znát principy fungování mechanismu, stojícího právě za těmito funkcemi.
Vezměme si například pouhopouhé získávání seznamu běžících procesů.
V Hijackthis jsou pro tento účel použity jedny z nejvíce high-level API: CreateToolhelp32Snapshot, Process32First a Process32Next.

Jak tyto funkce fungují a co za nimi stojí? Funkce CreateToolhelp32Snapshot vytvoří okamžitý výpis informací specifikovaných parametrem. Jak? Tak, že nejprve zavolá funkci na alokaci paměti, následně zavolá funkci NtQuerySystemInformation, která získá pole struktur, popisující jednotlivé procesy a uloží je do alokované paměti. Pomocí funkcí Process32First a Process32Next je toto pole procesů procházeno a jsou vypisovány pouze některé informace, které tyto funkce vrací.

Zneužití proti Hijackthis:
Není velkým problémem tyto funkce zaháknout a upravovat jejich vstup či výstup tak, aby v nich nebyla žádná zmíňka o běžícím viru. Viry, které využívají těchto technik hákování funkcí ve všech programech jsou nazývany ring 3 rootkity, ring 0 rootkity jsou ty, které hákují funkce v jádru systému.Existuje mnoho řešení, jak se proti ring 3 rootkitům efektivně bránit, ale v Hijackthis není implementována žádna takováto kontrolní rutina, přitom se dá těmto druhům útoků skoro úplně vyhnout (skoro z důvodu, kdybychom počítali s přímým útokem na určitou aplikaci, které se dá vyhnout z ring 3 docela špatně, ale dá).

High-level funkcí č. 2

Dalším problémem, který pramení právě z přilišné povrchnosti znalostí dané problematiky je využití velice snadno napadnutelných funkcí, avšak ne za pomoci hákování, ale pomocí znalostí, jak tyto funkce vůbec fungují. Hijackthis nezobrazuje pouze jméno procesu, ale celou cestu k jeho spustitelnému souboru, což ale funkce CreateToolhelp32Snapshot nedělá, je tedy nutné využít další funkci, která to zjistí. Hijackthis využívá pro tento účel funkci GetModuleFileNameEx, která zjišťuje cestu k modulu, na dané adrese v daném procesu. U této funkce si řekneme, jak funguje. Každý proces obsahuje několik struktur, které obsahují jeho základní informace, jako je cesta k jeho spustitelnému souboru atp. Tyto informace jsou uloženy v přepisovatelné paměti v každém procesu.Funkce GetModuleFileNameEx tuto strukturu z procesu načte a získá požadované informace - tedy cestu k souboru. Pro programátora, který toto ví a zná tyto struktury není vůbec žádný problém tyto informace jakkoliv upravit, přidat, vymazat, či přepsat nesmysly.

Služby a Microsoft

Služby založené na souboru s vyplněmými údaji, které obsahují slovo "Microsoft" jsou ignorovány.

.text:004C2F49 push 1
.text:004C2F4B push eax
.text:004C2F4C push offset aMicrosoft ; "Microsoft"
.text:004C2F51 push 0
.text:004C2F53 call ds:__vbaInStr

Co to znamená pro uživatele?
Pro uživatele Hijackthis to jednoznačně znamená, že i když vypadá log čistě, nemusí to tak vůbec být. Pomocí výše popsaných zneužitelných chyb se dají skrýt jak záznamy v registrech, tak celé procesy.

Vyzkoušejte si sami

Následující programy jsou vytvořené mnou pro demonstraci těchto chyb (testováno pod Windows XP SP2 Prof.):

Hákování NtQuerySystemInformations (skrytí vlastního procesu z logu):
http://lodusweb.net/download/ntqsi_hook.rar

Návod:
Nejprve spusťte Hijackthis, následně ntqsi_hook.exe, který se bude ptát, které procesy má zaháknout, klikejte na Ne, dokud nenarazíte na Hijackthis, nebo na program, který chcete zaháknout, v tom případě klikněte na Ano, jakmile projdete všechny procesy, zůstane viset tabulka "Running...", nyní v Hijackthis vytvořte log, nebo si otevřte jeho vestavěný process manager a podívejte se... jakto, že tam není ntqsi_hook.exe? ;) (kdyby HJT spadl, zkuste to znovu, nijak jsem si s tím nehrál = 10 minut psaní).

Úprava informačních struktur uvnitř procesu (dezinformace):
lodusweb.net/download/prochid_lodus_1_2.zip

Návod:
Spusťte prochid_by_lodus.exe a vytvořte log v HJT podívejte se do jeho process manageru... HJT má pravdu ;)

Závěr

Výše zmíněné chyby obsahuje cca 99% bezpečnostního software, který běží pouze v ring3. Jaké programy bych Vám doporučil? Jednoznačně Rootkit Unhooker / GMER v případě, kdy je systém napaden rootkity, UPM na analýzu systému z ring3, Avanger (případně některý z antirootkitů) na mazání souborů. Této kombinaci by mělo uniknout doufejme co nejméně.


Podporte nás


Páčil sa Vám tento článok? Ak áno, prosím podporte nás ľubovoľnou čiastkou. Ďakujeme!


ITC manažer Security-portal.cz Soom.cz
Hoax.cz Crypto-world.info