Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio

Ovim člankom završavamo seriju publikacija posvećenih analizi zlonamjernog softvera. U prvi dio Proveli smo detaljnu analizu zaražene datoteke koju je jedna europska tvrtka primila poštom i tamo otkrili špijunski softver AgentTesla. U drugi dio opisao je rezultate korak-po-korak analize glavnog modula AgentTesla.

Danas će Ilya Pomerantsev, stručnjak za analizu zlonamjernog softvera u CERT Group-IB, govoriti o prvoj fazi analize zlonamjernog softvera - poluautomatskom raspakiranju uzoraka AgentTesla na primjeru tri mini slučaja iz prakse stručnjaka CERT Group-IB.

Obično je prva faza analize zlonamjernog softvera uklanjanje zaštite u obliku pakera, kriptora, zaštitnika ili učitavača. U većini slučajeva ovaj se problem može riješiti pokretanjem zlonamjernog softvera i izvođenjem dumpa, ali postoje situacije u kojima ova metoda nije prikladna. Na primjer, ako je zlonamjerni softver kriptor, ako štiti svoje memorijske regije od izbacivanja, ako kod sadrži mehanizme za otkrivanje virtualnog stroja ili ako se zlonamjerni softver ponovno pokreće odmah nakon pokretanja. U takvim slučajevima koristi se tzv. “poluautomatsko” raspakiranje, odnosno istraživač ima potpunu kontrolu nad procesom i može intervenirati u bilo kojem trenutku. Razmotrimo ovaj postupak koristeći tri uzorka obitelji AgentTesla kao primjer. Ovo je relativno bezopasan malware ako mu onemogućite pristup mreži.

Uzorak br. 1

Izvorna datoteka je MS Word dokument koji iskorištava ranjivost CVE-2017-11882.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Kao rezultat toga, korisni se teret preuzima i pokreće.

Analiza stabla procesa i markera ponašanja pokazuje ubrizgavanje u proces RegAsm.exe.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Postoje markeri ponašanja karakteristični za AgentTeslu.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Preuzeti uzorak je izvršni NET.-datoteka zaštićena protektorom .NET reaktor.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Otvorimo ga u pomoćnom programu dnSpy x86 i prijeđite na ulaznu točku.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Odlaskom na funkciju DateTimeOffset, pronaći ćemo inicijalizacijski kod za novi NET.-modul. Stavimo prijelomna točka na liniji koja nas zanima i pokrenemo datoteku.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
U jednom od vraćenih međuspremnika možete vidjeti MZ potpis (0x4D 0x5A). Sačuvajmo to.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izbačena izvršna datoteka je dinamička biblioteka koja je učitavač, tj. izvlači korisni teret iz odjeljka resursa i pokreće ga.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
U isto vrijeme, sami potrebni resursi nisu prisutni na odlagalištu. Oni su u matičnom uzorku.

Korisnost dnSpy ima dvije iznimno korisne funkcije koje će nam pomoći da vrlo brzo stvorimo "Frankensteina" iz dvije povezane datoteke.

  1. Prvi vam omogućuje da "zalijepite" dinamičku biblioteku u nadređeni uzorak.

    Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio

  2. Drugi je ponovno pisanje koda funkcije na ulaznoj točki za pozivanje željene metode umetnute dinamičke biblioteke.

    Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio

Spremamo naš “Frankenstein”, set prijelomna točka na liniji koja vraća međuspremnik s dešifriranim resursima i proizvodi dump po analogiji s prethodnom fazom.

Drugi dump je upisan VB.NET izvršna datoteka koja je zaštićena nama poznatim zaštitnikom ConfuserEx.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Nakon uklanjanja zaštitnika, koristimo YARA pravila ranije napisana i uvjeravamo se da je otpakirani zlonamjerni softver stvarno AgentTesla.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio

Uzorak br. 2

Izvorna datoteka je MS Excel dokument. Ugrađena makronaredba uzrokuje izvođenje zlonamjernog koda.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Kao rezultat toga, pokreće se skripta PowerShell.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Skripta dekriptira C# kod i prenosi kontrolu na njega. Sam kod je bootloader, kao što se također može vidjeti iz sandbox izvješća.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Korisni teret je izvršna datoteka NET.-datoteka.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Otvaranje datoteke u dnSpy x86, možete vidjeti da je prikriveno. Uklanjanje zamagljivanja pomoću uslužnog programa de4dot i vratiti se analizi.

Prilikom pregledavanja koda možete otkriti sljedeću funkciju:

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Kodirani redovi su upečatljivi Ulazna točka и prizvati. Stavljamo prijelomna točka u prvi red, pokrenite i spremite vrijednost međuspremnika bajt_0.

Dump je opet aplikacija na NET. i zaštićena ConfuserEx.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Zamagljivanje uklanjamo pomoću de4dot i učitati na dnSpy. Iz opisa datoteke razumijemo s čime se suočavamo CyaX-Sharp učitavač.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Ovaj učitavač ima široku funkcionalnost protiv analize.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Ova funkcionalnost uključuje zaobilaženje ugrađenih Windows zaštitnih sustava, onemogućavanje Windows Defendera, kao i mehanizama otkrivanja sandboxa i virtualnog stroja. Moguće je učitati korisni teret s mreže ili ga pohraniti u odjeljak resursa. Lansiranje se izvodi ubrizgavanjem u vlastiti proces, u duplikat vlastitog procesa ili u procese MSBuild.exe, vbc.exe и RegSvcs.exe ovisno o parametru koji napadač odabere.

Međutim, za nas su manje značajni od AntiDump-funkcija koja dodaje ConfuserEx. Njegov izvorni kod može se pronaći na GitHub.

Za onemogućavanje zaštite, iskoristit ćemo priliku dnSpy, koji vam omogućuje uređivanje IL-kodirati.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Spremite i instalirajte prijelomna točka na liniju pozivanja funkcije dešifriranja korisnog tereta. Nalazi se u konstruktoru glavne klase.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Lansiramo i izbacujemo teret. Koristeći prethodno napisana YARA pravila, uvjeravamo se da je ovo AgentTesla.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio

Uzorak br. 3

Izvorna datoteka je izvršna VB Izvorni PE32-datoteka.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Entropijska analiza pokazuje prisutnost velikog dijela šifriranih podataka.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Prilikom analize prijavnice u VB Decompiler možete primijetiti čudnu pikseliziranu pozadinu.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Entropijski graf bMP-slika je identična entropijskom grafu izvorne datoteke, a veličina je 85% veličine datoteke.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Opći izgled slike ukazuje na korištenje steganografije.

Obratimo pozornost na izgled stabla procesa, kao i na prisutnost markera za ubrizgavanje.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
To znači da je raspakiranje u tijeku. Za učitavače Visual Basica (aka VBKrypt ili VBInjektor) tipična uporaba shellcode inicijalizirati korisni teret, kao i izvršiti samo ubrizgavanje.

Analiza u VB Decompiler pokazao prisutnost događaja Opterećenje na obrascu FegatassocAirballoon2.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Idemo IDA pro na navedenu adresu i proučiti funkciju. Kod je jako zamagljen. Fragment koji nas zanima donosimo u nastavku.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Ovdje se adresni prostor procesa skenira u potrazi za potpisom. Ovaj pristup je krajnje dvojben.

Prvo, početna adresa skeniranja 0x400100. Ova vrijednost je statična i ne prilagođava se kada se baza pomakne. U idealnim stakleničkim uvjetima to će označiti kraj PE-zaglavlje izvršne datoteke. No, baza nije statična, njezina se vrijednost može mijenjati, a traženje stvarne adrese traženog potpisa, iako neće uzrokovati preljev varijable, može potrajati jako dugo.

Drugo, značenje potpisa iWGK. Mislim da je očito da su 4 bajta premala da bi jamčila jedinstvenost. A ako uzmete u obzir prvu točku, vjerojatnost pogreške je prilično visoka.

Zapravo, traženi fragment je pričvršćen na kraj prethodno pronađenog bMP-slike ofsetom 0xA1D0D.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
izvršenje Shellcode provodi u dvije etape. Prvi dešifrira glavni dio. U ovom slučaju, ključ se određuje grubom silom.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izbacite dešifrirani Shellcode i pogledajte linije.

Prvo, sada znamo funkciju za stvaranje procesa djeteta: StvoriProcesInternalW.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Drugo, postali smo svjesni mehanizma fiksacije u sustavu.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Vratimo se na izvorni proces. Stavimo prijelomna točka na StvoriProcesInternalW i nastaviti izvršenje. Zatim vidimo vezu NtGetContextThread/NtSetContextThread, koji mijenja početnu adresu izvršenja u adresu ShellCode.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Povezujemo se s kreiranim procesom s debuggerom i aktiviramo događaj Obustavi pri učitavanju/istovaru knjižnice, nastavite s procesom i pričekajte učitavanje NET.- knjižnice.

Daljnje korištenje ProcessHacker dump regije koje sadrže nepakirano NET.- primjena.

Zaustavljamo sve procese i brišemo kopiju zlonamjernog softvera koja se ugradila u sustav.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Izbačena datoteka je zaštićena zaštitnikom .NET reaktor, koji se lako može ukloniti pomoću uslužnog programa de4dot.

Izlaznost nije uspjela: izložimo AgentTeslu čistoj vodi. 3. dio
Koristeći YARA pravila napisana ranije, uvjeravamo se da je ovo AgentTesla.

Da sumiramo

Dakle, detaljno smo demonstrirali proces poluautomatskog raspakiranja uzorka koristeći tri mini-kućišta kao primjer, a također smo analizirali zlonamjerni softver na temelju potpunog slučaja, otkrivši da je uzorak koji se proučava AgentTesla, utvrđujući njegovu funkcionalnost i potpuni popis pokazatelja kompromisa.

Analiza malicioznog objekta koju smo proveli zahtijeva puno vremena i truda, a taj bi posao trebao obavljati poseban zaposlenik u tvrtki, no nisu sve tvrtke spremne zaposliti analitičara.

Jedna od usluga koju pruža Group-IB Laboratorij za računalnu forenziku i analizu zlonamjernog koda je odgovor na cyber incidente. Kako klijenti ne bi gubili vrijeme odobravajući dokumente i raspravljajući o njima usred kibernetičkog napada, Group-IB je pokrenuo Incident Response Retainer, usluga odgovora na incidente prije pretplate koja također uključuje korak analize zlonamjernog softvera. Više informacija o ovome možete pronaći здесь.

Ako želite još jednom proučiti kako se otpakiraju uzorci AgentTesla i vidjeti kako to radi specijalist CERT Group-IB, možete preuzeti snimku webinara na ovu temu здесь.

Izvor: www.habr.com

Dodajte komentar