Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del

S tem člankom zaključujemo serijo publikacij, posvečenih analizi zlonamerne programske opreme. IN 1. del Opravili smo podrobno analizo okužene datoteke, ki jo je evropsko podjetje prejelo po pošti, in tam odkrili vohunsko programsko opremo AgentTesla. notri drugi del opisal rezultate postopne analize glavnega modula AgentTesla.

Danes bo Ilya Pomerantsev, specialist za analizo zlonamerne programske opreme pri CERT Group-IB, govoril o prvi stopnji analize zlonamerne programske opreme - polavtomatskem razpakiranju vzorcev AgentTesla na primeru treh mini primerov iz prakse strokovnjakov CERT Group-IB.

Običajno je prva stopnja pri analizi zlonamerne programske opreme odstranitev zaščite v obliki pakerja, kriptorja, zaščitnika ali nalagalnika. V večini primerov je to težavo mogoče rešiti z zagonom zlonamerne programske opreme in izvedbo izpisa, vendar obstajajo situacije, ko ta metoda ni primerna. Na primer, če je zlonamerna programska oprema šifrirnik, če ščiti svoje pomnilniške regije pred izpisom, če koda vsebuje mehanizme za zaznavanje navideznega stroja ali če se zlonamerna programska oprema znova zažene takoj po zagonu. V takšnih primerih se uporablja tako imenovano »polavtomatsko« razpakiranje, to pomeni, da ima raziskovalec popoln nadzor nad procesom in lahko kadarkoli posreduje. Oglejmo si ta postopek na primeru treh vzorcev družine AgentTesla. To je razmeroma neškodljiva zlonamerna programska oprema, če ji onemogočite dostop do omrežja.

Vzorec št. 1

Izvorna datoteka je dokument MS Word, ki izkorišča ranljivost CVE-2017-11882.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Posledično se koristni tovor prenese in zažene.

Analiza procesnega drevesa in vedenjskih markerjev kaže vbrizgavanje v proces RegAsm.exe.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Obstajajo vedenjski markerji, značilni za AgentTesla.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Preneseni vzorec je izvedljiv NET.-datoteka zaščitena z zaščito .NET Reactor.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Odprimo ga v pripomočku dnSpy x86 in se pomaknite do vstopne točke.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Z odhodom na funkcijo DateTimeOffset, bomo našli inicializacijsko kodo za novo NET.-modul. Postavimo Ustavljanje na vrstico, ki nas zanima, in zaženemo datoteko.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
V enem od vrnjenih medpomnilnikov lahko vidite podpis MZ (0x4D 0x5A). Prihranimo ga.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Odložena izvršljiva datoteka je dinamična knjižnica, ki je nalagalnik, tj. ekstrahira uporabni tovor iz razdelka virov in ga zažene.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Hkrati potrebni viri sami po sebi niso prisotni na odlagališču. So v matičnem vzorcu.

Uporabnost dnSpy ima dve izjemno uporabni funkcionalnosti, ki nam bosta pomagali precej hitro ustvariti "Frankensteina" iz dveh povezanih datotek.

  1. Prvi vam omogoča, da "prilepite" dinamično knjižnico v nadrejeni vzorec.

    Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del

  2. Drugi je prepisati funkcijsko kodo na vstopni točki za klic želene metode vstavljene dinamične knjižnice.

    Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del

Shranimo naš komplet "Frankenstein". Ustavljanje na vrstici, ki vrne medpomnilnik z dešifriranimi viri, in ustvari izpis po analogiji s prejšnjo stopnjo.

Drugi dump je zapisan v VB.NET izvršljiva datoteka, ki je zaščitena z nam poznanim zaščitnikom ConfuserEx.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Po odstranitvi zaščite uporabimo prej napisana pravila YARA in se prepričamo, da je nepakirana zlonamerna programska oprema res AgentTesla.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del

Vzorec št. 2

Izvorna datoteka je dokument MS Excel. Vgrajeni makro povzroči izvajanje zlonamerne kode.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Posledično se zažene skript PowerShell.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Skript dešifrira kodo C# in ji prenese nadzor. Sama koda je zagonski nalagalnik, kot je razvidno tudi iz poročila peskovnika.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Koristni tovor je izvršljiva datoteka NET.-mapa.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Odpiranje datoteke v dnSpy x86, lahko vidite, da je zakrit. Odstranjevanje zamegljenosti s pomočjo pripomočka de4dot in se vrnite k analizi.

Ko pregledujete kodo, lahko odkrijete naslednjo funkcijo:

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Kodirane vrstice so osupljive Vstopna točka и sklicujejo. Postavili smo Ustavljanje v prvo vrstico, zaženite in shranite vrednost medpomnilnika bajt_0.

Odlagališče je spet vklopljena aplikacija NET. in zaščiten ConfuserEx.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Zamegljenost odstranimo z uporabo de4dot in naložite v dnSpy. Iz opisa datoteke razumemo, da se soočamo s CyaX-Sharp nalagalnik.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Ta nalagalnik ima obsežno funkcijo proti analizi.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Ta funkcionalnost vključuje izogibanje vgrajenim zaščitnim sistemom Windows, onemogočanje programa Windows Defender ter mehanizme za zaznavanje peskovnika in navideznega stroja. Tovor lahko naložite iz omrežja ali ga shranite v razdelek virov. Zagon se izvede z vbrizgavanjem v lasten proces, v dvojnik lastnega procesa ali v procese MSBuild.exe, vbc.exe и RegSvcs.exe odvisno od parametra, ki ga je izbral napadalec.

Vendar so za nas manj pomembni kot AntiDump-funkcija, ki dodaja ConfuserEx. Njegovo izvorno kodo lahko najdete na GitHub.

Za onemogočanje zaščite bomo izkoristili priložnost dnSpy, ki omogoča urejanje IL-Koda.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Shranite in namestite Ustavljanje v vrstico klica funkcije dešifriranja koristnega tovora. Nahaja se v konstruktorju glavnega razreda.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Izstrelimo in odložimo tovor. Z uporabo predhodno napisanih pravil YARA se prepričamo, da je to AgentTesla.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del

Vzorec št. 3

Izvorna datoteka je izvršljiva VB izvorni PE32-mapa.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Entropijska analiza pokaže prisotnost velikega dela šifriranih podatkov.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Pri analizi prijavnice v Dekompilator VB morda boste opazili nenavadno slikovno ozadje.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Entropijski graf bmp-slika je enaka entropijskemu grafu izvirne datoteke, velikost pa je 85 % velikosti datoteke.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Splošni videz slike kaže na uporabo steganografije.

Bodimo pozorni na videz procesnega drevesa, pa tudi na prisotnost markerja za vbrizgavanje.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
To pomeni, da poteka razpakiranje. Za nalagalnike Visual Basic (aka VBKrypt ali VBInjektor) tipična uporaba shellcode za inicializacijo tovora, kot tudi za izvedbo samega vbrizgavanja.

Analiza v Dekompilator VB pokazal prisotnost dogodka Obremenitev pri obrazcu FegatassocAirballoon2.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Pojdimo na IDA pro na navedeni naslov in preučite funkcijo. Koda je močno zamegljena. Fragment, ki nas zanima, predstavljamo spodaj.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Tukaj je naslovni prostor procesa skeniran za podpis. Ta pristop je zelo dvomljiv.

Prvič, začetni naslov skeniranja 0x400100. Ta vrednost je statična in se ne prilagodi, ko se osnova premakne. V idealnih razmerah v rastlinjaku bo kazalo na konec PE-glava izvršljive datoteke. Vendar baza podatkov ni statična, njena vrednost se lahko spremeni in iskanje pravega naslova zahtevanega podpisa lahko traja zelo dolgo, čeprav ne bo povzročilo prelivanja spremenljivke.

Drugič, pomen podpisa iWGK. Mislim, da je očitno, da so 4 bajci premajhni, da bi zagotovili edinstvenost. In če upoštevate prvo točko, je verjetnost napake precej velika.

Pravzaprav je zahtevani fragment pritrjen na konec prej najdenega bmp- slike z ofsetom 0xA1D0D.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Izpolnitev Shellcode izvedeno v dveh fazah. Prvi dešifrira glavnino. V tem primeru je ključ določen s surovo silo.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Odložite dešifrirano Shellcode in poglej črte.

Prvič, zdaj poznamo funkcijo za ustvarjanje podrejenega procesa: CreateProcessInternalW.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Drugič, spoznali smo mehanizem fiksacije v sistemu.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Vrnimo se k prvotnemu postopku. Postavimo Ustavljanje o CreateProcessInternalW in nadaljujte z izvedbo. Nato vidimo povezavo NtGetContextThread/NtSetContextThread, ki spremeni začetni naslov izvajanja v naslov ShellCode.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Z razhroščevalnikom se povežemo z ustvarjenim procesom in aktiviramo dogodek Prekini ob nalaganju/razkladanju knjižnice, nadaljujte s postopkom in počakajte na nalaganje NET.- knjižnice.

Nadaljnja uporaba ProcessHacker regije odlagališča, ki vsebujejo nepakirano NET.- aplikacija.

Ustavimo vse procese in izbrišemo kopijo zlonamerne programske opreme, ki se je vdelala v sistem.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Odložena datoteka je zaščitena z zaščito .NET Reactor, ki ga je mogoče enostavno odstraniti s pomočjo pripomočka de4dot.

Volilna udeležba ni uspela: izpostavimo AgentTeslo čisti vodi. 3. del
Z uporabo prej napisanih pravil YARA se prepričamo, da je to AgentTesla.

Če povzamemo

Tako smo podrobno prikazali postopek polavtomatskega razpakiranja vzorca na primeru treh mini ohišij in analizirali tudi zlonamerno programsko opremo na podlagi popolnega ohišja, pri čemer smo ugotovili, da je proučevani vzorec AgentTesla, ter ugotovili njegovo funkcionalnost in popoln seznam indikatorjev kompromisa.

Analiza zlonamernega predmeta, ki smo jo opravili, zahteva veliko časa in truda, to delo pa bi moral opraviti poseben uslužbenec v podjetju, niso pa vsa podjetja pripravljena zaposliti analitika.

Ena od storitev, ki jih nudi Group-IB Laboratorij za računalniško forenziko in analizo zlonamernih kod, je odziv na kibernetske incidente. Da stranke ne bi izgubljale časa z odobritvijo dokumentov in razpravo o njih sredi kibernetskega napada, je skupina Group-IB predstavila Držalo za odziv na incident, storitev odzivanja na incidente pred naročnino, ki vključuje tudi korak analize zlonamerne programske opreme. Več informacij o tem lahko najdete tukaj.

Če želite še enkrat preučiti, kako se razpakirajo vzorci AgentTesla, in videti, kako to počne specialist CERT Group-IB, si lahko prenesete posnetek spletnega seminarja na to temo tukaj.

Vir: www.habr.com

Dodaj komentar