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.

Malware analýza - Manuálne unpackovanie vzoriek a analýza správania trojanu Zeus

Obsah

  1. Úvod
      1.1 Úvod
      1.2 Potrebné nástroje
      1.3 Prvé kroky
  2. Ručné unpakovanie vzorky
      2.1 Teoretický úvod
      2.2 Praktická časť
  3. Živá analýza
      3.1 Správanie trojanu v systéme
      3.2 Odstraňovanie zo systému
  4. Záver
      4.1 Vysvetlivky
      4.2 Odkazy

1.Úvod

1.1 Úvod

Dneš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 1.10 s pluginmi: OllyDump a OllyCmd
  • Bezpečný systém, ideálne virtuálny stroj ako napríklad VMWare alebo VirtualBox a na ňom nainštalovaný windows.
  • Rku (Rootkit Unhooker)
  • WinObj

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é kroky

Kaž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.
Nepochybne to bol aj zámer autora. Aby prebehla analýza úspešne, musíme zo vzorky odstrániť ochrannú vrstvu, packer v ktorom je binárka trojana zabalená. Môžme si to predstaviť akoby bola uložená v kufri alebo trezore. Táto ochrana je bežne používaná v softwarovom priemysle. Postupne ju však začali s radosťou využívať aj autori malware.

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 vzorky

2.1 Teoretický úvod

To 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)
Skladá sa z jednej a viac vrstiev. Je generovaná polymorphným enginom, preto vyzerá vždy inak. Slúži hlavne na marenie detekcie antivírusom. Je zodpovedná za dekryptovanie a spustenie loadera.

Loader (Loader Stub)
Vrstva zodpovedná za prípravu originálneho súboru v pamäti a jej nasledné spustenie. Celý proces nahrávania originálnej binárky sa väčšinou začína jej dekryptovaním a dekompresiou na určené pamäťové miesto. Následne je do pamäte nahraná originálna hlavička (PE header) a jednotlivé sekcie súboru. Ďalej prichádza na radu naloadovanie potrebných knižníc a vytvorenie IAT (import address table). Na to je najčastejšie použitá dvojica API funkcii LoadLibrary a GetProcAddress. Ak je treba, loader ešte upraví relokácie a niektoré parametre v PEB, pre zaistenie správneho fungovania nahratej binárky. Ako posledný krok je skok na originálny vstupný bod(Original Entry Point - OEP).

Originálny subor (Original image)
Originálny súbor je spustený výlučne v pamäti. Nevyskytuje sa na disku preto ho musíme uložiť (dumpnúť).

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
Funkcia VirtualProtect mení protekčné parametre pamäťového regiónu. Dokáže meniť napríklad nezapisovateľný región na zapisovateľný atď... VirtualAlloc alokuje pamäť určenej veľkosti a s určenými parametrami. Bližšie info sa dá nájsť na MSDN.

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.
Vzorka s ktorou budeme narábať sa dá stiahnuť tu. Heslo na odbalenie .rar balíčka je "infected".

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
bp VirtualAllocEx

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.
Najprv narazíme na veľmi obľúbený trik, kde inštrukcia skoku skáče do stredu ďalšej inštrukcie. Pri ďalšom krokovaní vidíme takzvaný Aktívny SMC kód (Self-modifying code). Takýto kód modifikuje sám seba a pretvára tak inštrukcie o pár bajtov dopredu. Týmto sa netreba nechať zmiasť. Stačí trpezlivo krokovať kým dorazíme na ďalšiu dekrypčnú slučku.

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
Pri zadávaní breakpointov nám olly ponúkne 3 rôzne druhy:

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.
Viac informácii tu[3].

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".


test eax,eax
je Pokracuj ;ak eax = 0 => skoc
Koniec: add esp,74
retn Pokracuj:mov edi,[esp+54]

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).
Loader sa zjavne chystá niečo dôležité na túto adresu zapísať. Uložíme na prvý byte breakpoint a spustíme aplikáciu.

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ýza

3.1 Správanie trojanu v systéme

Sprá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ť.
Počet hookov sa líši v rôznych verziach trojana.

Ď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.

  1. Variant
    * C:\WINDOWS\system32\ntos.exe
    * C:\WINDOWS\system32\wsnpoem\audio.dll
    * C:\WINDOWS\system32\wsnpoem\video.dll
  2. Variant
    * C:\WINDOWS\system32\oembios.exe
    * C:\WINDOWS\system32\sysproc64\sysproc86.sys
    * C:\WINDOWS\system32\sysproc64\sysproc32.sys
  3. Variant
    * C:\WINDOWS\system32\twext.exe
    * C:\WINDOWS\system32\twain_32\local.ds
    * C:\WINDOWS\system32\twain_32\user.ds
  4. Variant
    * C:\WINDOWS\system32\sdra64.exe
    * C:\WINDOWS\system32\lowsec\local.ds
    * C:\WINDOWS\system32\lowsec\user.ds

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ému

Manuálne
Existuje viac trikov ako sa trojanu zbaviť. Asi najlepší som našiel na blogu MMPC[4].

Stačí spustiť CMD a napísať nasledujúci príkaz.
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v PendingFileRenameOperations /t
REG_MULTI_SZ /d \??\c:\windows\system32\sdra64.exe\0\??\c:\windows\system32\sdra64.ex_\0

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é
Pre automatické vyčistenie systému je možné použiť nástroje ponúkané antivírovými spoločnosťami.

4. Záver

Dúfam, že sa vám článok páčil a našli ste v ňom veľa nových informácii.
Najnovšie vzorky trojanu Zeus,na ktorých si môžete vyskúšať novonadobudnuté schopnosti, nájdete tu [5].
Ďakujem za pozornosť.

    abece

4.1 Vysvetlivky

Virtuálna adresa (VA) - Absolútna adresa vo virtuálnej pamäti.
Relatívna virtuálna adresa (RVA) - Relatívna adresa vo virtuálnej pamäti.
ImageBase - Virtuálna adresa na ktorú je binárka nahraná do pamäte.
AddressOfEntryPoint - Virtuálna adresa relatívna k ImageBase.
Stub - Kus kódu vykonávajúci určitú funkciu.
Krypter(crypter) - Druh packera ktorý využíva kryptografické funkcie na ochranu súborov.
Polymorphný kód - Kód ktorý plní určitú funkciu ale mení svoj vzhľad a veľkosť.
Sandbox - Špeciálne umelo vytvorené prostredie v ktorom sa vzorka spustí a sleduje.

4.2 Odkazy

[1] - https://virustotal.com
[2] - https://anubis.iseclab.org/
[3] - https://www.codeproject.com/KB/security/AntiReverseEngineering.aspx#Bps1
[4] - https://blogs.technet.com/mmpc/archive/2010/03/11/got-zbot.aspx
[5] - https://zeustracker.abuse.ch/

Komentáre

vďaka,skvelá práca!!!

naozaj skvelý článok. krok po kroku. proste SUPER.

dobry den skusam si to doma cele vyskusat no ked zadam bp VirtualProtectEx a bp VirtualAllocEx tak ma nehodi na IN.... ktoru treba vynopovat (stlacim f9 a dlho cakam )ale az na riadok
753679B8 mov edi,edi neviete kde u mna nastala chyba dakujem (skusal osm to uz vela krat a nic)


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 Antivirove centrum Crypto-world.info