Hlavné menuPřihlášeníHledat |
Odpovědět na komentář
Středa, 21.04.2010 17:19
Obsah
1.Úvod1.1 ÚvodDnešný článok je venovaný hlavne začiatočníkom v obore malware analýzy. Jeho hlavná časť je venovaná problematike packerov používaných malware autormi. Podrobne si popíšeme ako fungujú a aký postup zvoliť pri ich odstraňovaní. Teóriu si potom prakticky vyskúšame. Nakoniec si pozrieme správanie vzorky v systéme a postup pri jej čistení. Pracovať budeme so vzorkou banker trojanu Zeus (Zbot/Wsnpoem), ktorý som vybral zámerne, pretože sa jedná o veľmi aktívnu hrozbu s obrovským počtom infikovaných PC po celom svete. 1.2 Potrebné nástroje
OllyDbg s pluginmi, RKU a WinObj si môžete stiahnuť tu. UPOZORNENIE: Pri manipulovaní so vzorkami malware buďte veľmi opatrní. Vždy používajte systém na to špeciálne určený, taký, ktorý vám aj v prípade poškodenia nebude chýbať. So súbormi priloženými k článku manipulujete len na vlastné riziko a autor ako aj portál secit.sk nenesie zodpovednosť za žiadne škody spôsobené nesprávnym zaobchádzaním s nimi. 1.3 Prvé krokyKaždú analýzu vzorky začínam jej oskenovaním pomocou služby Virustotal[1]. Ako sa bude vzorka správať v systéme, aké súbory vytvorí a mnoho ďalších informácii môžme získať aj bez toho, aby sme ju sami spustili. Stačí využiť jeden s online sandboxov. Ja zvyknem používať Anubis[2]. V našom prípade však analýza nedopadla tak ako sme si predstavovali. Bola prerušená kvôli výnimke vyvolanej viac ako 31 tisíc krát. Výsledok. Tým sa dostávame k hlavnej časti článku so zameraním na základnú zručnosť každého malware výskumníka, a to je unpackovanie rôznych packerov a protectorov. To hlavne z dôvodu ich stále častejšieho používania, niekedy dokonca privátnych verzii, malware autormi. 2. Ručné unpakovanie vzorky2.1 Teoretický úvodTo s čím máme dočinenia sa nazýva "Polymorphic crypter". Je to druh packera používaný malware autormi v prvom rade na vytváranie bináriek nedetekovaných antivírusmi. V našom prípade vidíme detekciu 5/42 pre zapakovanú binárku, pričom odpakovaná má až 26/42. Z toho je vidieť aké účinné nástroje na obchádzanie antivírusov majú malware autori k dispozícii. Výhodou pre nás je ich pomerne slabá ochrana proti ručnej analýze. Pozrime sa teda na graf vyjadrujúci štandardnú konštrukciu takýchto packerov a popíšme si bližšie jednotlivé časti. Polymorphná čast (Polymorphic Stub) Loader (Loader Stub) Originálny subor (Original image) Náš cieľ je vystihnúť práve chvíľu, keď loader skočí na vstupný bod (entry point) originálnej binárky. Vtedy môžme jej obraz uložiť na disk. Nebude už obsahovať ochrannú vrstvu a bude plne pripravená na ďalšiu analýzu. S dobrými znalosťami fungovania packerov spoznáme aj ich veľkú slabinu a tou sú pamäťové operácie. Práve zameraním svojej pozornosti na ne, dokážeme väčšinu ochrán poraziť pomerne ľahko. Dvojica funkcii najčastejšie používaných pri pamäťových operáciach sú VirtualProtect a VirtualAlloc. Práve tieto dve použijeme v dnešnom článku. Dodatočné informácie V našom príklade hookujeme až tzv. extended funkcie (s priponou ex).Takto máme väčšiu šancu zachytiť potrebné volanie. 2.2 Praktická časťS potrebným teoretickým základom sa môžme pustiť do akcie. Otvoríme si súbor v OllyDbg. Vidíme entry point aplikácie. Práve sa nachádzame v polymorphnej vrstve packera. Tak ako sme naplánovali, položíme breakpointy na API volania, ktoré manipulujú s pamäťou. bp VirtualProtectEx Teraz spustíme aplikáciu (F9). Olly zastalo na výnimke Priviledged instruction. 004013FB . E5 EA IN EAX, 0EA ; I/O command Táto inštrukcia je v Protected mode privilegovaná. Je určená na použivanie v jadre (ring 0) a v usermode (ring 3) vyvoláva výnimku 0xC0000096 (PRIVILEGED INSTRUCTION). Netreba sa dlho zdržovať analýzou kódu okolo. Inštrukciu IN stačí vyNOPovat a môžme pokračovať ďalej (F9). OllyDbg znovu zastal, tentokrát na breakpointe, ktorý sme my sami umiestnili a to konkrétne na funkciu VirtualAllocEx. Vykrokujeme teda až za 2. retn a v registri eax, ktorý sa používa na ukladanie návratovej hodnoty z funkcie, vidíme hodnotu 0x00850000. Pre nás to znamená, že v procese bol na tejto adrese alokovaný nový pamäťový región. Umiestnime teda na prvý byte tohoto regiónu hardware breakpoint(Hardware on Execution) a znovu spustíme aplikáciu. OllyDbg zastane na breakpointe ktorý sme umiestnili v minulom kroku. Dostali sme sa do zaujímavej časti. Kód sa nám tu mení doslova pred očami. V tomto prípade sa dekryptuje kód hneď za slučkou a môžme zreteľne vidieť ako sa mení. V takejto situácii nemôžeme použiť normálny breakpoint, aby sme nezničili kód. Preto siahneme po breakpointe hardwarovom, ktorý umiestnime hneď za inštrukciu loopd. Dodatočné informácie Základný breakpoint (F2) - je vlastne inštrukcia int 3 (0xcc). Táto inštrukcia je debuggerom zapísaná na miesto kam sme uložili breakpoint a nachádza sa fyzicky v pamäti. Memory breakpoint - Spočíva v nastavení sledovanej pamäťovej oblasti na PAGE_GUARD. Hardware breakpoint - Je uložený v debug registroch procesora. Pristáli sme na dekryptovanom kóde. Úspešne sme prešli polymorfnými vrstvami až na začiatok loadera. Postupne krokujeme až na adresu 0x008500EE, kde sa nachádza inštrukcia CALL EAX. V registre eax je adresa kernel32.LoadLibraryA. Ako argument preberá pointer na text "vmhgfs". Loader sa teda pokúša načítať knižnicu "vmhgfs.dll".
Ak je načítanie do procesu úspešné, teda eax obsahuje hodnotu väčšiu ako nula, JE neskočí a kód skončí. Jednoznačne sa jedná o trik na detekciu VmWare, pretože knižnica "vmhgfs" je súčasťou VMWare a na normálnom systéme sa nenachádza. Vynulujeme teda eax, aby vykonávanie programu pokračovalo normálne. Spustíme znovu aplikáciu. Olly zastalo na volaní VirtualAllocEx. Ako argument preberá adresu 0x400000 a nastavuje jej vlastnosti rwx (read,write,execute). Pristáli sme na inštrukcii rep movsb. Spravíme cez ňu krok a vidíme nový PE header na sledovanej adrese. Na tento moment sme čakali. Z novej hlavičky môžme vypočítať adresu vstupného bodu originálnej binárky. Stačí zobrať položku ImageBase a pripočítať k nej AddressOfEntryPoint. ImageBase + AddressOfEntryPoint => 0x400000 + 0x422e = 0x40422e. Na vypočítanú adresu teraz uložíme breakpoint a počkáme si kým bude súbor celý nahraný v pamäti. Aplikáciu spustíme. Olly zastane na breakpointe. Teraz stačí uložiť (dumpnúť) obraz pamäte na disk pomocou pluginu OllyDump. Výborne! Ochrannú vrstvu sme úspešne odstránili. Teraz je možné nerušene pokračovať v analýze. Či už živej, alebo statickej. Unpackovanú binárku som znovu hodil do Anubis sandboxu. Tentokrát už analýza prebehla úspešne. Výsledok. Video celého procesu si môžete pozrieť tu. 3. Živá analýza3.1 Správanie trojanu v systémeSprávanie Zeusu v systéme je velmi nenápadné. Žiadne spomalenie alebo vyhadzovanie okien sa nekoná. Po spustení postupne infikuje takmer všetky procesy v systéme ako aj vśetky neskôr spustené. V jednotlivých procesoch inštaluje hooky na funkcie ktoré ho zaujímajú. Pomocou nástroja Rku môzme tieto hooky detekovať a odstrániť. Ďalší zo znakov infekcie zeusom je mutex __SYSTEM__x alebo __AVIRA__x, kde x je náhodné číslo. Tento mutex sa dá vidieť pomocou nástroja WinObj. Známe varianty trojanu vytvárajú nasledovné súbory.
Podľa výstupu zo sandboxu vieme, že pracujeme so štvrtou variantou. Vytvorené súbory sa však nedajú normálnymi nástrojmi vidieť ani zmazať. Pre automatické štartovanie zároveň so systémom vytvára podľa varianty nasledovný registry kľúč: “Userinit” = “C:\WINDOWS\system32\userinit.exe,C:\WINDOWS\system32\sdra64.exe” 3.2 Odstraňovanie zo systémuManuálne Stačí spustiť CMD a napísať nasledujúci príkaz. Sdra64.exe treba nahradiť menom zeus exe súboru. Nasleduje reštart systému. Týmto príkazom zaistíme premenovanie súboru hneď pri štarte systému a tím mu zabránime spustiť sa. Súbory, ktoré ostali vrátane kľúča v registri stačí už len vymazať. Automatické 4. ZáverDúfam, že sa vám článok páčil a našli ste v ňom veľa nových informácii.
4.1 VysvetlivkyVirtuálna adresa (VA) - Absolútna adresa vo virtuálnej pamäti. 4.2 Odkazy[1] - http://virustotal.com 4.3 Kontaktabc(a)secit(bodka)sk Odpovědět |
OdkazyOdkazy |