RATKing: nová kampaň s trójskymi koňmi so vzdialeným prístupom
Koncom mája sme objavili kampaň na distribúciu malvéru Remote Access Trojan (RAT) – programov, ktoré útočníkom umožňujú na diaľku ovládať infikovaný systém.
Skupina, ktorú sme skúmali, sa vyznačovala tým, že nevybrala na infekciu žiadnu špecifickú rodinu RAT. Pri útokoch v rámci kampane bolo zaznamenaných niekoľko trójskych koní (všetky boli bežne dostupné). Touto vlastnosťou nám skupina pripomenula krysieho kráľa – mýtické zviera, ktoré pozostáva z hlodavcov s prepletenými chvostmi.
Originál je prevzatý z monografie K. N. Rossikova „Myši a myšiam podobné hlodavce, ekonomicky najdôležitejšie“ (1908)
Na počesť tohto tvora sme skupinu, o ktorej uvažujeme, pomenovali RATKing. V tomto príspevku sa budeme podrobne zaoberať tým, ako útočníci vykonali útok, aké nástroje použili, a tiež sa podelíme o naše myšlienky o pripisovaní tejto kampane.
Priebeh útoku
Všetky útoky v tejto kampani sa uskutočnili podľa nasledujúceho algoritmu:
Používateľ dostal phishingový e-mail s odkazom na Disk Google.
Pomocou tohto odkazu si obeť stiahla škodlivý skript VBS, ktorý špecifikoval knižnicu DLL na načítanie konečného obsahu do registra Windows a spustil PowerShell, aby ho spustil.
Knižnica DLL vložila konečnú užitočnú záťaž - v skutočnosti jednu z RAT používaných útočníkmi - do systémového procesu a zaregistrovala skript VBS v automatickom spustení, aby získala oporu v infikovanom počítači.
Konečné užitočné zaťaženie sa vykonalo v systémovom procese a poskytlo útočníkovi možnosť ovládať infikovaný počítač.
Schematicky to môže byť znázornené takto:
Ďalej sa zameriame na prvé tri fázy, keďže nás zaujíma mechanizmus doručovania malvéru. Mechanizmus fungovania samotného malvéru nebudeme podrobne popisovať. Sú široko dostupné – buď sa predávajú na špecializovaných fórach, alebo sa dokonca distribuujú ako open source projekty – a preto nie sú jedinečné pre skupinu RATKing.
Analýza štádií útoku
Fáza 1. Phishingový e-mail
Útok sa začal tým, že obeť dostala škodlivý list (útočníci použili rôzne šablóny s textom; obrázok nižšie ukazuje jeden príklad). Správa obsahovala odkaz na legitímne úložisko drive.google.com, čo údajne viedlo k stránke na stiahnutie dokumentu PDF.
Príklad phishingového e-mailu
V skutočnosti sa však vôbec nenačítal PDF dokument, ale VBS skript.
Keď ste klikli na odkaz z e-mailu na snímke obrazovky vyššie, súbor s názvom Cargo Flight Details.vbs. V tomto prípade sa útočníci ani nepokúsili zamaskovať spis ako legitímny dokument.
Zároveň sme v rámci tejto kampane objavili skript s názvom Cargo Trip Detail.pdf.vbs. Už by to mohlo byť legitímne PDF, pretože systém Windows v predvolenom nastavení skrýva prípony súborov. Pravda, podozrenie mohla v tomto prípade ešte vzbudzovať jeho ikona, ktorá zodpovedala scenáru VBS.
V tejto fáze by obeť mohla rozpoznať podvod: stačí sa na chvíľu bližšie pozrieť na stiahnuté súbory. V takýchto phishingových kampaniach sa však útočníci často spoliehajú na nepozorného alebo uponáhľaného používateľa.
Fáza 2. Operácia skriptu VBS
Skript VBS, ktorý mohol používateľ neúmyselne otvoriť, zaregistroval knižnicu DLL v registri systému Windows. Skript bol zahmlený: riadky v ňom boli napísané ako bajty oddelené ľubovoľným znakom.
Príklad zahmleného skriptu
Algoritmus deobfuskácie je pomerne jednoduchý: každý tretí znak bol vylúčený z obfuskovaného reťazca, potom bol výsledok dekódovaný zo základne 16 do pôvodného reťazca. Napríklad z hodnoty 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (zvýraznené na obrázku vyššie) bol výsledný riadok WScript.Shell.
Na deobfuskáciu reťazcov sme použili funkciu Python:
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
Nižšie v riadkoch 9–10 zvýrazníme hodnotu, ktorej deobfuskácia viedla k súboru DLL. Bol to on, kto bol spustený v ďalšej fáze pomocou PowerShell.
Reťazec s obfuskovanou knižnicou DLL
Každá funkcia v skripte VBS bola vykonaná, keď boli reťazce deobfuskované.
Po spustení skriptu bola funkcia zavolaná wscript.sleep — slúžila na vykonanie odloženej exekúcie.
Ďalej skript pracoval s registrom Windows. Využil na to technológiu WMI. S jeho pomocou bol vytvorený jedinečný kľúč a telo spustiteľného súboru bolo zapísané do jeho parametra. Do registra sa pristupovalo cez WMI pomocou nasledujúceho príkazu:
V tretej fáze záškodnícka knižnica DLL načítala konečné užitočné zaťaženie, vložila ho do systémového procesu a zabezpečila automatické spustenie skriptu VBS, keď sa používateľ prihlásil.
Spustite cez PowerShell
DLL bola spustená pomocou nasledujúceho príkazu v PowerShell:
vykonával funkciu GUyyvmzVhebFCw]::EhwwK() - spustenie knižnice DLL začalo s ním - s parametrami vbsScriptPath, xorKey, vbsScriptName. Parameter xorKey uložený kľúč na dešifrovanie konečného užitočného zaťaženia a parametre vbsScriptPath и vbsScriptName boli prenesené za účelom registrácie skriptu VBS v automatickom spustení.
Popis knižnice DLL
V dekompilovanej podobe vyzeral bootloader takto:
Loader v dekompilovanej forme (funkcia, s ktorou začalo vykonávanie knižnice DLL, je podčiarknutá červenou farbou)
Bootloader je chránený chráničom .Net Reactor. Nástroj de4dot odvádza skvelú prácu pri odstraňovaní tohto chrániča.
Tento nakladač:
vložilo užitočné zaťaženie do systémového procesu (v tomto príklade to svchost.exe);
Pridal som skript VBS do automatického spustenia.
Vstrekovanie užitočného zaťaženia
Pozrime sa na funkciu, ktorú volal skript PowerShell.
Funkcia volaná skriptom PowerShell
Táto funkcia vykonala nasledujúce akcie:
dešifrované dve množiny údajov (array и array2 na snímke obrazovky). Pôvodne boli komprimované pomocou gzip a šifrované pomocou algoritmu XOR s kľúčom xorKey;
skopírované dáta do pridelených pamäťových oblastí. Údaje z array - do oblasti pamäte, na ktorú ukazuje intPtr (payload pointer na snímke obrazovky); údaje z array2 - do oblasti pamäte, na ktorú ukazuje intPtr2 (shellcode pointer na snímke obrazovky);
nazývaná funkcia CallWindowProcA(описание Táto funkcia je dostupná na webovej lokalite spoločnosti Microsoft) s nasledujúcimi parametrami (názvy parametrov sú uvedené nižšie, na snímke obrazovky sú v rovnakom poradí, ale s pracovnými hodnotami):
lpPrevWndFunc - ukazovateľ na údaje z array2;
hWnd — ukazovateľ na reťazec obsahujúci cestu k spustiteľnému súboru svchost.exe;
Msg - ukazovateľ na údaje z array;
wParam, lParam — parametre správy (v tomto prípade tieto parametre neboli použité a mali hodnoty 0);
vytvoril súbor %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlKde <name> - toto sú prvé 4 znaky parametra vbsScriptName (na snímke obrazovky fragment kódu s touto akciou začína príkazom File.Copy). Týmto spôsobom malvér pridal súbor URL do zoznamu súborov automatického spustenia, keď sa používateľ prihlásil, a tak sa pripojil k infikovanému počítaču. Súbor URL obsahoval odkaz na skript:
Aby sme pochopili, ako bola injekcia vykonaná, dešifrovali sme dátové polia array и array2. Na tento účel sme použili nasledujúcu funkciu Pythonu:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
V dôsledku toho sme zistili, že:
array bol súbor PE - toto je konečný náklad;
array2 bol shell kód potrebný na vykonanie injekcie.
Shellcode z poľa array2 odovzdaná ako funkčná hodnota lpPrevWndFunc do funkcie CallWindowProcA. lpPrevWndFunc — funkcia spätného volania, jej prototyp vyzerá takto:
Takže keď spustíte funkciu CallWindowProcA s parametrami hWnd, Msg, wParam, lParam vykoná sa shell kód z poľa array2 s argumentmi hWnd и Msg. hWnd je ukazovateľ na reťazec obsahujúci cestu k spustiteľnému súboru svchost.exeA Msg — ukazovateľ na konečné užitočné zaťaženie.
Kód shellu prijal adresy funkcií z kernel32.dll и ntdll32.dll na základe hodnôt hash z ich názvov a vložilo konečné užitočné zaťaženie do pamäte procesu svchost.exepomocou techniky Process Hollowing (viac si o nej môžete prečítať v tomto článku článok). Pri vstrekovaní shell kódu:
vytvoril proces svchost.exe v pozastavenom stave pomocou funkcie CreateProcessW;
potom skryl zobrazenie sekcie v adresnom priestore procesu svchost.exe pomocou funkcie NtUnmapViewOfSection. Program tak uvoľnil pamäť pôvodného procesu svchost.exepotom alokovať pamäť pre užitočné zaťaženie na tejto adrese;
alokovaná pamäť pre užitočné zaťaženie v adresnom priestore procesu svchost.exe pomocou funkcie VirtualAllocEx;
Začiatok procesu vstrekovania
zapísal obsah užitočného zaťaženia do priestoru adries procesu svchost.exe pomocou funkcie WriteProcessMemory (ako na obrázku nižšie);
obnovili proces svchost.exe pomocou funkcie ResumeThread.
Dokončenie procesu vstrekovania
Malvér na stiahnutie
V dôsledku opísaných akcií bol do infikovaného systému nainštalovaný jeden z niekoľkých malvérov triedy RAT. V tabuľke nižšie je uvedený malvér použitý pri útoku, ktorý môžeme s istotou pripísať jednej skupine útočníkov, keďže vzorky pristupovali k rovnakému príkazovému a riadiacemu serveru.
Príklady distribuovaného malvéru s rovnakým riadiacim serverom
Za povšimnutie tu stoja dve veci.
Po prvé, samotná skutočnosť, že útočníci použili niekoľko rôznych rodín RAT naraz. Toto správanie nie je typické pre známe kybernetické skupiny, ktoré často používajú približne rovnakú sadu nástrojov, ktoré poznajú.
Po druhé, RATKing použil malvér, ktorý sa buď predáva na špecializovaných fórach za nízku cenu, alebo je dokonca projektom s otvoreným zdrojom.
Kompletnejší zoznam malvéru použitého v kampani – s jedným dôležitým upozornením – je uvedený na konci článku.
O skupine
Opísanú škodlivú kampaň nemôžeme pripísať žiadnym známym útočníkom. Zatiaľ sa domnievame, že tieto útoky vykonala zásadne nová skupina. Ako sme písali na začiatku, nazvali sme to RATKing.
Na vytvorenie skriptu VBS skupina pravdepodobne použila nástroj podobný tomuto nástroju VBS-Crypter od vývojára NYAN-x-CAT. Naznačuje to podobnosť skriptu, ktorý tento program vytvára, so skriptom útočníkov. Konkrétne obaja:
vykonať oneskorené spustenie pomocou funkcie Sleep;
používať WMI;
zaregistrujte telo spustiteľného súboru ako parameter kľúča registra;
spustite tento súbor pomocou prostredia PowerShell v jeho vlastnom adresnom priestore.
Kvôli prehľadnosti porovnajte príkaz PowerShell na spustenie súboru z registra, ktorý používa skript vytvorený pomocou VBS-Crypter:
Všimnite si, že útočníci použili inú pomôcku z NYAN-x-CAT ako jednu z užitočných záťaží - LimeRAT.
Adresy C&C serverov naznačujú ďalšiu charakteristickú črtu RATKingu: skupina preferuje dynamické DNS služby (pozri zoznam C&C v tabuľke IoC).
IoC
Nižšie uvedená tabuľka poskytuje úplný zoznam VBS skriptov, ktoré možno s najväčšou pravdepodobnosťou pripísať opísanej kampani. Všetky tieto skripty sú podobné a vykonávajú približne rovnakú postupnosť akcií. Všetky vstrekujú malvér triedy RAT do dôveryhodného procesu Windows. Všetky majú C&C adresy zaregistrované pomocou služieb Dynamic DNS.
Nemôžeme však tvrdiť, že všetky tieto skripty boli distribuované rovnakými útočníkmi, s výnimkou vzoriek s rovnakými adresami C&C (napríklad kimjoy007.dyndns.org).