FrostyNeighbor: Nuevas travesuras y amenazas digitales
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
ESET informa que el grupo APT FrostyNeighbor, también rastreado como Ghostwriter, ha reanudado los ataques contra organizaciones gubernamentales ucranianas utilizando PDFs de spear-phishing que entregan un descargador basado en JavaScript conocido como PicassoLoader, que finalmente despliega un beacon de Cobalt Strike. La campaña se basa en la validación geográfica, la persistencia de tareas programadas y múltiples técnicas de descarga de archivos para reducir la visibilidad y evadir la detección. Su infraestructura está posicionada detrás de Cloudflare y utiliza varios needbinding.icu dominios.
Investigación
Los investigadores reconstruyeron toda la cadena de ataque, comenzando con el señuelo del PDF malicioso, continuando con el droper de JavaScript y el descargador PicassoLoader, y terminando con la entrega de la carga útil de Cobalt Strike. Extrajeron indicadores, incluidos nombres de archivos, cambios en el registro y URLs de comando y control, luego los vincularon a las técnicas conocidas de FrostyNeighbor. El informe también destaca la explotación de CVE-2023-38831 en WinRAR y CVE-2024-42009 en Roundcube.
Mitigación
Las organizaciones deberían bloquear tipos de archivos adjuntos sospechosos, aplicar controles estrictos sobre la ejecución de macros y scripts, monitorear las tareas programadas creadas por binarios desconocidos y restringir el tráfico HTTPS saliente a dominios maliciosos conocidos. Las vulnerabilidades referenciadas deberían parchearse de inmediato, y se deberían aplicar restricciones de mínimo privilegio al uso de rundll32.exe. uso.
Respuesta
Si se detectan indicadores relacionados, aísle inmediatamente el sistema afectado, recopile artefactos forenses y busque tanto el beacon de Cobalt Strike como los componentes de PicassoLoader. Restablezca cualquier credencial expuesta y revise las tareas programadas y las entradas de clave de ejecución en busca de signos de persistencia.
"graph TB %% Definiciones de clase classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef file fill:#c2f0c2 classDef tool fill:#cccccc classDef malware fill:#ff9999 %% Nodos – Acciones attack_initial_access["<b>Acción</b> – <b>T1566.001 Phishing: Anexo de Spearphishing</b><br/>Correo electrónico con PDF malicioso con enlace a un archivo RAR."] class attack_initial_access action action_user_execution["<b>Acción</b> – <b>T1204.002 Ejecución de Usuario</b><br/>La víctima abre el PDF que ejecuta un droper de JavaScript."] class action_user_execution action %% Nodos – Archivos file_malicious_pdf["<b>Archivo</b> – <b>Nombre</b>: malicious.pdf<br/>Contiene droper de JavaScript."] class file_malicious_pdf file file_rar["<b>Archivo</b> – <b>Nombre</b>: payload.rar<br/>Entregado a través de enlace en el PDF."] class file_rar file file_scheduled_xml["<b>Archivo</b> – <b>Nombre</b>: scheduled_task.xml<br/>XML usado para registrar una tarea programada."] class file_scheduled_xml file file_reg["<b>Archivo</b> – <b>Nombre</b>: persistence.reg<br/>Archivo de registro que crea una clave de Run.""" class file_reg file file_lnk["<b>Archivo</b> – <b>Nombre</b>: launcher.lnk<br/>Acceso directo colocado en la carpeta de inicio.""" class file_lnk file %% Nodos – Malware / Herramientas malware_javascript_dropper["<b>Malware</b> – <b>Nombre</b>: JavaScript Dropper<br/>Ejecuta scripts codificados en base64 y embebe cargas útiles de segunda etapa."] class malware_javascript_dropper malware tool_picasso_loader["<b>Herramienta</b> – <b>Nombre</b>: PicassoLoader<br/>Recopila información del sistema, lista de procesos e identidad de la víctima."] class tool_picasso_loader tool malware_cobalt_strike["<b>Malware</b> – <b>Nombre</b>: Cobalt Strike Beacon<br/>Proporciona capacidades de control remoto.""" class malware_cobalt_strike malware %% Nodos – Técnicas technique_obfuscation["<b>Técnica</b> – <b>T1027 Archivos o Información Ofuscada</b><br/>Las cargas útiles están codificadas en base64 para evitar la detección."] class technique_obfuscation technique technique_embedded_payload["<b>Técnica</b> – <b>T1027.009 Cargas Útiles Embebidas</b><br/>El descargador y el beacon están ocultos dentro del JavaScript."] class technique_embedded_payload technique technique_gather_identity["<b>Técnica</b> – <b>T1589 Recopilar Información de Identidad de la Víctima</b><br/>Recopila nombre de usuario, nombre de computadora, versión de SO y tiempo de arranque."] class technique_gather_identity technique technique_system_info["<b>Técnica</b> – <b>T1082 Descubrimiento de Información del Sistema</b><br/>Recopila especificaciones detalladas del sistema."] class technique_system_info technique technique_process_discovery["<b>Técnica</b> – <b>T1057 Descubrimiento de Procesos</b><br/>Enumera los procesos en ejecución en el host."] class technique_process_discovery technique technique_c2_https["<b>Técnica</b> – <b>T1071.001 Protocolo de Capa de Aplicación: Protocolos Web</b><br/>Se comunica con C2 a través de HTTPS POST.""" class technique_c2_https technique technique_scheduled_task["<b>Técnica</b> – <b>T1053.005 Tarea/Job Programado</b><br/>Crea un XML de tarea programada para persistencia.""" class technique_scheduled_task technique technique_run_key["<b>Técnica</b> – <b>T1060 Claves de Run del Registro / Carpeta de Inicio</b><br/>Agrega una clave de Run que apunta a un LNK malicioso.""" class technique_run_key technique technique_exfiltration["<b>Técnica</b> – <b>T1041 Exfiltración a través del Canal C2</b><br/>Envía datos recopilados a través del mismo canal HTTPS.""" class technique_exfiltration technique %% Conexiones – Flujo de Ataque attack_initial_access –>|entrega| file_malicious_pdf file_malicious_pdf –>|abierto_por| action_user_execution action_user_execution –>|ejecuta| malware_javascript_dropper malware_javascript_dropper –>|usa| technique_obfuscation malware_javascript_dropper –>|contiene| technique_embedded_payload technique_embedded_payload –>|deja caer| tool_picasso_loader tool_picasso_loader –>|recopila| technique_system_info tool_picasso_loader –>|recopila| technique_process_discovery tool_picasso_loader –>|recopila| technique_gather_identity tool_picasso_loader –>|contacta| technique_c2_https technique_c2_https –>|entrega| malware_cobalt_strike malware_cobalt_strike –>|establece| technique_scheduled_task technique_scheduled_task –>|crea| file_scheduled_xml malware_cobalt_strike –>|establece| technique_run_key technique_run_key –>|crea| file_reg file_reg –>|agrega| file_lnk technique_c2_https –>|exfiltra vía| technique_exfiltration "
Flujo de Ataque
Detecciones
Puntos de Persistencia Posibles [ASEP – Hive de Software/NTUSER] (vía evento_registro)
Ver
Ejecución de Procesos del Sistema desde Rutas Atípicas (vía creación_de_proceso)
Ver
Ejecución de Rutas Sospechosas de Rundll32 Dll (vía creación_de_proceso)
Ver
LOLBAS WScript / CScript (vía creación_de_proceso)
Ver
IOCs (HashSha1) para detectar: FrostyNeighbor: Nuevas travesuras y travesuras digitales
Ver
Detección de Comunicación C&C de FrostyNeighbor [Conexión de Red de Windows]
Ver
Despliegue de Cobalt Strike de FrostyNeighbor a través de Rundll32 y JavaScript [Creación de Proceso de Windows]
Ver
Ejecución de Simulación
Requisito Previo: La Verificación Pre-vuelo de Telemetría y Base debe haber pasado.
Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa del Ataque y Comandos:
El adversario ha obtenido acceso en el host de la víctima y desea desplegar un beacon de Cobalt Strike manteniéndose bajo el radar. Ellos:
- Copiar
uso de rundll32.exe.a una ubicación no estándar (C:ProgramDataTemprundll32.exe) para evadir alertas de lista blanca simples. - Dejar caer la DLL maliciosa (
ViberPC.dll) en%ProgramData%. Esta DLL contiene la carga útil de Cobalt Strike integrada. - Ejecutar el
uso de rundll32.exe.copiado con una línea de comandos que carga la DLL maliciosa (%ProgramData%ViberPC.dll). - Dejar caer dos archivos de JavaScript (
53_7.03.2026_R.jsandUpdate.js) que contienen JScript que contacta al servidor C2 y finaliza la instalación del beacon. - Ejecutar los archivos de JavaScript usando
cscript.exe, causando la creación de procesos cuyoImagentermina con.jsy cuyoLínea de Comandocontiene los nombres de archivo exactos.
Estos pasos generan los eventos exactos de creación de procesos de Sysmon coincidentes con
selección1,selección2, yselección3en la regla de Sigma. - Copiar
-
Script de Prueba de Regresión:
# Simulación de Despliegue de Cobalt Strike de FrostyNeighbor # ------------------------------------------------- # 1. Preparar rutas $tempDir = "$env:ProgramDataTemp" $rundllCopy = Join-Path $tempDir "rundll32.exe" $malDll = "$env:ProgramDataViberPC.dll" $js1 = "$env:ProgramData53_7.03.2026_R.js" $js2 = "$env:ProgramDataUpdate.js" # 2. Asegurarse de que el directorio temporal exista New-Item -Path $tempDir -ItemType Directory -Force | Out-Null # 3. Copiar rundll32.exe a una ubicación no estándar Copy-Item -Path "$env:SystemRootSystem32rundll32.exe" -Destination $rundllCopy -Force # 4. Crear una DLL maliciosa ficticia (en un ataque real esto sería la carga útil) $dummyDll = [IO.File]::ReadAllBytes("$env:SystemRootSystem32driversetchosts") # binario de marcador de posición [IO.File]::WriteAllBytes($malDll, $dummyDll) # 5. Ejecutar el rundll32 copiado con la DLL maliciosa Start-Process -FilePath $rundllCopy -ArgumentList "`"$malDll`"" -WindowStyle Hidden # 6. Dejar caer cargas útiles de JavaScript $jsContent = @" // Simple JScript que alcanza un punto final de C2 (simulado) var xhr = new ActiveXObject("MSXML2.XMLHTTP"); xhr.open("GET", "http://127.0.0.1:8080/beacon", false); xhr.send(); "@ Set-Content -Path $js1 -Value $jsContent -Encoding ASCII Set-Content -Path $js2 -Value $jsContent -Encoding ASCII # 7. Ejecutar los archivos de JavaScript a través de cscript (esto crea procesos con imagen .js) Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js1`"" -WindowStyle Hidden Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js2`"" -WindowStyle Hidden # 8. Pausa para permitir la ingestión de SIEM Start-Sleep -Seconds 15 -
Comandos de Limpieza:
# Limpieza después de la simulación $paths = @( "$env:ProgramDataViberPC.dll", "$env:ProgramData53_7.03.2026_R.js", "$env:ProgramDataUpdate.js", "$env:ProgramDataTemprundll32.exe" ) foreach ($p in $paths) { if (Test-Path $p) { Remove-Item -Path $p -Force } } # Opción de detener cualquier proceso cscript que quede iniciado por la prueba Get-Process -Name cscript -ErrorAction SilentlyContinue | Stop-Process -Force