RATKing: uus kampaania kaugjuurdepääsuga troojalastega
Mai lõpus avastasime kampaania Remote Access Trojan (RAT) pahavara levitamiseks – programmid, mis võimaldavad ründajatel nakatunud süsteemi kaugjuhtida.
Meie uuritud rühm eristus selle poolest, et see ei valinud nakatumiseks ühtegi konkreetset RAT-perekonda. Kampaania rünnakutes märgati mitmeid troojalasi (kõik need olid laialdaselt kättesaadavad). Selle funktsiooniga meenutas seltskond meile rotikuningat – müütilist looma, kes koosneb põimunud sabadega närilistest.
Originaal on võetud K. N. Rossikovi monograafiast “Hiired ja hiiretaolised närilised, majanduslikult kõige olulisemad” (1908)
Selle olendi auks panime kaalutavale grupile nimeks RATK. Selles postituses käsitleme üksikasjalikult, kuidas ründajad rünnaku läbi viisid, milliseid tööriistu nad kasutasid, ning jagame ka oma mõtteid selle kampaania omistamise kohta.
Rünnaku edenemine
Kõik selle kampaania rünnakud toimusid järgmise algoritmi järgi:
Kasutaja sai andmepüügimeili Google Drive'i lingiga.
Seda linki kasutades laadis ohver alla pahatahtliku VBS-skripti, mis määras DLL-i teegi, mis laadib lõpliku kasuliku koormuse Windowsi registrisse, ja käivitas selle käivitamiseks PowerShelli.
DLL-teek sisestas lõpliku kasuliku koormuse – tegelikult ühe ründajate kasutatavatest RAT-idest – süsteemiprotsessi ja registreeris VBS-i skripti automaatkäivitusel, et nakatunud masinas jalad alla saada.
Lõplik kasulik koormus teostati süsteemiprotsessis ja see andis ründajale võimaluse nakatunud arvutit kontrollida.
Skemaatiliselt saab seda kujutada järgmiselt:
Järgmisena keskendume kolmele esimesele etapile, kuna oleme huvitatud pahavara edastamise mehhanismist. Me ei kirjelda üksikasjalikult pahavara enda toimimismehhanismi. Need on laialdaselt saadaval - kas müüakse spetsiaalsetes foorumites või isegi levitatakse avatud lähtekoodiga projektidena - ja seetõttu pole need RATKingi grupi jaoks ainulaadsed.
Rünnaku etappide analüüs
1. etapp. Andmepüügimeil
Rünnak algas sellega, et ohver sai pahatahtliku kirja (ründajad kasutasid tekstiga erinevaid malle; alloleval ekraanipildil on üks näide). Sõnum sisaldas linki seaduslikule hoidlale drive.google.com, mis väidetavalt viis PDF-dokumendi allalaadimise lehele.
Andmepüügimeili näide
Kuid tegelikult ei laaditud mitte PDF-dokumenti, vaid VBS-i skripti.
Kui klõpsasite ülaloleval ekraanipildil e-kirja lingil, ilmus fail nimega Cargo Flight Details.vbs. Antud juhul ei üritanud ründajad seda toimikut legitiimse dokumendina maskeerida.
Samal ajal avastasime selle kampaania raames skripti nimega Cargo Trip Detail.pdf.vbs. See võib juba õigustatud PDF-i jaoks läbi minna, kuna Windows peidab vaikimisi faililaiendid. Tõsi, antud juhul võis kahtlust äratada siiski selle ikoon, mis vastas VBS-i skriptile.
Selles etapis võis ohver pettuse ära tunda: vaadake lihtsalt allalaaditud faile sekundiks lähemalt. Selliste andmepüügikampaaniate puhul tuginevad ründajad aga sageli tähelepanematule või kiirustavale kasutajale.
2. etapp. VBS-i skripti toimimine
VBS-skript, mille kasutaja võis kogemata avada, registreeris Windowsi registris DLL-i teegi. Skript oli hägune: selles olevad read olid kirjutatud baitidena, mida eraldas suvaline märk.
Näide segatud skriptist
Deobfuskatsiooni algoritm on üsna lihtne: iga kolmas märk jäeti hägustatud stringist välja, misjärel dekodeeriti tulemus base16-st algsesse stringi. Näiteks väärtusest 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (ülemisel ekraanipildil esile tõstetud) oli tulemuseks joon WScript.Shell.
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
Allpool ridadel 9–10 tõstame esile väärtuse, mille deobfuskeerimise tulemuseks oli DLL-fail. See oli tema, kes käivitati järgmises etapis PowerShelli abil.
String hägustatud DLL-iga
Iga VBS-i skripti funktsioon käivitati stringide deobfuskeerimisel.
Pärast skripti käivitamist kutsuti funktsioon välja wscript.sleep — seda kasutati täitmise edasilükkamiseks.
Järgmisena töötas skript Windowsi registriga. Ta kasutas selleks WMI tehnoloogiat. Selle abiga loodi unikaalne võti ja käivitatava faili keha kirjutati selle parameetrile. Registrile pääses juurde WMI kaudu, kasutades järgmist käsku:
Kolmandas etapis laadis pahatahtlik DLL lõpliku kasuliku koormuse, sisestas selle süsteemiprotsessi ja tagas, et VBS-i skript käivitub automaatselt, kui kasutaja sisse logis.
saanud registriväärtuse andmed koos nimega rnd_value_name — need andmed olid .Neti platvormil kirjutatud DLL-fail;
laadis saadud .Neti mooduli protsessimällu powershell.exe funktsiooni kasutades [System.Threading.Thread]::GetDomain().Load()(funktsiooni Load() üksikasjalik kirjeldus saadaval Microsofti veebisaidil);
täitis funktsiooni GUyyvmzVhebFCw]::EhwwK() - DLL teegi täitmine algas sellega - parameetritega vbsScriptPath, xorKey, vbsScriptName... Parameeter xorKey salvestas võtme lõpliku kasuliku koormuse dekrüpteerimiseks ja parameetrid vbsScriptPath и vbsScriptName viidi üle VBS-i skripti registreerimiseks automaatkäivitusel.
DLL-i teegi kirjeldus
Dekompileeritud kujul nägi alglaadur välja selline:
Laadija dekompileeritud kujul (funktsioon, millega DLL-i teegi täitmine algas, on punasega alla joonitud)
Alglaadurit kaitseb .Net Reactori kaitsja. Utiliit de4dot teeb selle kaitsme eemaldamisel suurepärase töö.
See laadur:
sisestas kasuliku koormuse süsteemiprotsessi (selles näites see svchost.exe);
Lisasin automaatkäivitusse VBS-i skripti.
Kasuliku koormuse süstimine
Vaatame funktsiooni, mida PowerShelli skript kutsus.
PowerShelli skripti kutsutud funktsioon
See funktsioon teostas järgmisi toiminguid:
dekrüpteeris kaks andmekogumit (array и array2 ekraanipildil). Need tihendati algselt gzipi abil ja krüpteeriti võtmega XOR-algoritmiga xorKey;
kopeeriti andmed eraldatud mälupiirkondadesse. Andmed alates array - osutatud mälualale intPtr (payload pointer ekraanipildil); andmed alates array2 - osutatud mälualale intPtr2 (shellcode pointer ekraanipildil);
nimetatakse funktsiooniks CallWindowProcA(описание See funktsioon on saadaval Microsofti veebisaidil) järgmiste parameetritega (parameetrite nimed on loetletud allpool, ekraanipildil on need samas järjekorras, kuid tööväärtustega):
lpPrevWndFunc - kursor andmetele array2;
hWnd — osuti stringile, mis sisaldab käivitatava faili teed svchost.exe;
Msg - kursor andmetele array;
wParam, lParam — sõnumi parameetrid (antud juhul neid parameetreid ei kasutatud ja nende väärtused olid 0);
lõi faili %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlKus <name> - need on parameetri esimesed 4 märki vbsScriptName (ekraanipildil algab selle toiminguga koodifragment käsuga File.Copy). Nii lisas pahavara automaatkäivitusfailide loendisse URL-faili, kui kasutaja sisse logis ja seeläbi nakatunud arvutiga seotuks. URL-fail sisaldas linki skriptile:
Et mõista, kuidas süstimine toimus, dekrüpteerisime andmemassiivid array и array2. Selleks kasutasime järgmist Pythoni funktsiooni:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
Selle tulemusena saime teada, et:
array oli PE-fail – see on lõplik koormus;
array2 oli süstimiseks vajalik shellkood.
Shellkood massiivist array2 edastati funktsiooni väärtusena lpPrevWndFunc funktsiooniks CallWindowProcA. lpPrevWndFunc — tagasihelistamisfunktsioon, selle prototüüp näeb välja selline:
Nii et kui funktsiooni käivitate CallWindowProcA parameetritega hWnd, Msg, wParam, lParam käivitatakse massiivi shellkood array2 argumentidega hWnd и Msg. hWnd on kursor stringile, mis sisaldab käivitatava faili teed svchost.exeJa Msg — osuti lõplikule kasulikule koormale.
Shellcode sai funktsiooni aadressid aadressilt kernel32.dll и ntdll32.dll põhinevad nende nimede räsiväärtustel ja sisestasid lõpliku kasuliku koormuse protsessimällu svchost.exekasutades Process Hollowing tehnikat (selle kohta saate rohkem lugeda siit siit). Shelli koodi süstimisel:
lõi protsessi svchost.exe funktsiooni kasutades peatatud olekus CreateProcessW;
seejärel peitis jaotise kuva protsessi aadressiruumi svchost.exe funktsiooni kasutades NtUnmapViewOfSection. Seega vabastas programm algse protsessi mälu svchost.exeseejärel sellele aadressile kasuliku koormuse jaoks mälu eraldamiseks;
eraldatud mälu kasuliku koormuse jaoks protsessi aadressiruumis svchost.exe funktsiooni kasutades VirtualAllocEx;
Süstimisprotsessi algus
kirjutas kasuliku koormuse sisu protsessi aadressiruumi svchost.exe funktsiooni kasutades WriteProcessMemory (nagu alloleval ekraanipildil);
jätkas protsessi svchost.exe funktsiooni kasutades ResumeThread.
Süstimisprotsessi lõpetamine
Allalaaditav pahavara
Kirjeldatud toimingute tulemusena installiti nakatunud süsteemi üks mitmest RAT-klassi pahavarast. Allolevas tabelis on loetletud ründes kasutatud pahavara, mille võime kindlalt omistada ühele ründajate rühmale, kuna näidised pääsesid juurde samale käsu- ja juhtimisserverile.
Näited levitatud pahavara kohta, millel on sama juhtserver
Siin väärivad tähelepanu kaks asja.
Esiteks juba see, et ründajad kasutasid korraga mitut erinevat RAT-perekonda. Selline käitumine ei ole tüüpiline tuntud kübergruppidele, kes kasutavad sageli ligikaudu samu tööriistu, mis neile tuttavad.
Teiseks kasutas RATKing pahavara, mida müüakse spetsiaalsetes foorumites madala hinnaga või mis on isegi avatud lähtekoodiga projekt.
Täielikum nimekiri kampaanias kasutatud pahavarast – ühe olulise hoiatusega – on toodud artikli lõpus.
Rühma kohta
Me ei saa omistada kirjeldatud pahatahtlikku kampaaniat ühelegi teadaolevale ründajale. Praegu usume, et need rünnakud pani toime põhimõtteliselt uus rühmitus. Nagu alguses kirjutasime, nimetasime seda RATKinguks.
VBS-i skripti loomiseks kasutas rühm tõenäoliselt utiliidiga sarnast tööriista VBS-krüpter arendajalt NYAN-x-CAT. Sellele viitab skripti sarnasus, mille see programm loob ründajate skriptiga. Täpsemalt, nad mõlemad:
teostada funktsiooni abil viivitatud täitmist Sleep;
kasutada WMI-d;
registreerige käivitatava faili keha registrivõtme parameetrina;
käivitage see fail PowerShelli abil oma aadressiruumis.
Selguse huvides võrrelge PowerShelli käsku, et käivitada registrist fail, mida kasutab VBS-Crypteri abil loodud skript:
Pange tähele, et ründajad kasutasid ühe kasuliku koormana teist NYAN-x-CATi utiliiti - LimeRAT.
C&C serverite aadressid viitavad veel ühele RATKingu eripärale: grupp eelistab dünaamilisi DNS-teenuseid (vt C&C-de loendit IoC tabelis).
IoC
Allolev tabel sisaldab täielikku loendit VBS-i skriptidest, mida võib suure tõenäosusega seostada kirjeldatud kampaaniaga. Kõik need skriptid on sarnased ja täidavad ligikaudu sama toimingute jada. Kõik nad süstivad RAT-klassi pahavara usaldusväärsesse Windowsi protsessi. Kõigil neil on dünaamiliste DNS-teenuste abil registreeritud C&C-aadressid.
Siiski ei saa me väita, et kõiki neid skripte levitasid samad ründajad, välja arvatud samade C&C-aadressidega näidised (näiteks kimjoy007.dyndns.org).