A finals de maig, vam descobrir una campanya per distribuir programari maliciós de troià d'accés remot (RAT), programes que permeten als atacants controlar de forma remota un sistema infectat.
El grup que vam examinar es va distingir pel fet que no va seleccionar cap família de RAT específica per a la infecció. Es van observar diversos troians en atacs dins de la campanya (tots els quals estaven àmpliament disponibles). Amb aquesta característica, el grup ens va recordar el rei de les rates, un animal mític format per rosegadors amb cues entrellaçades.
L'original està extret de la monografia de K. N. Rossikov "Ratolins i rosegadors semblants a ratolins, els més importants econòmicament" (1908)
En honor a aquesta criatura, vam batejar el grup que estem considerant RATKing. En aquesta publicació, entrarem en detall sobre com els atacants van dur a terme l'atac, quines eines van utilitzar i també compartirem les nostres reflexions sobre l'atribució d'aquesta campanya.
Progrés de l'atac
Tots els atacs d'aquesta campanya van tenir lloc segons el següent algorisme:
L'usuari va rebre un correu electrònic de pesca amb un enllaç a Google Drive.
Mitjançant l'enllaç, la víctima va descarregar un script VBS maliciós que especificava una biblioteca DLL per carregar la càrrega útil final al registre de Windows i va llançar PowerShell per executar-lo.
La biblioteca DLL va injectar la càrrega útil final, de fet, una de les RAT utilitzades pels atacants, al procés del sistema i va registrar un script VBS a l'execució automàtica per tal d'aconseguir un lloc a la màquina infectada.
La càrrega útil final es va executar en un procés del sistema i va donar a l'atacant la capacitat de controlar l'ordinador infectat.
Esquemàticament es pot representar així:
A continuació, ens centrarem en les tres primeres etapes, ja que ens interessa el mecanisme de lliurament de programari maliciós. No descriurem amb detall el mecanisme de funcionament del programari maliciós en si. Estan àmpliament disponibles, ja siguin venuts en fòrums especialitzats, o fins i tot distribuïts com a projectes de codi obert, i per tant no són exclusius del grup RATKing.
Anàlisi de les etapes d'atac
Etapa 1. Correu electrònic de pesca
L'atac va començar amb la víctima que va rebre una carta maliciosa (els atacants van utilitzar diferents plantilles amb text; la captura de pantalla següent mostra un exemple). El missatge contenia un enllaç a un repositori legítim drive.google.com, que suposadament va donar lloc a una pàgina de descàrrega de documents PDF.
Exemple de correu electrònic de pesca
Tanmateix, de fet, no es va carregar cap document PDF, sinó un script VBS.
Quan heu fet clic a l'enllaç del correu electrònic de la captura de pantalla de dalt, un fitxer anomenat Cargo Flight Details.vbs. En aquest cas, els atacants ni tan sols van intentar disfressar l'arxiu com a document legítim.
Al mateix temps, com a part d'aquesta campanya, vam descobrir un guió anomenat Cargo Trip Detail.pdf.vbs. Ja podria passar per un PDF legítim perquè Windows amaga les extensions de fitxers per defecte. És cert que en aquest cas, la sospita encara podria ser despertada per la seva icona, que corresponia a l'script VBS.
En aquesta etapa, la víctima podria reconèixer l'engany: només cal que mireu més de prop els fitxers descarregats durant un segon. Tanmateix, en aquestes campanyes de pesca, els atacants sovint confien en un usuari poc atent o precipitat.
Etapa 2. Operació de l'script VBS
L'script VBS, que l'usuari podia obrir sense voler, va registrar una biblioteca DLL al registre de Windows. L'script estava ofuscat: les línies s'escrivien com a bytes separats per un caràcter arbitrari.
Exemple d'un guió ofuscat
L'algoritme de desofuscació és bastant simple: es va excloure cada tercer caràcter de la cadena ofuscada, després de la qual cosa el resultat es va descodificar de base16 a la cadena original. Per exemple, des del valor 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (ressaltat a la captura de pantalla anterior) la línia resultant era WScript.Shell.
Per desofuscar les cadenes, hem utilitzat la funció Python:
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
A continuació, a les línies 9-10, destaquem el valor la desofuscació del qual va donar lloc a un fitxer DLL. Va ser ell qui es va llançar a la següent etapa mitjançant PowerShell.
Cadena amb DLL ofuscada
Cada funció de l'script VBS es va executar a mesura que es desofuscaven les cadenes.
Després d'executar l'script, es va cridar la funció wscript.sleep — s'utilitzava per realitzar l'execució ajornada.
A continuació, l'script va funcionar amb el registre de Windows. Va utilitzar la tecnologia WMI per a això. Amb la seva ajuda, es va crear una clau única i el cos del fitxer executable es va escriure al seu paràmetre. Es va accedir al registre mitjançant WMI mitjançant l'ordre següent:
En la tercera etapa, la DLL maliciosa va carregar la càrrega útil final, la va injectar al procés del sistema i es va assegurar que l'script VBS s'iniciés automàticament quan l'usuari iniciés sessió.
Executeu mitjançant PowerShell
La DLL es va executar mitjançant l'ordre següent a PowerShell:
dades de valor de registre rebudes amb el nom rnd_value_name — aquestes dades eren un fitxer DLL escrit a la plataforma .Net;
va carregar el mòdul .Net resultant a la memòria del procés powershell.exe utilitzant la funció [System.Threading.Thread]::GetDomain().Load()(descripció detallada de la funció Load(). disponible al lloc web de Microsoft);
realitzat la funció GUyyvmzVhebFCw]::EhwwK() - L'execució de la biblioteca DLL va començar amb ella - amb paràmetres vbsScriptPath, xorKey, vbsScriptName... Paràmetre xorKey va emmagatzemar la clau per desxifrar la càrrega útil final i els paràmetres vbsScriptPath и vbsScriptName es van transferir per registrar un script VBS a l'execució automàtica.
Descripció de la biblioteca DLL
En forma descompilada, el carregador d'arrencada tenia aquest aspecte:
Carregador en forma descompilada (la funció amb la qual va començar l'execució de la biblioteca DLL està subratllada en vermell)
El carregador d'arrencada està protegit pel protector .Net Reactor. La utilitat de4dot fa un treball excel·lent per eliminar aquest protector.
Aquest carregador:
va injectar la càrrega útil al procés del sistema (en aquest exemple it svchost.exe);
He afegit un script VBS a l'execució automàtica.
Injecció de càrrega útil
Vegem la funció que va cridar l'script de PowerShell.
Funció cridada per l'script de PowerShell
Aquesta funció realitzava les accions següents:
desxifrat dos conjunts de dades (array и array2 a la captura de pantalla). Originalment es van comprimir amb gzip i es van xifrar amb l'algorisme XOR amb la clau xorKey;
dades copiades a les àrees de memòria assignades. Dades de array - a l'àrea de memòria apuntada intPtr (payload pointer a la captura de pantalla); dades de array2 - a l'àrea de memòria apuntada intPtr2 (shellcode pointer a la captura de pantalla);
anomenada funció CallWindowProcA(описание Aquesta funció està disponible al lloc web de Microsoft) amb els paràmetres següents (els noms dels paràmetres es mostren a continuació, a la captura de pantalla estan en el mateix ordre, però amb valors de treball):
lpPrevWndFunc - punter a dades de array2;
hWnd — punter a una cadena que conté la ruta al fitxer executable svchost.exe;
Msg - punter a dades de array;
wParam, lParam — paràmetres del missatge (en aquest cas, aquests paràmetres no es van utilitzar i tenien valors de 0);
va crear un fitxer %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlOn <name> - aquests són els 4 primers caràcters del paràmetre vbsScriptName (a la captura de pantalla, el fragment de codi amb aquesta acció comença amb l'ordre File.Copy). D'aquesta manera, el programari maliciós va afegir un fitxer URL a la llista de fitxers d'execució automàtica quan l'usuari va iniciar sessió i, per tant, es va connectar a l'ordinador infectat. El fitxer URL contenia un enllaç a l'script:
Per entendre com es va dur a terme la injecció, vam desxifrar les matrius de dades array и array2. Per fer-ho hem utilitzat la següent funció de Python:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
Com a resultat, vam descobrir que:
array era un fitxer PE: aquesta és la càrrega útil final;
array2 era l'shellcode requerit per dur a terme la injecció.
Shellcode d'una matriu array2 passat com a valor de funció lpPrevWndFunc en una funció CallWindowProcA. lpPrevWndFunc — funció de devolució de trucada, el seu prototip té aquest aspecte:
Així, quan executeu la funció CallWindowProcA amb paràmetres hWnd, Msg, wParam, lParam s'executa el codi shell de la matriu array2 amb arguments hWnd и Msg. hWnd és un punter a una cadena que conté la ruta al fitxer executable svchost.exeI Msg — punter a la càrrega útil final.
L'shellcode va rebre adreces de funció de kernel32.dll и ntdll32.dll basant-se en els valors hash dels seus noms i injectant la càrrega útil final a la memòria del procés svchost.exeutilitzant la tècnica de buit de procés (podeu llegir-ne més informació en aquest article article). Quan injecteu el codi shell:
creat un procés svchost.exe en estat suspès mitjançant la funció CreateProcessW;
després va amagar la visualització de la secció a l'espai d'adreces del procés svchost.exe utilitzant la funció NtUnmapViewOfSection. Així, el programa va alliberar la memòria del procés original svchost.exeper després assignar memòria per a la càrrega útil en aquesta adreça;
memòria assignada per a la càrrega útil a l'espai d'adreces del procés svchost.exe utilitzant la funció VirtualAllocEx;
Inici del procés d'injecció
va escriure el contingut de la càrrega útil a l'espai d'adreces del procés svchost.exe utilitzant la funció WriteProcessMemory (com a la captura de pantalla següent);
va reprendre el procés svchost.exe utilitzant la funció ResumeThread.
Finalització del procés d'injecció
Programari maliciós descarregable
Com a resultat de les accions descrites, es va instal·lar un dels diversos programes maliciosos de classe RAT al sistema infectat. La taula següent enumera el programari maliciós utilitzat en l'atac, que podem atribuir amb confiança a un grup d'atacants, ja que les mostres van accedir al mateix servidor d'ordres i control.
Exemples de programari maliciós distribuït amb el mateix servidor de control
Aquí cal destacar dues coses.
En primer lloc, el fet mateix que els atacants van utilitzar diverses famílies de RAT diferents alhora. Aquest comportament no és típic dels cibergrups coneguts, que sovint utilitzen aproximadament el mateix conjunt d'eines que els coneixen.
En segon lloc, RATKing va utilitzar programari maliciós que es ven en fòrums especialitzats per un preu baix, o fins i tot és un projecte de codi obert.
Al final de l'article s'ofereix una llista més completa de programari maliciós utilitzat a la campanya, amb una advertència important.
Sobre el grup
No podem atribuir la campanya maliciosa descrita a cap atacant conegut. De moment, creiem que aquests atacs van ser duts a terme per un grup fonamentalment nou. Com vam escriure al principi, l'hem anomenat RATKing.
Per crear l'script VBS, el grup probablement va utilitzar una eina similar a la utilitat VBS-Crypter del desenvolupador NYAN-x-CAT. Això s'indica per la similitud de l'script que aquest programa crea amb l'script dels atacants. Concretament, tots dos:
realitzar una execució retardada mitjançant la funció Sleep;
utilitzar WMI;
registrar el cos del fitxer executable com a paràmetre de clau de registre;
executeu aquest fitxer amb PowerShell al seu propi espai d'adreces.
Per a més claredat, compareu l'ordre de PowerShell per executar un fitxer del registre, que s'utilitza per un script creat amb VBS-Crypter:
Tingueu en compte que els atacants van utilitzar una altra utilitat de NYAN-x-CAT com una de les càrregues útils: LimeRAT.
Les adreces dels servidors C&C indiquen una altra característica distintiva de RATKing: el grup prefereix serveis DNS dinàmics (vegeu la llista de C&C a la taula IoC).
IoC
La taula següent proporciona una llista completa dels scripts VBS que probablement es poden atribuir a la campanya descrita. Tots aquests scripts són similars i realitzen aproximadament la mateixa seqüència d'accions. Tots ells injecten programari maliciós de classe RAT en un procés de Windows de confiança. Tots ells tenen adreces C&C registrades mitjançant serveis de DNS dinàmic.
Tanmateix, no podem afirmar que tots aquests scripts fossin distribuïts pels mateixos atacants, a excepció de les mostres amb les mateixes adreces C&C (per exemple, kimjoy007.dyndns.org).