Malware identificado en ataques que explotan las vulnerabilidades seguras de Ivanti Connect – ojos JPCERT/CC

Summarize this content to 600 words
JPCERT/CC Eyes introdujo previamente el malware Spawnchimer y Dslogdratque se implementaron explotando vulnerabilidades en Ivanti Connect Secure. En JPCERT/CC, hemos seguido observando la explotación activa de estas vulnerabilidades. En este informe, explicamos las siguientes tácticas de malware, herramientas y penetración utilizadas por los atacantes Apalancamiento CVE-2025-0282 y CVE-2025-22457 En los ataques observados desde diciembre de 2024 hasta el presente, julio de 2025.

MdifyLoader y Cobalt Strike Beacon
vshell
FSCA

MdifyLoader y Cobalt Strike Beacon

La Figura 1 ilustra el flujo de ejecución del golpe de cobalto. Comienza con la activación de un archivo legítimo, activado por una tarea preconfigurada. Esto ejecuta un cargador (en adelante como mdifyloader) a través de la carga lateral de DLL. MdifyLoader luego carga un archivo de datos cifrado, decoda Cobalt Strike Beacon y lo ejecuta en la memoria.

Figura 1: Flujo de ejecución del golpe de cobalto a través de MdifyLoader

MdifyLoader es un cargador creado basado en el proyecto de código abierto libpeconv (1). Utiliza RC4 para descifrar archivos de datos, y su clave se deriva del valor hash MD5 de los archivos ejecutables. Como este método requiere tres elementos, el archivo ejecutable, el cargador y el archivo de datos, para la ejecución, es probable que los atacantes tenían la intención de obstruir el análisis utilizando este método. Además, se confirma que archivos legítimos como el compilador Java RMI rmic.exe y push_detect.exe había sido utilizado.

Como se muestra en la Figura 2, se insertaron varios código de basura en cada función de MdifyLoader. Este código de basura consiste en llamadas de función sin sentido y referencias variables. Debido a que el código de basura incluye valores de dirección relativa y consulte los valores de retorno de funciones, la identificación automatizada es difícil. Esto sugiere que los atacantes tenían la intención de obstaculizar las desobfuscaciones.

Figura 2: Ofuscación en MdifyLoader

Por lo general, Cobalt Strike Beacon contiene datos de configuración integrados dentro de la muestra, que se decodifica utilizando una clave XOR de un byte cuando se ejecuta. Sin embargo, los atacantes en este caso emplearon RC4 para el descifrado de datos de configuración. La tecla RC4 estaba codificada como «Google» Dentro de la baliza. La Figura 3 muestra el código RC4 adicional. Basado en el número de elementos de configuración, esta baliza se ha identificado como Versión 4.5 de huelga de cobalto. Además, el campo de nombre del faro dice «NewBeacon.dll»probablemente indicando un nombre personalizado asignado por los atacantes.

Figura 3: Función RC4 agregada a Cobalt Strike Beacon

Usando Vshell

VShell es una rata multiplataforma escrita en el lenguaje GO y previamente publicada en GitHub (el repositorio ya no está disponible públicamente en el momento de esta publicación). Se han observado atacantes utilizando la versión Vshell ejecutable de Windows Versión 4.6.0. El Vshell usado tiene una función para verificar si el lenguaje del sistema está configurado en chino. Una parte del código se muestra en la Figura 4. Los atacantes no pudieron ejecutar Vshell, y se confirmó que cada vez que habían instalado una nueva versión e intentaron ejecución nuevamente. Este comportamiento sugiere que la función de verificación del lenguaje, probablemente destinada a las pruebas internas, se dejó habilitado durante el despliegue.

Figura 4: La parte del código VSHELL utilizado para verificar si el lenguaje del sistema está configurado en chino

FSCA

FSCA (2) es una herramienta de escaneo de red de código abierto escrita en el idioma GO. Los atacantes lo ejecutan a través de un cargador. El flujo de ejecución se muestra en la Figura 5. Un python legítimo se usa para ejecutar FSCAN. Un Python311.dll malicioso se carga a través de la carga lateral de DLL, que carga un FSCAN codificado K.Bin y lo ejecuta en la memoria después de decodificar. El python311.dll se desarrolló en base a la herramienta de código abierto FileNcleRemotepe (3). Para decodificar el cuerpo principal de FSCAN, utiliza RC4 con una clave codificada «99999999».

Figura 5: El flujo de ejecución de FSCAN

Comportamiento de los atacantes después del acceso inicial a la red interna

Esta sección explica los métodos de los atacantes para el movimiento lateral, el establecimiento de la persistencia y la detección de evasión, después de que penetraron en la red interna de la organización objetivo.

Movimiento lateral

Después de obtener acceso a la red interna, los atacantes intentaron obtener credenciales realizando ataques de fuerza bruta contra los servidores publicitarios. También realizaron escaneos de red en sistemas internos y realizaron ataques de fuerza bruta en servidores FTP, MSSQL y SSH. Además, explotaron la vulnerabilidad de SMB MS17-010 para comprometer los hosts no parpadeados. Utilizando credenciales obtenidas a través de estas actividades, los atacantes se trasladaron lateralmente a otros sistemas a través de RDP y SMB, implementando malware en la red.

Persistencia

Los atacantes crearon nuevas cuentas de dominio y las agregaron a los grupos existentes, lo que les permitió retener el acceso incluso si se revocaron las credenciales previamente adquiridas. Estas cuentas se mezclan con operaciones normales, lo que permite el acceso a largo plazo a la red interna. Además, los atacantes registraron su malware como un servicio o un programador de tareas para mantener la persistencia, asegurando que se ejecutaría al inicio del sistema o en desencadenantes de eventos específicos.

Evasión de defensa

Se considera que el malware utilizado en el entorno de Windows se ejecuta a través de un cargador utilizando un archivo legítimo, que probablemente tenga la intención de evadir la detección y el monitoreo de los productos de seguridad. El cargador para FSCAN, que se crea basado en FilelessRemotepe, incluye un bypass ETW para ntdll.dll, una característica que deriva de FilelessRemotepe. Esto sugiere que los atacantes tenían la intención de evitar EDR y otros mecanismos de detecciones.

Para terminar

Estos ataques han persistido desde diciembre de 2024 y se espera que permanezcan activos, particularmente aquellos dirigidos a dispositivos VPN como Ivanti Connect Secure. Para obtener más detalles, incluidos los valores hash de malware, C2 y la información de Cobalt Strike y Vshell Config, consulte los apéndices.

Yaima, Kothoma, Total, Toye, Toksa.

Información de referencia

(1) libpeconv
https://github.com/hasherezade/libpeconv

(2) FSCA
https://github.com/shadow1ng/fscan

(3) Filelessremotepe
https://github.com/askyeye/filelessremotepe

Apéndice A: Mitre ATT & CK

Tabla 1: Mapeo ATT y CK de las actividades de ataque

Táctica
ID de técnica
Nombre de la técnica
Contenido

Acceso inicial
T1133
Servicios remotos externos
Explotar una vulnerabilidad en el dispositivo VPN para obtener acceso

Ejecución
T1053.005
Tarea/trabajo programado: Tarea programada
Ejecutar malware a través de una tarea programada

T1136.002
Crear cuenta: cuenta de dominio
Crear una nueva cuenta de dominio para la persistencia

T1098
Manipulación de la cuenta
Agregue las cuentas creadas a cada grupo para garantizar un acceso continuo

T1543.003
Crear o modificar el proceso del sistema: Servicio de Windows
Registre el malware como un servicio de Windows para habilitar la ejecución automática

T1053.005
Tarea programada
Use el programador de tareas para volver a ejecutar el malware periódicamente o con condiciones de activación específicas

Escalada de privilegios
T1543.003
Crear o modificar el proceso del sistema: Servicio de Windows
Registre el malware como un servicio de Windows para habilitar la ejecución automática

Evasión de defensa
T1036
Disfrazado
Disfrazar el malware como un archivo o nombre legítimo para ocultar anomalía

T1070.004
Eliminación de archivos
Eliminar malware y herramientas usados para cubrir rastros del ataque

T1140
DEOBFUscate/decodificar archivos o información
Utilice técnicas de ofuscación y descifrado en cada cargador

T1562.001
Defensas de deterioro: deshabilitar o modificar herramientas
Use el cargador FSCAN para parchear ntdll.dll para deshabilitar ETW

Acceso a la credencial
T1110.001
Adivinación de contraseña
Realice un ataque de fuerza bruta contra servidores publicitarios, FTP, MSSQL y SSH para obtener credenciales

Descubrimiento
T1087
Descubrimiento de cuenta
Recopilar información de la cuenta

Movimiento lateral
T1210
Explotación para el movimiento lateral
Explotar la vulnerabilidad de SMB MS17-010 para moverse lateralmente a otros hosts

T1021.001
Servicios remotos: protocolo de escritorio remoto
Use las credenciales obtenidas para moverse lateralmente a través de RDP

T1021.002
Servicios remotos: SMB/Windows Admin Shares
Expandir el compromiso a través de SMB Share

Comando y control
T1573
Canal encriptado
Encrypt C2 Communications utilizando TLS o protocolos de cifrado personalizados

Apéndice B: malware

Tabla 2: malware

Malware
Nombre del archivo
Sha256 hash

Python (legítimo)
python.exe
0CBF71EFA09EC4CE62D95C1448553314728ED5850720C8AD40352BFBB39BE99A

Cargador FSCAN
python311.dll
699290A753F35AE3F05A7EA1984D95F6E6F21971A146714FCA570896E5E6218

FSCA
K.Bin
CFF2AFC651A9CBA84A11A4E275CC9EC49E29AF5FD968352D40AEE07FB0045E

Compilador Java RMI (legítimo)
rmic.exe
A747BE292339EAE693B7C26CAC0D33851CBA31140FD0833371CC8DE978583DBE

push_detect (legítimo)
push_detect.exe
f12250a43926dba46dcfb6145b7f1a524c0eead82bd1a8682307d1f2f1f1e66f

Mdifyloader
Jli.dll
45ECB7B23B328AB762D8519E69738A20B0CD5618A10AB2C57A9C72582AA7E7

Mdifyloader
Microsoft.windowsappruntime.bootstrap.dll
9e91862b585fc4d213e9aaadd571435c1a007d326bd9b07b72dbecb77d1a27ac

Cobalt Strike versión 4.5
actualizar
09087FC4F8C261A810479B574B0ECBFF8173D4A8365A73113025BD506B95E3D7

Cobalt Strike versión 4.5
config.ini
1652AB693512CD4F26C73E253B5B9B0E342AC70AA767524264FEF08706D0E69

vshell
ws_windows_amd2.exe
48F3915FB8D8D39DC5267894A950EFC863BCC660F1654187B3D77A302FD040F

vshell
ws_windows_amd64.exe
54350D677174269B4DC25B0CCFB0029D6AEAC5ABBBC8D39EB880C9FD95691125

vshell
ws.exe
85F9819118AF284E6B00CE49FB0C85F0C0B9D7A0589E1BB56A275ED91314965

Apéndice C: C2

172.237.6 (.) 207: 80
proxy.objectlook (.) com: 80
api.openedr.eu (.) Org: 443
Community.openedr.eu (.) Org: 443
Query.datasophos (.) Com: 443

Apéndice D: Información de configuración

{«server»:»proxy.objectlook(.)com:80″,»type»:»ws»,»vkey»:»safeshell»,»proxy»:»http(:)//10.71.30(.)140:8080″,»salt»:»safeshell»,»l»:false,»e»:false}

BeaconType – HTTPS
Port – 443
SleepTime – 97352
MaxGetSize – 2105202
Jitter – 48
MaxDNS – Not Found
PublicKey_MD5 – e880c4268fb48aebc5510e02f49d3bce
C2Server – api.openedr.eu(.)org,/avatar/js/flashdetect.min.js,community.openedr.eu(.)org,/avatar/js/utm5.min.js
UserAgent – Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
HttpPostUri – /Destroy/stylesheets/color_definitions_base
Malleable_C2_Instructions – Remove 2025 bytes from the end
Remove 6017 bytes from the beginning
NetBIOS decode ‘a’
XOR mask w/ random key
HttpGet_Metadata – ConstHeaders
Accept: application/json, application/xml, text/html
Accept-Language: zh-hk
Accept-Encoding: br, compress
Metadata
mask
base64url
prepend «secure_id_4427KV8TXLHDJ9YJAM5XRIXHI12=»
header «Cookie»
HttpPost_Metadata – ConstHeaders
Accept: text/html, application/json, image/*
Accept-Language: ar-ma
Accept-Encoding: gzip, *
SessionId
mask
base64url
parameter «_SFUYPJNK»
Output
mask
netbiosu
print
PipeName – Not Found
DNS_Idle – Not Found
DNS_Sleep – Not Found
SSH_Host – Not Found
SSH_Port – Not Found
SSH_Username – Not Found
SSH_Password_Plaintext – Not Found
SSH_Password_Pubkey – Not Found
SSH_Banner –
HttpGet_Verb – GET
HttpPost_Verb – POST
HttpPostChunk – 0
Spawnto_x86 – %windir%\syswow64\svchost.exe -k wksvc
Spawnto_x64 – %windir%\sysnative\SearchProtocolHost.exe
CryptoScheme – 0
Proxy_Config – Not Found
Proxy_User – Not Found
Proxy_Password – Not Found
Proxy_Behavior – Use IE settings
Watermark_Hash – MYhXSMGVvcr7PtOTMdABvA==
Watermark – 666666
bStageCleanup – True
bCFGCaution – False
KillDate – 0
bProcInject_StartRWX – False
bProcInject_UseRWX – False
bProcInject_MinAllocSize – 6771
ProcInject_PrependAppend_x86 – b’\x90\x90\x90f\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1fD\x00\x00PXf\x90PX\x0f\x1f\x00\x0f\x1fD\x00\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x00PXPX\x0f\x1f\x80\x00\x00\x00\x00f\x90\x0f\x1f\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00′
b’f\x0f\x1fD\x00\x00\x0f\x1f\x80\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x00\x90\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x80\x00\x00\x00\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00′
ProcInject_PrependAppend_x64 – b’\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x80\x00\x00\x00\x00f\x90PX\x0f\x1f@\x00\x0f\x1f\x80\x00\x00\x00\x00\x0f\x1f@\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00\x90PX\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f@\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f@\x00f\x0f\x1fD\x00\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00′
b’\x90\x0f\x1f\x00PX\x90PX\x0f\x1f@\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00PX\x0f\x1f\x84\x00\x00\x00\x00\x00f\x90PX\x0f\x1fD\x00\x00\x0f\x1fD\x00\x00′
ProcInject_Execute – ntdll:RtlUserThreadStart
CreateThread
NtQueueApcThread-s
CreateRemoteThread
RtlCreateUserThread
ProcInject_AllocationMethod – NtMapViewOfSection
bUsesCookies – True
HostHeader –
headersToRemove – Not Found
DNS_Beaconing – Not Found
DNS_get_TypeA – Not Found
DNS_get_TypeAAAA – Not Found
DNS_get_TypeTXT – Not Found
DNS_put_metadata – Not Found
DNS_put_output – Not Found
DNS_resolver – Not Found
DNS_strategy – failover
DNS_strategy_rotate_seconds – -1
DNS_strategy_fail_x – 100
DNS_strategy_fail_seconds – -1
Retry_Max_Attempts – 0
Retry_Increase_Attempts – 0
Retry_Duration – 0

BeaconType – HTTPS
Port – 443
SleepTime – 92318
MaxGetSize – 1408170
Jitter – 48
MaxDNS – Not Found
PublicKey_MD5 – 492cdc5bc3d8cc5e6440a0da246f6684
C2Server – query.datasophos(.)com,/Enable/v5.10/VPGH7WQQPR
UserAgent – Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
HttpPostUri – /Enable/v8.20/STE7U5WILZII
Malleable_C2_Instructions – Remove 7449 bytes from the end
Remove 2614 bytes from the beginning
Base64 URL-safe decode
XOR mask w/ random key
HttpGet_Metadata – ConstHeaders
Accept: application/xml, application/xhtml+xml, image/*
Accept-Language: fr-lu
Accept-Encoding: gzip, br
Metadata
mask
netbios
prepend «affiliate_id_69W8Y3G469RVG2W2=»
header «Cookie»
HttpPost_Metadata – ConstHeaders
Accept: application/xhtml+xml, image/*, text/html
Accept-Language: zh-tw
Accept-Encoding: compress, gzip
SessionId
mask
netbios
parameter «_TXLXHKQC»
Output
mask
netbiosu
print
PipeName – Not Found
DNS_Idle – Not Found
DNS_Sleep – Not Found
SSH_Host – Not Found
SSH_Port – Not Found
SSH_Username – Not Found
SSH_Password_Plaintext – Not Found
SSH_Password_Pubkey – Not Found
SSH_Banner –
HttpGet_Verb – GET
HttpPost_Verb – POST
HttpPostChunk – 0
Spawnto_x86 – %windir%\syswow64\w32tm.exe
Spawnto_x64 – %windir%\sysnative\WUAUCLT.exe
CryptoScheme – 0
Proxy_Config – Not Found
Proxy_User – Not Found
Proxy_Password – Not Found
Proxy_Behavior – Use IE settings
Watermark_Hash – MYhXSMGVvcr7PtOTMdABvA==
Watermark – 666666
bStageCleanup – True
bCFGCaution – False
KillDate – 0
bProcInject_StartRWX – False
bProcInject_UseRWX – False
bProcInject_MinAllocSize – 6344
ProcInject_PrependAppend_x86 – b’PX\x0f\x1f\x84\x00\x00\x00\x00\x00f\x0f\x1fD\x00\x00PXf\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x80\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x90f\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x80\x00\x00\x00\x00\x90\x90\x90\x0f\x1f\x80\x00\x00\x00\x00\x90′
b’f\x0f\x1fD\x00\x00\x0f\x1f@\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f@\x00′
ProcInject_PrependAppend_x64 – b’\x0f\x1f\x00\x90PX\x0f\x1f\x80\x00\x00\x00\x00f\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1f\x00\x0f\x1f\x80\x00\x00\x00\x00\x0f\x1f\x00\x90\x90′
b’\x0f\x1f\x00PXf\x0f\x1f\x84\x00\x00\x00\x00\x00\x0f\x1fD\x00\x00f\x0f\x1fD\x00\x00′
ProcInject_Execute – ntdll:RtlUserThreadStart
CreateThread
NtQueueApcThread-s
CreateRemoteThread
RtlCreateUserThread
ProcInject_AllocationMethod – VirtualAllocEx
bUsesCookies – True
HostHeader –
headersToRemove – Not Found
DNS_Beaconing – Not Found
DNS_get_TypeA – Not Found
DNS_get_TypeAAAA – Not Found
DNS_get_TypeTXT – Not Found
DNS_put_metadata – Not Found
DNS_put_output – Not Found
DNS_resolver – Not Found
DNS_strategy – round-robin
DNS_strategy_rotate_seconds – -1
DNS_strategy_fail_x – -1
DNS_strategy_fail_seconds – -1
Retry_Max_Attempts – 0
Retry_Increase_Attempts – 0
Retry_Duration – 0

Enlace de la fuente, haz clic para tener más información

Artículos y alertas de seguridad

Consultar más contenidos y alertas

Alertas y noticias de seguridad de la información

Contacta

Contacta con nosotros para obtener soluciones integrales en IT y seguridad de la información

Estamos encantados de responder cualquier pregunta que puedas tener, y ayudarte a determinar cuáles de nuestros servicios se adaptan mejor a tus necesidades.

Nuestros beneficios:
¿Qué sucede a continuación?
1

Programamos una llamada según tu conveniencia.

2

Realizamos una reunión de descubrimiento y consultoría.

3

Preparamos una propuesta.

Agenda una consulta gratuita