JavaScript Ofuscado en el Núcleo del Ataque
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Un correo electrónico de phishing entregó un archivo JavaScript malicioso dentro de un archivo RAR, comenzando una cadena de infección que termina con la ejecución del malware Formbook. Una vez lanzado, el script escribe varios archivos en la carpeta pública, establece persistencia a través de una tarea programada y comienza una carga útil de PowerShell que descifra contenido cifrado con AES para cargar un DLL .NET malicioso. Ese DLL luego se inyecta en un proceso MSBuild.exe , donde continúa su ejecución y despliega la etapa final del malware. La campaña también incorpora varios métodos de evasión de defensas, incluyendo el parcheo de ETW y AMSI para reducir la detección.
Investigación
Durante el análisis, los investigadores identificaron el dropper JavaScript cbmjlzan.JS, junto con una tarea programada configurada para ejecutar el script copiado cada quince minutos para la persistencia. También rastrearon el comando de PowerShell responsable de decodificar datos en base64 ocultos dentro de archivos de imagen. El contenido descifrado reveló un DLL .NET que se inyectó en proceso MSBuild.exe y se utilizó para entregar Formbook. Se extrajeron indicadores adicionales, incluidos rutas de archivo, nombres de tareas y material criptográfico para apoyar una investigación más profunda y el desarrollo de detecciones.
Mitigación
Las organizaciones deberían bloquear la ejecución de archivos JavaScript no confiables y scripts de PowerShell lanzados desde directorios accesibles al usuario, mientras monitorean de cerca las tareas programadas creadas con nombres inusuales o aleatorios. Se deben aplicar controles de ejecución a proceso MSBuild.exe para prevenir abusos en cadenas de malware. Las herramientas de seguridad también deberían detectar comportamientos de inyección de DLL, manipulación de ETW y AMSI, y firmas conocidas relacionadas con Formbook. La capacitación en concienciación de los usuarios sigue siendo importante para reducir el riesgo que representan los archivos adjuntos de phishing.
Respuesta
Los defensores deberían generar alertas cuando aparezca el archivo JavaScript identificado o la tarea programada relacionada, luego aislar el punto final afectado y recoger evidencia volátil para el análisis. Los archivos maliciosos deben eliminarse, la tarea programada borrarse, y el DLL inyectado examinarse en su totalidad para comprender el flujo de ejecución completo. Cualquier componente del sistema comprometido debe ser reconstruido o restaurado para garantizar la integridad. Los IOC relevantes también deben compartirse con la comunidad de seguridad más amplia para ayudar a otros a detectar actividad similar.
graph TB %% Class definitions classDef action fill:#ffcccc classDef tool fill:#99ccff classDef process fill:#ffff99 classDef file fill:#ccffcc classDef malware fill:#ffcc99 %% Nodes email_phishing[«<b>Acción</b> – <b>T1566.001 Spearphishing con adjunto</b><br/>Adjunto RAR malicioso entregado por correo electrónico»] class email_phishing action tool_wsh[«<b>Herramienta</b> – <b>Nombre</b>: Windows Script Host (JavaScript)<br/><b>Técnica</b>: T1559.001 Component Object Model»] class tool_wsh tool action_copy[«<b>Acción</b> – <b>T1559.001 Component Object Model</b><br/>El script se copia a C:\\Users\\Public\\Libraries»] class action_copy action action_sched[«<b>Acción</b> – <b>T1053 Tarea programada</b><br/>Crea una tarea programada para persistencia»] class action_sched action tool_ps[«<b>Herramienta</b> – <b>Nombre</b>: PowerShell<br/><b>Técnica</b>: T1059.001 Intérprete de comandos»] class tool_ps tool action_decode[«<b>Acción</b> – <b>T1027.004 Compilar tras entrega</b> & <b>T1140 Desofuscar/decodificar</b><br/>Decodificación Base64 y descifrado AES»] class action_decode action action_patch[«<b>Acción</b> – <b>T1027.005 Eliminación de indicadores</b><br/>Parches en vivo de ETW y AMSI»] class action_patch action file_dll[«<b>Archivo</b> – <b>Nombre</b>: Orio.png (contiene DLL .NET cifrada)<br/><b>Técnica</b>: Payload oculto»] class file_dll file process_msbuild[«<b>Proceso</b> – <b>Nombre</b>: msbuild.exe<br/><b>Técnica</b>: T1127.001 Ejecución proxy de herramientas de desarrollo»] class process_msbuild process action_inject[«<b>Acción</b> – <b>T1055.001 Inyección de procesos</b><br/>Inyecta DLL descifrada en msbuild.exe»] class action_inject action malware_formbook[«<b>Malware</b> – <b>Nombre</b>: Formbook<br/><b>Fuente</b>: Payload incrustado en Brio.png»] class malware_formbook malware %% Edges / Flow email_phishing –>|delivers| tool_wsh tool_wsh –>|uses COM to| action_copy action_copy –>|leads to| action_sched tool_wsh –>|launches| tool_ps tool_ps –>|executes| action_decode tool_ps –>|applies| action_patch action_decode –>|produces| file_dll action_patch –>|prepares environment for| file_dll file_dll –>|loaded by| process_msbuild process_msbuild –>|receives| action_inject action_inject –>|extracts final payload from| malware_formbook
Flujo de Ataque
Detecciones
Cadenas de PowerShell sospechosas (vía cmdline)
Ver
Cadenas de PowerShell sospechosas (vía powershell)
Ver
LOLBAS WScript / CScript (vía creación_proceso)
Ver
Ejecución sospechosa desde perfil de usuario público (vía creación_proceso)
Ver
Llamar métodos .NET sospechosos desde Powershell (vía powershell)
Ver
Archivos sospechosos en perfil de usuario público (vía evento_archivo)
Ver
Persistencia de JavaScript Ofuscado e Inyección de Carga Maliciosa [Creación de Procesos de Windows]
Ver
Ejecución de PowerShell Ofuscado para Descifrado [Windows Powershell]
Ver
Ejecución de Simulación
Prerequisito: La Verificación Previa de Telemetría y Línea 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 las TTPs identificadas y apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa de Ataque y Comandos:
Un atacante que ha violado una cuenta de bajo privilegio desea descargar una carga maliciosa que está almacenada como una cadena Base64 en un repositorio de scripts comprometido. Para evitar la detección, el atacante crea una línea de comando única en PowerShell que (1) decodifica la cadena Base64, (2) la invoca a través deiex, y (3) crea un objeto AES para descifrar más datos incrustados. La línea de comando exacta se escribe para coincidir con los literales de la regla.powershell C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('REPLACED_STRING'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create()- El atacante reemplaza
REPLACED_STRINGcon una carga legítima Base64 después de eliminar un marcador conocido (VFHDVXDJCF). - The
-Noexit -nop -clos interruptores suprimen las solicitudes e ignoran la política de ejecución, coincidiendo con la condición de detección. - The
$aes_varel nombre de la variable se mantiene literal para satisfacer la segunda cláusula de selección.
- El atacante reemplaza
-
Script de Prueba de Regresión: El siguiente script de PowerShell reproduce la línea de comando exacta de una manera controlada, asegurando que el SIEM reciba la telemetría idéntica.
# Script de Prueba de Regresión – activa la detección $payload = "U2FtcGxlIEJhc2U2NCBTdHJpbmc=" # "Cadena Muestra Base64" $marker = "VFHDVXDJCF" $obfuscated = $payload.Replace($marker, "") # simular el .Replace usado en la detección $command = @" C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('${obfuscated}'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create() "@ # Ejecutar la línea de comando elaborada Invoke-Expression $command -
Comandos de Limpieza: Eliminar cualquier objeto AES residual y detener la sesión de PowerShell engendrada.
# Limpieza – terminar el proceso hijo de PowerShell si aún está corriendo Get-Process -Name powershell -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*WindowsPowerShellv1.0powershell.exe" } | Stop-Process -Force # Opcionalmente borrar cualquier variable temporal Remove-Variable -Name payload, marker, obfuscated, command -ErrorAction SilentlyContinue