Cuando comenzaron los ataques entre Rusia y Ucrania, los investigadores de ESET descubrieron varias familias de malware dirigidas a organizaciones ucranianas.

  • El 23 de febrero de 2022, una campaña con fines destructivos utilizó HermeticWiper y apunto contra varias organizaciones ucranianas.
  • Este ciberataque fue unas horas después del inicio de la invasión a Ucrania por parte de las fuerzas de la Federación Rusa
  • Los vectores de acceso inicial utilizados fueron diferentes de una organización a otra. Confirmamos un caso en el que el wiper fue droppeado mediante GPO y que ocultaba un worm utilizado para propagar el wiper en otra red comprometida.
  • Elementos en el malware sugieren que los ataques habían sido planeados durante varios meses.
  • El 24 de febrero de 2022, comenzó un segundo ataque con intenciones destructivas contra una red gubernamental ucraniana, utilizando un wiper al que hemos llamado IsaacWiper.
  • ESET Research aún no ha podido atribuir estos ataques a un actor de amenazas conocido.

Ciberataques destructivos en Ucrania

Como reveló el equipo de ESET Research en este tweet y también en este artículo publicado en WeLiveSecurity, descubrimos un ataque con intenciones destructivas dirigido a computadoras en Ucrania que comenzó el 23 de febrero de 2022 alrededor de las 14:52 UTC. Esto ocurrió después de los ataques distribuidos de denegación de servicio (DDoS) contra algunos de los principales sitios web ucranianos y pocas horas después de la invasión militar rusa.

Estos ataques con objetivos destructivos utilizaron al menos tres componentes:

  • HermeticWiper: hace que un sistema quede inoperativo al corromper sus datos
  • HermeticWizard: distribuye HermeticWiper a través de una red local vía WMI y SMB
  • HermeticRansom: ransomware escrito en Go

HermeticWiper fue detectado en cientos de sistemas y en al menos cinco organizaciones ucranianas.

El 24 de febrero de 2022 detectamos otro nuevo malware del tipo wiper en una red gubernamental ucraniana. Lo llamamos IsaacWiper y actualmente estamos evaluando sus vínculos, si es que los hay, con HermeticWiper. Es importante señalar que IsaacWiper se detectó en una organización que no había sido afectada por HermeticWiper.

Atribución

Hasta el momento no hemos identificado ninguna conexión tangible con un actor de amenazas conocido. HermeticWiper, HermeticWizard y HermeticRansom no comparten ninguna similitud de código significativa con otras muestras que componen la colección de malware de ESET. Por su parte, IsaacWiper tampoco ha sido atribuido.

Cronología

HermeticWiper y HermeticWizard fueron firmados mediante un certificado de firma de código (que se muestra en la Figura 1) asignado a Hermetica Digital Ltd emitido el 13 de abril de 2021. Solicitamos a la autoridad certificadora ​​(DigiCert) que revocara el certificado, lo cual hizo el 24 de febrero de 2022.

Figura 1. Certificado de firma de código asignado a Hermetic Digital Ltd

Según un informe de Reuters, parece que este certificado no fue robado de Hermetica Digital, sino que probablemente los atacantes se hicieran pasar por la empresa chipriota para obtener este certificado de DigiCert.

Los investigadores de ESET aseguran con mucha confianza que las organizaciones afectadas fueron comprometidas mucho antes de que se distribuyeran estos wiper. Esto se basa en varios hechos:

  • Según las marcas de tiempo de compilación del PE de HermeticWiper la más antigua es del 28 de diciembre de 2021
  • La fecha de emisión del certificado de firma de código es del 13 de abril de 2021
  • La distribución de HermeticWiper a través de GPO en al menos una de las instancias sugiere que los atacantes tenían acceso previo a uno de los servidores de Active Directory de esa víctima.

Un resumen de cómo fueron los hechos puede observarse en la Figura 2.

Figura 2. Cronología de los eventos más importantes

Acceso inicial

HermeticWiper

Actualmente se desconoce el vector de acceso inicial, pero hemos observado artefactos para realizar el movimiento lateral una vez dentro de las organizaciones atacadas. En una entidad, por ejemplo, el wiper se desplegó a través de la política de dominio predeterminada (GPO, por sus siglas en inglés), como se muestra en su ruta en el sistema:

C:\Windows\system32\GroupPolicy\DataStore\0\sysvol\<redacted>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\cc.exe

Esto indica que probablemente los atacantes tomaron el control del servidor de Active Directory.

En otros casos, es posible que HermeticWiper haya sido desplegado utilizando Impacket. Una publicación en el blog de Symantec apunta que el wiper se desplegó utilizando la siguiente línea de comando:

cmd.exe /Q /c move CSIDL_SYSTEM_DRIVE\temp\sys.tmp1 CSIDL_WINDOWS\policydefinitions\postgresql.exe 1> \\127.0.0.1\ADMIN$\__1636727589.6007507 2>&1

La última parte es la misma que el comportamiento predeterminado en wmiexec.py de Impacket. Ver en GitHub.

Finalmente, se utilizó un worm personalizado, al que hemos denominado HermeticWizard, para propagar HermeticWiper a lo largo de las redes comprometidas a través de SMB y WMI.

IsaacWiper

El vector de acceso inicial también se desconoce actualmente. Es probable que los atacantes hayan utilizado herramientas como Impacket para moverse lateralmente. En algunas máquinas también hemos observado una herramienta de acceso remoto llamada RemCom, la cual se distribuyó al mismo tiempo que IsaacWiper.

Análisis técnico

HermeticWiper

HermeticWiper es un ejecutable de Windows con cuatro controladores embebidos en sus recursos. Son controladores legítimos del software EaseUS Partition Master firmado por CHENGDU YIWO Tech Development Co. e implementan operaciones de bajo nivel en el disco. Se observaron los siguientes archivos:

  • 0E84AFF18D42FC691CB1104018F44403C325AD21: x64 driver
  • 379FF9236F0F72963920232F4A0782911A6BD7F7: x86 driver
  • 87BD9404A68035F8D70804A5159A37D1EB0A3568: x64 XP driver
  • B33DD3EE12F9E6C150C964EA21147BF6B7F7AFA9: x86 XP driver

Según la versión del sistema operativo se elige uno de esos cuatro controladores y se droppea en C:\Windows\System32\drivers\<4 random letters>.sys. Luego se carga creando un servicio.

Luego, HermeticWiper continúa por deshabilitar el servicio de Volume Shadow Copy (VSS) y se borra del disco a sí mismo sobrescribiendo su propio archivo con bytes aleatorios. Esta medida antiforense probablemente sea con la intención de evitar el análisis del wiper posterior al incidente.

Es interesante notar que la mayoría de las operaciones con archivos se realizan a bajo nivel mediante llamadas a DeviceIoControl.

Las siguientes ubicaciones son sobrescritas con bytes aleatorios generados por la función de la API de Windows CryptGenRandom:

  • El master boot record (MBR)
  • La tabla maestra de archivos (MFT)
  • $Bitmap y $LogFile en todas las unidades
  • Los archivos que contienen las claves de registro (NTUSER*)
  • C:\Windows\System32\winevt\Logs

Adicionalmente, también borra recursivamente carpetas y archivos en Windows, Program Files, Program Files(x86), PerfLogs, Boot, System Volume Information y carpetas AppData usando una operación FSCTL_MOVE_FILE. Esta técnica parece ser bastante inusual y muy similar a lo que se implementa en el proyecto Windows Wipe en GitHub (ver la función wipe_extent_by_defrag). También borra links simbólicos y archivos grandes en las carpetas My Documents y Desktop sobrescribiéndolos con bytes aleatorios.

Finalmente, la máquina es reiniciada. Sin embargo, no podrá arrancar porque el master boot record, la tabla maestra de archivos y la mayoría de los archivos fueron borrados. Creemos que no es posible recuperar las máquinas afectadas.

HermeticWizard

Buscando otras muestras firmadas por el mismo certificado de firma de código (Hermetica Digital Ltd), encontramos una nueva familia de malware que llamamos HermeticWizard.

Se trata de un gusano que fue desplegado en un sistema en Ucrania a las 14:52:49 del 23 de febrero de 2022 UTC. Es un archivo DLL desarrollado en C++ que exporta las funciones DllInstall, DllRegisterServer, y DllUnregisterServer. Su nombre es Wizard.dll. Contiene tres recursos, los cuales son archivos PE cifrados:

  • Una muestra de HermeticWiper (912342F1C840A42F6B74132F8A7C4FFE7D40FB77)
  • exec_32.dll, responsable de propagar la amenaza a otras computadoras locales a través de WMI (6B5958BFABFE7C731193ADB96880B225C8505B73)
  • romance.dll, responsable de propagar el wiper a otras computadoras locales a través de SMB (AC5B6F16FC5115F0E2327A589246BA00B41439C2)

Los recursos están cifrados mediante un loop XOR inverso. Cada bloque de cuatro bytes es XOReado con el bloque anterior. Finalmente, el primer bloque es XOReado con un valor hardcodeado: 0x4A29B1A3.

HermeticWizard se inicia usando la línea de comando regsvr32.exe /s /i <path>.

Primero, HermeticWizard intenta encontrar otras máquinas en la red local. Recopila direcciones IP locales conocidas utilizando las siguientes funciones de Windows:

  • DNSGetCacheDataTable
  • GetIpNetTable
  • WNetOpenEnumW(RESOURCE_GLOBALNET, RESOURCETYPE_ANY)
  • NetServerEnum
  • GetTcpTable
  • GetAdaptersAddresses

Luego intenta conectarse a esas direcciones IP (y solo si son direcciones IP locales) para ver si aún están accesibles. En caso de que se haya proporcionado el argumento -s cuando se inicia HermeticWizard (regsvr32.exe /s /i:-s <path>), también analiza el rango completo /24. Por lo tanto, si se encuentra 192.168.1.5, por ejemplo, en la caché de DNS, escanea de forma incremental desde 192.168.1.1 hasta 192.168.1.254. Para cada dirección IP intenta abrir una conexión TCP en los siguientes puertos:

  • 20: ftp
  • 21: ftp
  • 22: ssh
  • 80: http
  • 135: rpc
  • 137: netbios
  • 139: smb
  • 443: https
  • 445: smb

Los puertos son escaneados en un orden aleatorio, por lo que no es posible identificar el tráfico de HermeticWizard de esa manera.

Cuando ha encontrado una máquina accesible, droppea el componente WMI spreader (detallado a continuación) en el disco y crea un nuevo proceso con la línea de comando rundll32 <current folder>\<6 random letters>.ocx #1 -s <path to HermeticWizard> - i <target IP>.

Hace lo mismo con el componente SMB spreader (detallado a continuación) que también es droppeado en <current folder>\<6 random letters>.ocx, pero con diferentes letras aleatorias.

Finalmente, dropea HermeticWiper en <current folder>\<6 random letters>.ocx y lo ejecuta.

Componente WMI spreader

El componene WMI spreader, nombrado por sus desarrolladores exec_32.dll, toma dos argumentos:

  • -i: la dirección IP de la víctima
  • -i: el archivo para copiar y ejecutar en la máquina víctima

En primer lugar, crea una conexión con el recurso compartido remoto ADMIN$ de la víctima mediante WNetAddConnection2W. El archivo proporcionado en el argumento -s luego se copia usando CopyFileW. El archivo remoto tiene un nombre aleatorio generado con CoCreateGUID (por ejemplo, cB9F06408D8D2.dll) y un formato de string c%02X%02X%02X%02X%02X%02X.

En segundo lugar, intenta ejecutar el archivo copiado, HermeticWizard, en la máquina remota utilizando DCOM. Llama a CoCreateInstance con CLSID_WbemLocator como argumento. Luego usa WMI Win32_Process para crear un nuevo proceso en la máquina remota, con la línea de comando  C:\windows\system32\cmd.exe /c start C:\windows\system32\\regsvr32.exe /s /i C:\windows\<filename>.dll.

Nótese que el argumento -s no se pasa a HermeticWizard, lo que significa que no volverá a escanear la red local desde esta máquina recientemente comprometida.

Si la técnica de WMI falla, intenta crear un servicio utilizando OpenRemoteServiceManager con el mismo comando que antes.

Si tiene éxito en la ejecución de la DLL remota de alguna manera, queda a la espera hasta poder eliminar el archivo remoto.

Componente SMB spreader

El spreader SMB, llamado por sus desarrolladores romance.dll, toma los mismos dos argumentos que WMI spreader. Es probable que su nombre interno sea una referencia al exploit EternalRomance, incluso si no utiliza ningún exploit.

Primero intenta conectarse a las siguientes canalizaciones en el recurso compartido SMB remoto (en el puerto 445):

  • samr
  • browser
  • netlogon
  • lsarpc
  • ntsvcs
  • svcctl

Estas son las canalizaciones que se sabe que se utilizan en el movimiento lateral. El componente spreader tiene una lista de credenciales harcodeadas que son utilizadas para intentar autenticarse a través de NTLMSSP en los recursos compartidos de SMB:

-- usernames --
guest
test
admin
user
root
administrator
manager
operator

-- passwords --
123
Qaz123
Qwerty123

Esta lista de credenciales es sorprendentemente corta y es poco probable que funcione, incluso en las redes menos protegidas.

Si la conexión es exitosa, intenta droppear el archivo al que hace referencia el argumento -s en el recurso compartido ADMIN$ de la víctima. En cuanto al componente WMI spreader, el nombre de archivo remoto se genera mediante una llamada a CoCreateInstance.

Luego ejecuta, a través de SMB, la línea de comando cmd /c start regsvr32 /s /i ..\\<filename>  & start cmd /c \"ping localhost -n 7 & wevtutil cl System\".

HermeticRansom

Los investigadores de ESET también detectaron el uso de HermeticRansom, un ransomware escrito en Go, en ataques a Ucrania al mismo tiempo que corría la campaña de HermeticWiper. HermeticRansom fue reportado por primera vez durante las primeras horas del 24 de febrero de 2022 UTC, a través de un tweet de AVAST. Nuestra telemetría muestra una distribución de HermeticRansom mucho más pequeña en comparación con HermeticWiper. Este ransomware se distribuyó al mismo tiempo que HermeticWiper, posiblemente para ocultar las acciones del wiper. En una de las máquinas se observó lo siguiente:

  • 2022-02-23 17:49:55 UTC: se desplegó HermeticWiper en C:\Windows\Temp\cc.exe
  • 2022-02-23 18:06:57 UTC: Se desplegó HermeticRansom en C:\Windows\Temp\cc2.exe mediante el servicio netsvcs
  • 2022-02-23 18:26:07 UTC: Se desplegó el segundo HermeticWiper en C:\Users\com.exe

En una ocasión, observamos la distribución de HermeticRansom a través de GPO, al igual que con HermeticWiper:

C:\WINDOWS\system32\GroupPolicy\DataStore\0\sysvol\<redacted>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\cpin.exe

Los atacantes dejaron algunas strings en el binario; las mismas hacen referencia al presidente estadounidense Biden y a la Casa Blanca:

  • _/C_/projects/403forBiden/wHiteHousE.baggageGatherings
  • _/C_/projects/403forBiden/wHiteHousE.lookUp
  • _/C_/projects/403forBiden/wHiteHousE.primaryElectionProcess
  • _/C_/projects/403forBiden/wHiteHousE.GoodOffice1

Una vez que los archivos están cifrados, se despliega a la víctima el mensaje que se observa en la Figura 3.

Figura 3. Nota de rescate de HermeticRansom

IsaacWiper

IsaacWiper se encuentra en un archivo DLL o EXE de Windows sin firma Authenticode; apareció en nuestra telemetría el 24 de febrero de 2022. Como se mencionó anteriormente, la marca de tiempo de compilación del PE más antigua que encontramos es del 19 de octubre de 2021, lo que significa que, si no se manipuló la marca de tiempo de compilación del PE, es posible que IsaacWiper haya sido utilizado meses atrás en anteriores operaciones.

En el caso de las muestras de DLL, el nombre en el directorio de exportación del PE es Cleaner.dll y tiene el exportador _Start@4.

Hemos observado a IsaacWiper en %programdata% y en C:\Windows\System32 utilizando los siguientes nombres de archivo:

  • clean.exe
  • cl.exe
  • cl64.dll
  • cld.dll
  • cll.dll

No tiene similitud de código con HermeticWiper y es mucho menos sofisticado. Dada la cronología de los acontecimientos, es posible que ambos estén relacionados, pero aún no hemos encontrado ninguna conexión sólida que nos permita afirmarlo.

IsaacWiper comienza enumerando las unidades físicas y llama a DeviceIoControl con el IOCTL IOCTL_STORAGE_GET_DEVICE_NUMBER para obtener sus números de dispositivo. Luego borra los primeros 0x10000 bytes de cada disco utilizando el generador pseudoaleatorio ISAAC. El generador es inicializado utilizando el valor GetTickCount.

Luego enumera las unidades lógicas y borra recursivamente todos los archivos de cada disco con bytes aleatorios también generados por ISAAC PRNG. Es interesante notar que borra recursivamente los archivos en un solo hilo, lo que significa que tardaría mucho tiempo en borrar un disco grande.

El 25 de febrero de 2022, los atacantes utilizaron una nueva versión de IsaacWiper con depuración de logs. Esto puede indicar que los atacantes no pudieron llevar a cabo el borrado en algunas de las máquinas apuntadas previamente y agregaron mensajes de log para comprender lo que estaba sucediendo. Los logs están almacenados en C:\ProgramData\log.txt y algunos de los mensajes de log son:

  • getting drives...
  • start erasing physical drives...
  • –– start erasing logical drive
  • start erasing system physical drive...
  • system physical drive –– FAILED
  • start erasing system logical drive

Conclusión

Este informe detalla lo que fue un ciberataque con fines destructivos que afectó a organizaciones ucranianas el 23 de febrero de 2022 y un segundo ataque que afectó a una organización ucraniana diferente y que ocurrió del 24 al 26 de febrero de 2022. En este momento, no tenemos indicios de que otros países hayan sido atacados.

Sin embargo, debido a la crisis actual en Ucrania, todavía existe el riesgo de que los mismos actores de amenazas lancen nuevas campañas contra países que respaldan al gobierno ucraniano o que sancionan a entidades rusas.

IoCs

SHA-1 Filename ESET detection name Description
912342F1C840A42F6B74132F8A7C4FFE7D40FB77 com.exe Win32/KillDisk.NCV HermeticWiper
61B25D11392172E587D8DA3045812A66C3385451 conhosts.exe Win32/KillDisk.NCV HermeticWiper
3C54C9A49A8DDCA02189FE15FEA52FE24F41A86F c9EEAF78C9A12.dat Win32/GenCBL.BSP HermeticWizard
F32D791EC9E6385A91B45942C230F52AFF1626DF cc2.exe WinGo/Filecoder.BK HermeticRansom
AD602039C6F0237D4A997D5640E92CE5E2B3BBA3 cl64.dll Win32/KillMBR.NHP IsaacWiper
736A4CFAD1ED83A6A0B75B0474D5E01A3A36F950 cld.dll Win32/KillMBR.NHQ IsaacWiper
E9B96E9B86FAD28D950CA428879168E0894D854F clean.exe Win32/KillMBR.NHP IsaacWiper
23873BF2670CF64C2440058130548D4E4DA412DD XqoYMlBX.exe Win32/RiskWare.RemoteAdmin.RemoteExec.AC Legitimate RemCom remote access tool

Técnicas de MITRE ATT&CK 

Esta tabla fue creada utilizando la versión 10 del framework de MITRE ATT&CK

Tactic ID Name Description
Resource Development T1588.002 Obtain Capabilities: Tool Attackers used RemCom and potentially Impacket as part of their campaign.
T1588.003 Obtain Capabilities: Code Signing Certificates Attackers acquired a code-signing certificate for their campaigns.
Initial Access T1078.002 Valid Accounts: Domain Accounts Attackers were able to deploy wiper malware through GPO.  
Execution T1059.003 Command and Scripting Interpreter: Windows Command Shell Attackers used the command line during their attack (e.g., possible Impacket usage).
T1106 Native API Attackers used native APIs in their malware.
T1569.002 System Services: Service Execution HermeticWiper uses a driver, loaded as a service, to corrupt data.
T1047 Windows Management Instrumentation HermeticWizard attempts to spread to local computers using WMI.
Discovery T1018 Remote System Discovery HermeticWizard scans local IP ranges to find local machines.
Lateral Movement T1021.002 Remote Services: SMB/Windows Admin Shares HermeticWizard attempts to spread to local computers using SMB.
T1021.003 Remote Services: Distributed Component Object Model HermeticWizard attempts to spread to local computers using WbemLocator to remotely start a new process via WMI.
Impact T1561.002 Disk Wipe: Disk Structure Wipe HermeticWiper corrupts data in the system’s MBR and MFT.
T1561.001 Disk Wipe: Disk Content Wipe HermeticWiper corrupts files in Windows, Program Files, Program Files(x86), PerfLogs, Boot, System Volume Information, and AppData.
T1485 Data Destruction HermeticWiper corrupts user data found on the system.  
T1499.002 Endpoint Denial of Service: Service Exhaustion Flood By using DDoS attacks, the attackers made a number of government websites unvailable.