RATKing: jauna kampaÅa ar attÄlÄs piekļuves Trojas zirgiem
Maija beigÄs mÄs atklÄjÄm kampaÅu, lai izplatÄ«tu attÄlÄs piekļuves Trojas (RAT) ļaunprÄtÄ«gu programmatÅ«ru ā programmas, kas ļauj uzbrucÄjiem attÄlinÄti kontrolÄt inficÄtu sistÄmu.
MÅ«su pÄrbaudÄ«tÄ grupa izcÄlÄs ar to, ka tÄ infekcijai neizvÄlÄjÄs nevienu konkrÄtu RAT Ä£imeni. KampaÅas ietvaros uzbrukumos tika pamanÄ«ti vairÄki Trojas zirgi (tie visi bija plaÅ”i pieejami). Ar Å”o iezÄ«mi grupa mums atgÄdinÄja žurku karali ā mÄ«tisku dzÄ«vnieku, kas sastÄv no grauzÄjiem ar savÄ«tÄm astÄm.
OriÄ£inÄls Åemts no K. N. Rossikova monogrÄfijas āPeles un pelÄm lÄ«dzÄ«gi grauzÄji, ekonomiski svarÄ«gÄkieā (1908)
Par godu Å”ai bÅ«tnei mÄs nosaucÄm grupu, kuru apsveram, par RATKing. Å ajÄ ierakstÄ mÄs detalizÄti aplÅ«kosim, kÄ uzbrucÄji veica uzbrukumu, kÄdus rÄ«kus viÅi izmantoja, kÄ arÄ« dalÄ«simies pÄrdomÄs par Ŕīs kampaÅas attiecinÄÅ”anu.
Uzbrukuma gaita
Visi uzbrukumi Å”ajÄ kampaÅÄ notika saskaÅÄ ar Å”Ädu algoritmu:
LietotÄjs saÅÄma pikŔķerÄÅ”anas e-pasta ziÅojumu ar saiti uz Google disku.
Izmantojot saiti, upuris lejupielÄdÄja ļaunprÄtÄ«gu VBS skriptu, kas noteica DLL bibliotÄku, lai ielÄdÄtu galÄ«go lietderÄ«go slodzi Windows reÄ£istrÄ, un palaida PowerShell, lai to izpildÄ«tu.
DLL bibliotÄka sistÄmas procesÄ ievadÄ«ja pÄdÄjo lietderÄ«go slodzi ā faktiski vienu no uzbrucÄju izmantotajiem RAT un reÄ£istrÄja VBS skriptu automÄtiskÄs palaiÅ”anas laikÄ, lai nostiprinÄtu vietu inficÄtajÄ maŔīnÄ.
PÄdÄjÄ lietderÄ«gÄ slodze tika izpildÄ«ta sistÄmas procesÄ un deva uzbrucÄjam iespÄju kontrolÄt inficÄto datoru.
Shematiski to var attÄlot Å”Ädi:
TÄlÄk mÄs koncentrÄsimies uz pirmajiem trim posmiem, jo āāmÅ«s interesÄ Ä¼aunprÄtÄ«gas programmatÅ«ras piegÄdes mehÄnisms. MÄs sÄ«kÄk neaprakstÄ«sim paÅ”as ļaunprogrammatÅ«ras darbÄ«bas mehÄnismu. Tie ir plaÅ”i pieejami - vai nu tiek pÄrdoti specializÄtos forumos, vai pat izplatÄ«ti kÄ atvÄrtÄ pirmkoda projekti, un tÄpÄc tie nav unikÄli RATKing grupai.
Uzbrukuma stadiju analīze
1. posms. PikŔķerÄÅ”anas e-pasts
Uzbrukums sÄkÄs ar to, ka upuris saÅÄma ļaunprÄtÄ«gu vÄstuli (uzbrucÄji izmantoja dažÄdas veidnes ar tekstu; zemÄk esoÅ”ajÄ ekrÄnuzÅÄmumÄ parÄdÄ«ts viens piemÄrs). ZiÅojumÄ bija saite uz likumÄ«gu repozitoriju drive.google.com, kas it kÄ noveda pie PDF dokumenta lejupielÄdes lapas.
PikŔķerÄÅ”anas e-pasta piemÄrs
TomÄr patiesÄ«bÄ tas nebija PDF dokuments, kas vispÄr tika ielÄdÄts, bet gan VBS skripts.
Kad noklikŔķinÄjÄt uz saites no e-pasta ziÅojumÄ iepriekÅ” redzamajÄ ekrÄnuzÅÄmumÄ, fails ar nosaukumu Cargo Flight Details.vbs. Å ajÄ gadÄ«jumÄ uzbrucÄji pat nemÄÄ£inÄja slÄpt failu kÄ likumÄ«gu dokumentu.
TajÄ paÅ”Ä laikÄ Å”Ä«s kampaÅas ietvaros mÄs atklÄjÄm skriptu ar nosaukumu Cargo Trip Detail.pdf.vbs. Tas jau varÄtu bÅ«t derÄ«gs likumÄ«gam PDF failam, jo āāWindows pÄc noklusÄjuma slÄpj failu paplaÅ”inÄjumus. Tiesa, Å”ajÄ gadÄ«jumÄ aizdomas tomÄr varÄtu raisÄ«t tÄs ikona, kas atbilda VBS skriptam.
Å ajÄ posmÄ upuris varÄja atpazÄ«t maldinÄÅ”anu: vienkÄrÅ”i uz brÄ«di apskatiet lejupielÄdÄtos failus tuvÄk. TomÄr Å”ÄdÄs pikŔķerÄÅ”anas kampaÅÄs uzbrucÄji bieži paļaujas uz neuzmanÄ«gu vai steidzÄ«gu lietotÄju.
2. posms. VBS skripta darbība
VBS skripts, kuru lietotÄjs varÄja netÄ«Å”Äm atvÄrt, Windows reÄ£istrÄ reÄ£istrÄja DLL bibliotÄku. Skripts bija neskaidrs: rindas tajÄ tika rakstÄ«tas kÄ baiti, kas atdalÄ«ti ar patvaļīgu rakstzÄ«mi.
AptumÅ”ota skripta piemÄrs
DeobfuskÄcijas algoritms ir pavisam vienkÄrÅ”s: no aptumÅ”otÄs virknes tika izslÄgta katra treÅ”Ä rakstzÄ«me, pÄc kuras rezultÄts no base16 tika dekodÄts sÄkotnÄjÄ virknÄ. PiemÄram, no vÄrtÄ«bas 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (iepriekÅ” redzamajÄ ekrÄnuzÅÄmumÄ iezÄ«mÄts) iegÅ«tÄ lÄ«nija bija WScript.Shell.
Lai debfuskÄtu virknes, mÄs izmantojÄm Python funkciju:
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
TÄlÄk 9.ā10. rindiÅÄ mÄs iezÄ«mÄjam vÄrtÄ«bu, kuras atsegÅ”anas rezultÄtÄ tika izveidots DLL fails. Tas bija viÅÅ”, kurÅ” tika palaists nÄkamajÄ posmÄ, izmantojot PowerShell.
Virkne ar neskaidru DLL
Katra VBS skripta funkcija tika izpildÄ«ta, kad virknes tika deobfuskÄtas.
PÄc skripta palaiÅ”anas funkcija tika izsaukta wscript.sleep ā to izmantoja atliktÄs izpildes veikÅ”anai.
PÄc tam skripts strÄdÄja ar Windows reÄ£istru. Å im nolÅ«kam viÅÅ” izmantoja WMI tehnoloÄ£iju. Ar tÄs palÄ«dzÄ«bu tika izveidota unikÄla atslÄga, un izpildÄmÄ faila pamatteksts tika ierakstÄ«ts tÄ parametrÄ. ReÄ£istram tika piekļūts, izmantojot WMI, izmantojot Å”Ädu komandu:
TreÅ”ajÄ posmÄ Ä¼aunprÄtÄ«gÄ DLL ielÄdÄja pÄdÄjo lietderÄ«go slodzi, ievadÄ«ja to sistÄmas procesÄ un nodroÅ”inÄja, ka VBS skripts tiek automÄtiski palaists, kad lietotÄjs pieteicÄs.
Palaist, izmantojot PowerShell
DLL tika izpildÄ«ts, izmantojot Å”Ädu komandu programmÄ PowerShell:
saÅÄma reÄ£istra vÄrtÄ«bu datus ar nosaukumu rnd_value_name ā Å”ie dati bija .Net platformÄ rakstÄ«ts DLL fails;
IelÄdÄja iegÅ«to .Net moduli procesa atmiÅÄ powershell.exe izmantojot funkciju [System.Threading.Thread]::GetDomain().Load()(detalizÄts funkcijas Load() apraksts pieejams Microsoft vietnÄ);
pildÄ«ja funkciju GUyyvmzVhebFCw]::EhwwK() - ar to sÄkÄs DLL bibliotÄkas izpilde - ar parametriem vbsScriptPath, xorKey, vbsScriptName. Parametrs xorKey saglabÄja atslÄgu galÄ«gÄs kravas atÅ”ifrÄÅ”anai un parametrus vbsScriptPath Šø vbsScriptName tika pÄrsÅ«tÄ«ti, lai reÄ£istrÄtu VBS skriptu autorun.
IelÄdÄtÄjs dekompilÄtÄ formÄ (sarkanÄ krÄsÄ ir pasvÄ«trota funkcija, ar kuru sÄkÄs DLL bibliotÄkas izpilde)
SÄknÄÅ”anas ielÄdÄtÄjs ir aizsargÄts ar .Net Reactor aizsargu. De4dot utilÄ«ta lieliski noÅem Å”o aizsargu.
Å is iekrÄvÄjs:
ievadÄ«ja lietderÄ«go slodzi sistÄmas procesÄ (Å”ajÄ piemÄrÄ tas svchost.exe);
Es pievienoju VBS skriptu automÄtiskajai palaiÅ”anai.
Kravas iesmidzinÄÅ”ana
Apskatīsim funkciju, kuru izsauca PowerShell skripts.
Funkcija, ko izsauc PowerShell skripts
Å Ä« funkcija veica Å”Ädas darbÄ«bas:
atÅ”ifrÄtas divas datu kopas (array Šø array2 ekrÄnuzÅÄmumÄ). SÄkotnÄji tie tika saspiesti, izmantojot gzip, un Å”ifrÄti ar XOR algoritmu ar atslÄgu xorKey;
kopÄti dati pieŔķirtajÄs atmiÅas zonÄs. Dati no array - uz norÄdÄ«to atmiÅas apgabalu intPtr (payload pointer ekrÄnuzÅÄmumÄ); dati no array2 - uz norÄdÄ«to atmiÅas apgabalu intPtr2 (shellcode pointer ekrÄnuzÅÄmumÄ);
sauc par funkciju CallWindowProcA(Š¾ŠæŠøŃŠ°Š½ŠøŠµ Å Ä« funkcija ir pieejama Microsoft vietnÄ) ar Å”Ädiem parametriem (parametru nosaukumi ir norÄdÄ«ti zemÄk, ekrÄnuzÅÄmumÄ tie ir tÄdÄ paÅ”Ä secÄ«bÄ, bet ar darba vÄrtÄ«bÄm):
lpPrevWndFunc - rÄdÄ«tÄjs uz datiem no array2;
hWnd ā rÄdÄ«tÄjs uz virkni, kas satur ceļu uz izpildÄmo failu svchost.exe;
Msg - rÄdÄ«tÄjs uz datiem no array;
wParam, lParam ā ziÅojuma parametri (Å”ajÄ gadÄ«jumÄ Å”ie parametri netika izmantoti, un to vÄrtÄ«bas bija 0);
izveidoja failu %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlKur <name> - Ŕīs ir parametra pirmÄs 4 rakstzÄ«mes vbsScriptName (ekrÄnuzÅÄmumÄ koda fragments ar Å”o darbÄ«bu sÄkas ar komandu File.Copy). Å ÄdÄ veidÄ Ä¼aunprogrammatÅ«ra pievienoja URL failu automÄtiskÄs palaiÅ”anas failu sarakstam, kad lietotÄjs pieteicÄs un tÄdÄjÄdi tika pievienots inficÄtajam datoram. URL failÄ bija saite uz skriptu:
Lai saprastu, kÄ tika veikta injekcija, mÄs atÅ”ifrÄjÄm datu masÄ«vus array Šø array2. Lai to izdarÄ«tu, mÄs izmantojÄm Å”Ädu Python funkciju:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
RezultÄtÄ mÄs noskaidrojÄm, ka:
array bija PE fails - Ŕī ir pÄdÄjÄ lietderÄ«gÄ slodze;
array2 bija Äaulas kods, kas nepiecieÅ”ams injekcijas veikÅ”anai.
Shellcode no masÄ«va array2 nodota kÄ funkcijas vÄrtÄ«ba lpPrevWndFunc par funkciju CallWindowProcA. lpPrevWndFunc ā atzvanÄ«Å”anas funkcija, tÄs prototips izskatÄs Å”Ädi:
TÄtad, palaižot funkciju CallWindowProcA ar parametriem hWnd, Msg, wParam, lParam shellcode no masÄ«va tiek izpildÄ«ts array2 ar argumentiem hWnd Šø Msg. hWnd ir rÄdÄ«tÄjs uz virkni, kas satur ceļu uz izpildÄmo failu svchost.exeUn Msg ā rÄdÄ«tÄjs uz galÄ«go kravnesÄ«bu.
Shellcode saÅÄma funkciju adreses no kernel32.dll Šø ntdll32.dll pamatojoties uz jaucÄjvÄrtÄ«bÄm no to nosaukumiem un ievadÄ«ja galÄ«go slodzi procesa atmiÅÄ svchost.exeizmantojot Process Hollowing tehniku āā(vairÄk par to varat lasÄ«t Å”ajÄ raksts). InjicÄjot Äaulas kodu:
radÄ«ja procesu svchost.exe apturÄtÄ stÄvoklÄ«, izmantojot funkciju CreateProcessW;
pÄc tam paslÄpa sadaļas displeju procesa adreÅ”u telpÄ svchost.exe izmantojot funkciju NtUnmapViewOfSection. TÄdÄjÄdi programma atbrÄ«voja sÄkotnÄjÄ procesa atmiÅu svchost.exelai pÄc tam Å”ajÄ adresÄ pieŔķirtu atmiÅu lietderÄ«gajai slodzei;
iedalÄ«tÄ atmiÅa lietderÄ«gajai slodzei procesa adreÅ”u telpÄ svchost.exe izmantojot funkciju VirtualAllocEx;
Injekcijas procesa sÄkums
ierakstÄ«ja lietderÄ«gÄs slodzes saturu procesa adreÅ”u telpÄ svchost.exe izmantojot funkciju WriteProcessMemory (kÄ zemÄk esoÅ”ajÄ ekrÄnuzÅÄmumÄ);
atsÄka procesu svchost.exe izmantojot funkciju ResumeThread.
Injekcijas procesa pabeigŔana
LejupielÄdÄjama ļaunprogrammatÅ«ra
AprakstÄ«to darbÄ«bu rezultÄtÄ inficÄtajÄ sistÄmÄ tika instalÄta viena no vairÄkÄm RAT klases ļaunprogrammatÅ«rÄm. TÄlÄk esoÅ”ajÄ tabulÄ ir norÄdÄ«ta uzbrukumÄ izmantotÄ Ä¼aunprogrammatÅ«ra, kuru mÄs droÅ”i varam attiecinÄt uz vienu uzbrucÄju grupu, jo paraugi piekļuva vienam un tam paÅ”am komandu un vadÄ«bas serverim.
IzplatÄ«tas ļaunprÄtÄ«gas programmatÅ«ras piemÄri ar vienu un to paÅ”u vadÄ«bas serveri
Å eit ievÄrÄ«bas cienÄ«gas ir divas lietas.
PirmkÄrt, pats fakts, ka uzbrucÄji izmantoja vairÄkas dažÄdas RAT Ä£imenes vienlaikus. Å Äda rÄ«cÄ«ba nav raksturÄ«ga labi zinÄmÄm kibergrupÄm, kuras bieži izmanto aptuveni tÄdu paÅ”u rÄ«ku komplektu, kas viÅiem ir pazÄ«stams.
OtrkÄrt, RATKing izmantoja ļaunprÄtÄ«gu programmatÅ«ru, kas tiek pÄrdota specializÄtos forumos par zemu cenu vai pat ir atvÄrtÄ koda projekts.
PilnÄ«gÄks kampaÅÄ izmantotÄs ļaunprÄtÄ«gÄs programmatÅ«ras saraksts ar vienu svarÄ«gu brÄ«dinÄjumu ir sniegts raksta beigÄs.
Par grupu
MÄs nevaram attiecinÄt aprakstÄ«to ļaunprÄtÄ«go kampaÅu uz zinÄmiem uzbrucÄjiem. PagaidÄm uzskatÄm, ka Å”os uzbrukumus sarÄ«kojusi principiÄli jauna grupa. KÄ mÄs rakstÄ«jÄm sÄkumÄ, mÄs to saucÄm par RATKing.
Lai izveidotu VBS skriptu, grupa, iespÄjams, izmantoja utilÄ«tai lÄ«dzÄ«gu rÄ«ku VBS-kriptors no izstrÄdÄtÄja NYAN-x-CAT. Par to liecina Ŕīs programmas izveidotÄ skripta lÄ«dzÄ«ba ar uzbrucÄja skriptu. KonkrÄti, viÅi abi:
veikt aizkavÄtu izpildi, izmantojot funkciju Sleep;
Å emiet vÄrÄ, ka uzbrucÄji kÄ vienu no kravÄm izmantoja citu utilÄ«tu no NYAN-x-CAT - LimeRAT.
C&C serveru adreses norÄda uz vÄl vienu RATKing atŔķirÄ«gu iezÄ«mi: grupa dod priekÅ”roku dinamiskiem DNS pakalpojumiem (skatÄ«t C&C sarakstu IoC tabulÄ).
IoC
TÄlÄk esoÅ”ajÄ tabulÄ ir sniegts pilns VBS skriptu saraksts, kurus, visticamÄk, var attiecinÄt uz aprakstÄ«to kampaÅu. Visi Å”ie skripti ir lÄ«dzÄ«gi un veic aptuveni tÄdu paÅ”u darbÄ«bu secÄ«bu. Visi no tiem ievada RAT klases ļaunprÄtÄ«gu programmatÅ«ru uzticamÄ Windows procesÄ. VisÄm tÄm ir C&C adreses, kas reÄ£istrÄtas, izmantojot dinamiskos DNS pakalpojumus.
TomÄr mÄs nevaram apgalvot, ka visus Å”os skriptus izplatÄ«ja vieni un tie paÅ”i uzbrucÄji, izÅemot paraugus ar vienÄdÄm C&C adresÄm (piemÄram, kimjoy007.dyndns.org).