ProHoster > Blog > Uprava > RATKing: nova kampanja s trojanci za oddaljeni dostop
RATKing: nova kampanja s trojanci za oddaljeni dostop
Konec maja smo odkrili kampanjo za distribucijo zlonamerne programske opreme Remote Access Trojan (RAT) – programov, ki napadalcem omogočajo oddaljen nadzor nad okuženim sistemom.
Skupino, ki smo jo pregledali, je odlikovalo dejstvo, da ni izbrala nobene posebne družine RAT za okužbo. Pri napadih znotraj kampanje je bilo opaženih več trojancev (vsi so bili široko dostopni). S to lastnostjo nas je skupina spomnila na podganjega kralja – mitsko žival, ki jo sestavljajo glodavci s prepletenimi repi.
Izvirnik je povzet po monografiji K. N. Rossikova "Miši in miši podobni glodavci, gospodarsko najpomembnejši" (1908)
V čast tega bitja smo skupino, o kateri razmišljamo, poimenovali RATKing. V tem prispevku bomo podrobno opisali, kako so napadalci izvedli napad, katera orodja so uporabili, delili pa bomo tudi naše misli o pripisovanju za to kampanjo.
Napredek napada
Vsi napadi v tej kampanji so potekali po naslednjem algoritmu:
Uporabnik je prejel lažno e-poštno sporočilo s povezavo do Google Drive.
Z uporabo povezave je žrtev prenesla zlonamerni skript VBS, ki je določil knjižnico DLL za nalaganje končnega tovora v register Windows in zagnal PowerShell, da ga izvede.
Knjižnica DLL je v sistemski proces vbrizgala končni koristni tovor – pravzaprav enega od RAT-jev, ki jih uporabljajo napadalci – in registrirala skript VBS v samodejnem zagonu, da bi pridobila oporo v okuženem računalniku.
Končni koristni tovor je bil izveden v sistemskem procesu in je napadalcu omogočil nadzor nad okuženim računalnikom.
Shematično je to mogoče predstaviti takole:
Nato se bomo osredotočili na prve tri stopnje, saj nas zanima mehanizem dostave zlonamerne programske opreme. Ne bomo podrobneje opisovali mehanizma delovanja same zlonamerne programske opreme. So široko dostopni - bodisi se prodajajo na specializiranih forumih ali celo distribuirajo kot odprtokodni projekti - in zato niso edinstveni za skupino RATKing.
Analiza stopenj napada
Faza 1. E-pošta z lažnim predstavljanjem
Napad se je začel tako, da je žrtev prejela zlonamerno pismo (napadalci so uporabili različne predloge z besedilom; spodnji posnetek prikazuje en primer). Sporočilo je vsebovalo povezavo do zakonitega repozitorija drive.google.com, kar naj bi vodilo do strani za prenos dokumenta PDF.
Primer e-pošte z lažnim predstavljanjem
Vendar v resnici sploh ni bil naložen dokument PDF, ampak skript VBS.
Ko kliknete povezavo iz e-poštnega sporočila na zgornjem posnetku zaslona, se prikaže datoteka z imenom Cargo Flight Details.vbs. V tem primeru napadalci datoteke sploh niso poskušali prikriti kot legitimen dokument.
Hkrati smo v okviru te akcije odkrili skripto z imenom Cargo Trip Detail.pdf.vbs. Lahko bi veljalo že za legitimen PDF, ker Windows privzeto skriva datotečne pripone. Res je, da bi lahko v tem primeru sum še vedno vzbudila njegova ikona, ki je ustrezala skriptu VBS.
Na tej stopnji bi lahko žrtev prepoznala prevaro: samo za trenutek si pobliže oglejte prenesene datoteke. Vendar pa se v takšnih kampanjah lažnega predstavljanja napadalci pogosto zanašajo na nepazljivega ali prenagljenega uporabnika.
Faza 2. Delovanje skripta VBS
Skript VBS, ki bi ga lahko uporabnik nenamerno odprl, je registriral knjižnico DLL v registru Windows. Skript je bil zamegljen: vrstice v njem so bile zapisane kot bajti, ločeni s poljubnim znakom.
Primer zamegljenega skripta
Algoritem za odkrivanje je precej preprost: vsak tretji znak je bil izključen iz zamegljenega niza, nato pa je bil rezultat dekodiran iz base16 v izvirni niz. Na primer od vrednosti 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (označeno na zgornjem posnetku zaslona) je nastala vrstica WScript.Shell.
Za odmegljevanje nizov smo uporabili funkcijo Python:
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
Spodaj, v vrsticah 9–10, označujemo vrednost, katere odkrivanje je povzročilo datoteko DLL. Prav on je bil zagnan na naslednji stopnji s pomočjo PowerShell.
Niz z zamegljenim DLL
Vsaka funkcija v skriptu VBS je bila izvedena, ko so bili nizi razmagljeni.
Po zagonu skripta je bila funkcija poklicana wscript.sleep — uporabljal se je za izvedbo odložene izvršitve.
Nato je skript deloval z registrom Windows. Za to je uporabil tehnologijo WMI. Z njegovo pomočjo je bil ustvarjen edinstven ključ, v njegov parameter pa je bilo zapisano telo izvršljive datoteke. Do registra smo dostopali prek WMI z naslednjim ukazom:
Na tretji stopnji je zlonamerni DLL naložil končni koristni tovor, ga vbrizgal v sistemski proces in zagotovil, da se skript VBS samodejno zažene, ko se uporabnik prijavi.
Zagon prek PowerShell
DLL je bil izveden z naslednjim ukazom v PowerShell:
prejel podatke o vrednosti registra z imenom rnd_value_name — ti podatki so bili datoteka DLL, napisana na platformi .Net;
naložil nastali modul .Net v pomnilnik procesa powershell.exe uporabo funkcije [System.Threading.Thread]::GetDomain().Load()(podroben opis funkcije Load(). na voljo na Microsoftovem spletnem mestu);
opravljal funkcijo GUyyvmzVhebFCw]::EhwwK() - z njo se je začela izvedba knjižnice DLL - s parametri vbsScriptPath, xorKey, vbsScriptName... Parameter xorKey shranil ključ za dešifriranje končnega tovora in parametre vbsScriptPath и vbsScriptName so bili preneseni, da bi registrirali skript VBS v samodejnem zagonu.
Opis knjižnice DLL
V dekompilirani obliki je bil zagonski nalagalnik videti takole:
Nalagalnik v dekompilirani obliki (funkcija, s katero se je začelo izvajanje knjižnice DLL, je podčrtana z rdečo)
Zagonski nalagalnik je zaščiten z zaščito .Net Reactor. Pripomoček de4dot odlično odstrani to zaščito.
Ta nakladalnik:
vbrizgal koristni tovor v sistemski proces (v tem primeru je svchost.exe);
V samodejni zagon sem dodal skript VBS.
Vbrizgavanje tovora
Oglejmo si funkcijo, ki jo je poklical skript PowerShell.
Funkcija, ki jo kliče skript PowerShell
Ta funkcija je izvedla naslednja dejanja:
dešifriral dva niza podatkov (array и array2 na posnetku zaslona). Prvotno so bili stisnjeni z uporabo gzip in šifrirani z algoritmom XOR s ključem xorKey;
kopirali podatke v dodeljena pomnilniška področja. Podatki iz array - na območje pomnilnika, na katerega kažete intPtr (payload pointer na posnetku zaslona); podatki iz array2 - na območje pomnilnika, na katerega kažete intPtr2 (shellcode pointer na posnetku zaslona);
imenovana funkcija CallWindowProcA(описание Ta funkcija je na voljo na Microsoftovem spletnem mestu) z naslednjimi parametri (imena parametrov so navedena spodaj, na posnetku zaslona so v enakem vrstnem redu, vendar z delujočimi vrednostmi):
lpPrevWndFunc - kazalec na podatke iz array2;
hWnd — kazalec na niz, ki vsebuje pot do izvršljive datoteke svchost.exe;
Msg - kazalec na podatke iz array;
wParam, lParam — parametri sporočila (v tem primeru ti parametri niso bili uporabljeni in so imeli vrednosti 0);
ustvaril datoteko %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlČe <name> - to so prvi 4 znaki parametra vbsScriptName (na posnetku zaslona se delček kode s tem dejanjem začne z ukazom File.Copy). Na ta način je zlonamerna programska oprema dodala datoteko URL na seznam datotek za samodejni zagon, ko se je uporabnik prijavil in se tako povezal z okuženim računalnikom. Datoteka URL je vsebovala povezavo do skripta:
Da bi razumeli, kako je bila injekcija izvedena, smo dešifrirali nize podatkov array и array2. Za to smo uporabili naslednjo funkcijo Python:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
Posledično smo ugotovili, da:
array je bila datoteka PE - to je končna koristna vsebina;
array2 je bila lupinska koda, potrebna za izvedbo injekcije.
Shellcode iz niza array2 podana kot vrednost funkcije lpPrevWndFunc v funkcijo CallWindowProcA. lpPrevWndFunc — funkcija povratnega klica, njen prototip je videti takole:
Torej, ko zaženete funkcijo CallWindowProcA s parametri hWnd, Msg, wParam, lParam lupinska koda iz matrike se izvede array2 z argumenti hWnd и Msg. hWnd je kazalec na niz, ki vsebuje pot do izvršljive datoteke svchost.exeIn Msg — kazalec na končni tovor.
Lupinska koda je prejela naslove funkcij od kernel32.dll и ntdll32.dll na podlagi zgoščenih vrednosti iz njihovih imen in vbrizgal končni tovor v pomnilnik procesa svchost.exes tehniko Process Hollowing (več o tem lahko preberete v tem članek). Pri vbrizgavanju lupinske kode:
ustvaril proces svchost.exe v stanju mirovanja z uporabo funkcije CreateProcessW;
nato skril prikaz odseka v naslovnem prostoru procesa svchost.exe uporabo funkcije NtUnmapViewOfSection. Tako je program sprostil spomin originalnega procesa svchost.exeda nato dodeli pomnilnik za koristni tovor na tem naslovu;
dodeljen pomnilnik za obremenitev v naslovnem prostoru procesa svchost.exe uporabo funkcije VirtualAllocEx;
Začetek postopka vbrizgavanja
zapisal vsebino koristnega tovora v naslovni prostor procesa svchost.exe uporabo funkcije WriteProcessMemory (kot na spodnjem posnetku);
nadaljeval postopek svchost.exe uporabo funkcije ResumeThread.
Dokončanje postopka vbrizgavanja
Prenosljiva zlonamerna programska oprema
Kot rezultat opisanih dejanj je bila na okuženi sistem nameščena ena od več zlonamernih programov razreda RAT. V spodnji tabeli je navedena zlonamerna programska oprema, uporabljena v napadu, ki jo lahko z gotovostjo pripišemo eni skupini napadalcev, saj so vzorci dostopali do istega ukazno-kontrolnega strežnika.
Primeri porazdeljene zlonamerne programske opreme z istim nadzornim strežnikom
Tukaj sta omembe vredni dve stvari.
Prvič, samo dejstvo, da so napadalci uporabljali več različnih družin RAT hkrati. To vedenje ni značilno za znane kibernetske skupine, ki pogosto uporabljajo približno enak nabor orodij, ki jih poznajo.
Drugič, RATKing je uporabil zlonamerno programsko opremo, ki se prodaja na specializiranih forumih za nizko ceno ali pa je celo odprtokodni projekt.
Popolnejši seznam zlonamerne programske opreme, uporabljene v kampanji – z enim pomembnim opozorilom – je naveden na koncu članka.
O skupini
Opisane zlonamerne akcije ne moremo pripisati znanim napadalcem. Za zdaj verjamemo, da je te napade izvedla popolnoma nova skupina. Kot smo zapisali na začetku, smo ga poimenovali RATKing.
Za ustvarjanje skripta VBS je skupina verjetno uporabila orodje, podobno pripomočku VBS-Crypter od razvijalca NYAN-x-CAT. Na to kaže podobnost skripta, ki ga ta program ustvari s skriptom napadalcev. Natančneje, oba:
izvedite odloženo izvedbo s funkcijo Sleep;
uporabite WMI;
registrirajte telo izvršljive datoteke kot parameter registrskega ključa;
izvesti to datoteko z lupino PowerShell v svojem naslovnem prostoru.
Zaradi jasnosti primerjajte ukaz PowerShell za zagon datoteke iz registra, ki ga uporablja skript, ustvarjen z uporabo VBS-Crypter:
Upoštevajte, da so napadalci uporabili drug pripomoček iz NYAN-x-CAT kot eno od koristnih obremenitev - LimeRAT.
Naslovi strežnikov C&C nakazujejo še eno značilnost RATKinga: skupina daje prednost dinamičnim DNS storitvam (glejte seznam C&C v tabeli IoC).
IoC
V spodnji tabeli je popoln seznam skript VBS, ki jih je najverjetneje mogoče pripisati opisani akciji. Vsi ti skripti so podobni in izvajajo približno enako zaporedje dejanj. Vsi vbrizgajo zlonamerno programsko opremo razreda RAT v zaupanja vreden proces Windows. Vsi imajo naslove C&C registrirane s storitvami Dynamic DNS.
Vendar ne moremo trditi, da so vse te skripte distribuirali isti napadalci, z izjemo vzorcev z enakimi naslovi C&C (na primer kimjoy007.dyndns.org).