Izberite jezik

SI-CERT TZ004 / Analiza VB5 packed zlonamerne kode

25.07.2019

Del SI-CERT vsakdana je analiza vzorcev zlonamerne kode, ki jo prejemamo iz različnih virov. Velik del obravnavanih primerov je povezan z okužbami s trojanskimi konji; najpogosteje bančnimi in drugimi trojanci za krajo informacij z okuženega računalnika. Med temi po številu prejetih vzorcev prednjači trojanski konj iz družine Pony.

Analiza Pony trojanskega konja

Zgodovina Pony trojanskega konja sega že v leto 2011, izvorna koda pa je bila objavljena leta 2013. Od takrat beležimo večje število različic. Koda Pony trojanskega konja se predvsem spreminja v delu uporabljenih metod in tehnik, ki varnostnim mehanizmom (npr. protivirusnim programom) preprečujejo pravilno zaznavo zlonamerne kode. Uporaba različnih pakirnih mehanizmov (packerjev – orodij, ki šifrirajo, stisnejo ali spremenijo “obliko” kode), zakrivanje in izmaličenje kode (obfuscation) ter časovni zamiki pri izvedbi kode, so tehnike, s katerimi se skuša Pony izogniti zaznavi s strani različnih varnostnih mehanizmov, nam pa grenijo življenje pri analizi zlonamerne kode.

Kako Pony prigalopira na vaš računalnik

Prva ovira, ki jo mora Pony preskočiti, je način, kako se “približati” žrtvi. Najbolj pogosto vektor okužbe predstavlja elektronska pošta. Na SI-CERT smo recimo v samo enem dnevu prejeli tri različna sporočila z vzorcem tega trojanca. V vsakem od teh primerov je bila uporabljena drugačna “zgodba”, ki naj bi prejemnika prepričala v klik na priponko ali povezavo. Razlikovala so se tudi po tem, na kakšen način je prišlo do prenosa zlonamernega tovora na sistem uporabnika.

Primer sporočila št. 1

V sporočilu, z grobo prevedeno vsebino “V priponki se za vašo referenco nahaja naša naročilnica”, se na prvi pogled nahaja priponka v obliki Word dokumenta. V resnici gre za sliko s povezavo do spletne strani iz katere se izvede prenos arhivske .ace datoteke, ta pa vsebuje datoteko z izgledom PDF dokumenta; v resnici gre za izvršljivo .scr datoteko, ki ob zagonu na sistem namesti Pony trojanskega konja.

Sporočilo s povezavo za prenos arhivske .ace datoteke

Primer sporočila št. 2

V tem sporočilu že sama .img priponka vsebuje .scr datoteko. Vsebina pa skuša prejemnika prepričati, da naj bi se .img arhivska datoteka vsebovala Excel preglednico, dejansko pa se v njej nahaja .scr datoteka. Če datoteko odpremo, se (tako kot v prejšnjem primeru) sistem okuži s trojanskim konjem Pony.

Sporočilo s pripeto .img datoteko

Primer sporočila št. 3

Vsebina tega sporočila skuša prejemnika prepričati, da priponka vsebuje podatke nakazila v povezavi z nekakšnim naročilom izdelkov. Sporočilu pripeta datoteka vsebuje HTML kodo, ki ob odpiranju iz oddaljenega spletnega naslova na sistem prenese (ne boste verjeli) .scr datoteko. Kaj se zgodi v primeru, da to zaženemo, pa je do sedaj že verjetno jasno :D.

Sporočilo s .html priponko preko katere se izvede prenos .scr datoteke
HTML koda v sporočilu pripeti datoteki

Koliko so uporabljene metode dostave zlonamernega tovora uspešne, je odvisno od varnostnih mehanizmov na poti do prejemnika, nato od mehanizmov varovanja na sistemu prejemnika, na koncu pa seveda še najbolj od prejemnika samega, ki mora opraviti nekaj klikov za zagon kode.

Končnica .scr se sicer povezuje z ohranjevalniki zaslona, vendar gre kljub temu za običajne izvršljive datoteke.

Analiza trojanskega konja Pony

V primeru vseh prej omenjenih .scr datotek gre za izvršljive datoteke, kar je razvidno tudi iz rezultata preverjanja.

Ker gre v vseh primerih za isti tip trojanskega konja, bo za namen članka uporabljen vzorec HK-599051800FXO.scr

Na podlagi statične analize datoteke lahko hitro pridemo do naslednjih ugotovitev.

Vrednost entropije datoteke je grob pokazatelj ali je ta stisnjena ali zašifrirana. V tem primeru nam že nakazuje, da gre tukaj zelo verjetno za uporabo packerja.

Entopija datoteka je merjenje naključnosti bajtov v datoteki. Vrednosti so v razponu od 0 do 8. Nižja vrednost pomeni, da datoteka ni stisnjena ali šifrirana, višja pa nasprotno.

Seveda nas zanima ali je bil packer dejansko uporabljen in tudi kateri. Z nadaljnjo statično analizo potrdimo uporabo packerja.

Na podlagi teh podatkov je sedaj na strani analitika katere metode bo uporabil v postopku nadaljnje analize.

Ker smo profiji in ker smo ugotovili prisotnost packerja, se zavedamo, da nadaljevanje statične analize ne bo dalo želenih rezultatov. To bi bilo seveda brezsmiselno in pričakovati je, da želijo pisci tovrstne zlonamerne kode analizo njihove kode vsaj otežiti, če ne že omogočiti.

Pa vseeno ostanimo še pri statični analizi in poskusimo na ta način pridobiti še kakšen uporaben podatek.

Pregled datoteke pokaže, da je ta sestavljena iz treh sekcij.

Osredotočili se bomo na sekcijo .text v kateri lahko zasledimo zapis, ki kaže na uporabo pogona za zagon Visual Basic pseudo kode MSVBVM60.DLL (Microsoft Visual Basic Virtual Machine COM layer). Četudi preverjanja uporabe packerja ne bi izvedli, nam lahko tudi ta najdba nakazuje na to, kateri je bil uporabljen oz., da imamo opravka z Visual Basic izvršljivo datoteko.

Disassembler in razhroščevalnik oz. kako premagati packer

Pa nadaljujmo in poglejmo, do česa se bomo dokopali, če vzorec naložimo v disassembler. (Namig: uporaba disassemblerja za analizo psevdokode ni primerna)

Iz vstopne funkcije je razvidno, da pred klicem MSVBVM60.DLL_ThunRTMain porine (push) naslov 0x401248 na sklad.

ThunRTMain funkcija MSVBVM60.DLL “potrebuje” le en argument, v našem primeru naslov 0x401248 na skladu. Če se premaknemo na ta naslov nam je takoj vse jasno 😀

Pa poglejmo rajši, kaj bomo ugotovili, če vzorec zlonamerne kode analiziramo v razhroščevalniku. Ponovimo: iz vstopne funkcije je razvidno, da pred klicem MSVBVM60.DLL_ThunRTMain porine (push) naslov 0x401248 na sklad.

Glede na ugotovitve iz analize vzorca v disassemblerju in sedaj v razhroščevalniku se premaknimo na naslov 0x401248. Ta kaže na začetek Visual Basic psevdokode, ki vsebuje podatke, potrebne za zagon programa. Med drugim tudi naslov glavne funkcije programa.

Ker je struktura Visual Basic znana, lahko kaj hitro ugotovimo, na katerem naslovu se nahaja Sub Main () procedura, ki se izvede po zagonu aplikacije. Ta tudi kaže na pravi začetek razpakirne kode. Packer razbit 😀

Začetek razpakirane kode

Izvoz razpakirane kode je seveda naslednji logični korak (prosto po Spocku). Nadaljevanje analize je sedaj preprosto, ko imamo v roki razpakirano kodo.

Smo sedaj dobili izvršljivo datoteko, ki privede do končne okužbe in jo lahko pričnemo analizirati ter ugotavljati kakšne funkcionalnosti vsebuje? To bi bilo seveda preveč enostavno. Pa poglejmo kaj smo odkrili tukaj. HK-599051800FXO.scr je le transportna datoteka (dropper), ki vsebuje slikovno datoteko .gif, VBS skripto in VB5 packed izvršljivo datoteko Spotify.scr.

Pregled VBS skripte in njenih “nalog”:

  1. V ključ registra zapiše vrednost, ki omogoča zagon VBS skripte po ponovnem zagonu računalnika (persistence);
  2. Zažene Spotify.scr izvršljivo datoteko (VB5 packed);
  3. Preko .vbs skripte odpre privzeti pregledovalnik slik in prikaže slikovno .gif datoteko “REQUEST-QUOTATION.GIF”.
REQUEST-QUOTATION.GIF

Ponovimo prej opisan postopek premagovanja VB5 packerja Spotify.scr datoteke iz katerega dobimo razpakirano kodo.

Kakšna je torej naloga Spotify.scr datoteke? Seveda tudi tukaj ne gre za datoteko, ki privede do končne okužbe, ampak ta iz oddaljenega spletnega naslova prenese novo VB5 packed 😀 izvršljivo .exe datoteko. V primeru Spotify.scr torej ne gre za dropper, ampak downloader.

Ta iz oddaljenega spletnega naslova prenese in zažene VB5 packed datoteko 360Net.exe, analiza katere kaže na funkcionalnost dropperja. Ta na sistem odloži izvršljivo, (sedaj se že ponavljamo, ampak krivda je na strani piscev zlonamerne kode) VB5 packed izvršljivo datoteko in VBS skripto; ti sta poimenovani kot Netty360.exe in Netty360.vbs.

Vsebina VBS datoteke Netty360.vbs in njene naloge:

  1. V ključ registra zapiše vrednost, ki omogoča zagon VBS skripte po ponovnem zagonu računalnika (persistence);
  2. Zažene izvršljivo datoteko Netty360.exe.

Kaj smo potem naredili verjetno nima niti smisla pisati. Pa vseeno; packer smo spet premagali. Kako ga nebi, že samo na tem vzorcu se vsak, ne samo nauči te veščine, ampak se v njej kar izuri (ninja level).

Do sedaj imate verjetno že nameščena 3D očala in škatlo kokic v roki. Napetost raste, vsi pričakujemo kaj se bo zgodilo v naslednjem prizoru. Bo na sceno spet stopil dropper ali morda downloader iz kriminalne združbe s kodnim imenom VB5 packed Pony? Žal ne (v resnici nam ni žal). Prišli smo na cilj naše epopeje, na katero nas je ponesel Pony.

Kaj nam torej prinaša zaključni prizor, kako se bo zgodba razpletla, kakšni so motivi in nameni Pony trojanskega konja, ki jih je tako vztrajno skušal skriti že od vsega začetka? Odgovor dobite v članku, ki bo izšel čez en teden, ob isti uri, na isti spletni strani.

Pa dovolj šale. Zlonamerna koda je resna zadeva in tukaj ni mesta za hece (čeprav zna biti analiza le-te precej zabavna).

Končna okužba sistema

V tem delu se bomo predvsem osredotočili na samo delovanje oz. funkcionalnost Pony trojanskega konja.

Najprej poglejmo seznam vsebovanih sumljivih sistemskih API klicev.

  1. Seznam API klicev, ki so uporabljeni za ugotavljanje prisotnosti sandboxa, VM, orodij za analizo …
  • GetComputerNameW – preveri ime računalnika
  • GlobalMemoryStatusEx – preveri količino sistemskega pomnilnika
  • IsDebuggerPresent – preverja ali je bil zagnan v razhroščevalniku
  • SetWindowsHookExW (7 – hook procedura WH_MOUSE) – preverja interakcijo s strani uporabnika (gibanje miške) z namenom zaznave sandboxa

2. Seznam API klicev za operacije v registru (k tem se še vrnemo v nadaljevanju)

  • RegCreateKey()
  • RegOpenKey()
  • RegQueryValue()
  • RegSetValue()

3. Ostali zanimivejši API klici

  • SetWindowsHookExW (2 – hook procedura WH_KEYBOARD) – beleženje vnosov preko tipkovnice; kaže na funkcijo keyloggerja
  • CreateRemoteThread – nakazuje na inject kode v oddaljen procesu
  • InternetCheckConnectionW – omogoča aplikaciji preverjanje ali je mogoča vzpostavitev povezave z internetom
  • HttpOpenRequestW- aplikaciji omogoča pošiljanje GET in POST HTTP zahtev

Vrnimo se sedaj k API klicem registra, saj nas zanima, nad katerimi ključi so se izvajale te operacije.

1. 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid

V tem ključu se nahaja edinstveni identifikator sistema, ki se ustvari med namestitvijo Windows OS. V kombinaciji z API klicem GetComputerName gre za t.i. jemanje prstnega odtisa sistema (fingerprinting).

2.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\

Na tej poti se nahajajo ključi vseh nameščenih programov s podključem “Path”; ta vsebuje vrednost, ki opisuje pot do izvršljive datoteke . Obravnavana koda cilja ključe za firefox.exe, chrome.exe, thunderbird.exe, OUTLOOK.EXE, filezilla.exe, pidgin.exe, … Osredotoča se torej na nameščene spletne brskalnike, odjemalce elektronske pošte, FTP odjemalce in programe za hipno sporočanje.

Na podlagi najdenih nameščenih programov se izvedejo akcije kot so:

1.
HKEY_CURRENT_USER\Software\Microsoft\Windows Messaging Subsystem\Profiles\...
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\...
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\...

Kraja poverilnic uporabniških računov iz nameščenih odjemalcev elektronske pošte.

2.
C:\Program Files\FileZilla\Filezilla.xml

Kraja poverilnic uporabniških računov iz nameščenih FTP odjemalcev.

3.
C:\Users\%user%\AppData\Roaming.purple\accounts.xml

Kraja poverilnic uporabniških računov iz nameščenih programov za hipno sporočanje (Pidgin).

4.
C:\Users\%user%\AppData\Local\Google\Chrome\User Data\Default\Login Data

Kraja vseh shranjenih gesel v spletnem brskalniku.

Vsi tako zbrani podatki se nato pošljejo na oddaljen spletni naslov, ki je pod nadzorom napadalcev.

Povzetek analize

Tekom analize smo se ukvarjali s premagovanjem VB5 packerja in raziskovanjem razkrite kode v vsakem od vzorcev, ki je bil, ali del transportne datoteke ali pa je bil ta prenesen iz oddaljene lokacije.

To nas je privedlo do končne kode, ki sistem okuži s Pony trojanskim konjem; analiza te, pa nam je razkrila njegove namere.

Da se bomo tekom analize srečali z različnimi uporabljenimi metodami, ki nam analizo otežujejo in skušajo preprečiti, je bilo seveda pričakovano.
Med temi metodami smo tako našli uporabo VB5 packerja, zaznavo virtualnih sistemov, zaznavo orodij za avtomatsko analizo (sandbox) in razhroščevalnikov ter poskusom zadrževanja izvedbe kode za določen čas, s katero se skuša izogniti zaznavi s strani protivirusnih programov, ipd.

Kako naprej s podatki pridobljenimi v analizi

Izsledki analize seveda niso namenjeni zgolj pisanju tega članka. Ti podatki so seveda velikega pomena pri razumevanju obnašanja zlonamerne kode, na podlagi katerih lahko izvedemo različne zaščitne ukrepe. Omenimo poglavitne:

  1. Tako kot v dveh primerih elektronskih sporočil, smo tudi ob analizi ugotovili prenos dodatne zlonamerne datoteke iz oddaljene lokacije. Te se nahajajo na zlorabljenih spletnih mestih, kar je pogosto posledica njihovega slabega vzdrževanja. Na SI-CERT z različnimi ukrepi poskušamo onemogočiti dostop do teh datotek in tudi poskrbeti za njihovo odstranitev;
  2. Vse zbrane vzorce zlonamerne kode smo poslali proizvajalcem protivirusne programske opreme, da jih vključijo v posodobljene zbirke svojih zaščit;
  3. Preko platforme MISP (Malware Information Sharing Platform) s povezanimi skupnostmi (npr. nacionalnimi in ostalimi CERT-i drugih držav) delimo vzorce okužbe, kazalnike okužbe (IoC – Indicator of compromise) in tehnične informacije ter ostale ugotovitve analize. Ustrezne informacije preko te platforme podamo v obliki pravil, ki se lahko izvozijo direktno na različne zaščitne sisteme, kot so požarni zidovi, IDS (Intrusion Detection Systems) in IPS (Intrusion Prevention Systems).

Zaključek

Na SI-CERT svetujemo uporabo posodobljenega operacijskega sistema in protivirusne zaščite ter redno posodabljanje programske opreme mrežnih ter ostalih povezanih naprav. Klikanje na povezave ali odpiranje priponk v sumljivih sporočilih pa uporabnikom močno odsvetujemo, saj je to brez predhodnega testiranja v varnem okolju zelo nevarno početje.

Da se SI-CERT s takšnimi aktivnostmi trudi zagotoviti uporabnikom varno okolje in da tudi na ta način skušamo preprečiti, da kakšen nespametni klik na povezavo ali priponko ne privede do okužbe je verjetno bolj malo znano. Ampak da; SI-CERT je veliko več, kot zgolj “Svetujemo vam …”

Namen predstavljene analize je predvsem tehnično predstaviti, v kakšnih in koliko korakih pride do okužbe z obravnavano različico Pony trojanskega konja, pa tudi malenkost dvigniti oddejo in pogledati, kaj vse se skriva za kratico SI-CERT.

P.S.

V enem od naslednjih člankov bomo kratko predstavili tudi nekaj orodij, ki jih uporabljamo pri analizi vzorcev zlonamerne kode. Zapis pa obogatili še z analizo izvoza pomnilnika (memory dump) ter pogledom na nekaj zanimivejših metod, npr. code injection in process hollowing, uporabljenih v postopku okužbe.