Rutas de Ataque ESC1 y ESC8: De la Ingeniería Social al Abuso de AD CS
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Los actores de amenazas utilizaron la ingeniería social a través de Microsoft Teams para hacerse pasar por personal de ayuda de TI y establecer acceso remoto con Quick Assist. Después de obtener acceso, abusaron de Servicios de Certificados de Active Directory (AD CS) mal configurados mediante las técnicas ESC1 y ESC8 para escalar privilegios y obtener autenticación a nivel de dominio. Las intrusiones permitieron la inscripción de certificados no autorizados, actividad DCSync y posterior exfiltración de datos.
Investigación
La investigación reconstruyó la cadena de ataque desde la interacción inicial de phishing en Teams hasta el abuso posterior de certificados. Los analistas correlacionaron telemetría de sesiones remotas, ejecución sospechosa desde directorios grabables por el usuario y eventos de AD CS, incluyendo solicitudes de inscripción de certificados y actividad PKINIT. Las discrepancias entre identidades autenticadas y dispositivos de origen proporcionaron puntos clave para identificar posibles ataques de retransmisión NTLM.
Mitigación
Las organizaciones deben implementar procedimientos de verificación rigurosos para solicitudes de soporte no solicitadas y restringir el acceso externo en Microsoft Teams. Las mitigaciones técnicas incluyen el uso de App Control for Business para bloquear ejecuciones no autorizadas y reforzar AD CS habilitando Protección Extendida para la Autenticación (EPA) y HTTPS en los puntos de inscripción. Deshabilitar NTLM en los servicios de inscripción y auditar regularmente los plantillas de certificados también son críticos.
Respuesta
Cuando se detecta actividad maliciosa, los respondedores deben aislar inmediatamente las estaciones de trabajo afectadas y revisar las identidades comprometidas para riesgos de exclusión. Los certificados no autorizados deben ser revocados y la información de revocación actualizada publicada. Los tickets activos de Kerberos deben evaluarse por separado, ya que la revocación de certificados no invalida los TGTs existentes. La contención manual también debe asignarse a cuentas excluidas de la interrupción automatizada.
Flujo de Ataque
Detecciones
Posible Descubrimiento de Configuración de Red del Sistema (vía línea de comandos)
Binario de Java Ejecutado Desde Ubicación Inusual (vía creación de procesos)
Software Alternativo de Acceso / Gestión Remoto (vía creación de procesos)
Eventos de Solicitud de Certificados para Controlador de Dominio [ADCS] (vía auditoría)
Eventos de Solicitud de Certificados [ADCS] (vía auditoría)
Uso Incorrecto de Plantilla ADCS [ESC1/SAN] (vía auditoría)
Posible Ataque Coaccionado (vía auditoría)
Acciones Sospechosas Relacionadas con Certificados Intentadas (vía auditoría)
Posible Explotación de Ataque PetitPotam/ADCS-ESC8 [MS-EFSRPC/ADCS-PKI] (vía auditoría)
Posible Ataque DCSync (vía auditoría)
Posible Acceso No Autorizado con Quick Assist (vía auditoría)
IOCs (HashSha256) para detectar: Desde la suplantación de mesa de ayuda hasta el abuso de AD CS: Investigando las rutas de intrusión ESC1 y ESC8
Abuso de Plantilla de Certificado y Detección de Retransmisión de Autenticación NTLM [Log de Eventos de Seguridad de Microsoft Windows]
Abuso de Autenticación Basada en Certificados con Conexiones LDAPS y SMB [Conexión de Red de Windows]
Phishing en Teams y Ejecución de Runtime Portátil para Acceso No Autorizado [Creación de Procesos de Windows]
Ejecución de Simulación
-
Narrativa del Ataque & Comandos: El adversario inicia una campaña de phishing a través de Microsoft Teams, haciéndose pasar por soporte de TI. Instruyen a la víctima para abrir «Quick Assist». Una vez establecida la sesión, el atacante utiliza el acceso remoto para colocar un portátil
python.exeen un directorio disfrazado:C:Usuarios<User>AppDataRoamingKB. Finalmente, para facilitar el movimiento lateral, el atacante ejecutasysteminfoandipconfigpara recopilar datos de reconocimiento en el host. -
Script de Prueba de Regresión:
# Script de Simulación: Phishing en Teams y Ejecución de Runtime Portátil # 1. Configuración: Crear el directorio 'malicious' en AppData $targetDir = "$env:APPDATAKB" if (!(Test-Path $targetDir)) { New-Item -Path $targetDir -ItemType Directory -Force } # 2. Simular el runtime portátil (creando un archivo ficticio llamado python.exe) # En un ataque real, esto sería un binario real. $dummyPython = Join-Path $targetDir "python.exe" New-Item -Path $dummyPython -ItemType File -Force # 3. Simular el proceso padre 'Teams' generando Quick Assist # Nota: Dado que no podemos falsificar fácilmente el árbol de procesos del actual Teams.exe en un solo script # sin inyección avanzada, simularemos la telemetría imitando la línea de comandos # y el comportamiento esperado de manera que imita la lógica. Write-Host "[!] Simulando Secuencia de Ataque..." # Activar la lógica de detección simulando la cadena de procesos # Nota: Para activar la regla Sigma específica, el proceso 'python.exe' # debe ser visto como un hijo de 'Teams.exe' en el flujo de telemetría. # Paso A: Simular Teams llamando a Quick Assist (Simulación manual de telemetría) # En un entorno de prueba real, se podría usar una herramienta como 'ProcessHacker' o 'Sysmon' # para manipular PIDs padres, pero para este script, ejecutaremos la secuencia. Start-Process "cmd.exe" -ArgumentList "/c echo Simulando Teams llamando a Quick Assist" # Paso B: Ejecutar el 'runtime portátil' desde la ruta específica Start-Process -FilePath $dummyPython -ArgumentList "--version" -ErrorAction SilentlyContinue # Paso C: Ejecutar Comandos de Descubrimiento Start-Process "cmd.exe" -ArgumentList "/c systeminfo" Start-Process "cmd.exe" -ArgumentList "/c ipconfig" Start-Process "cmd.exe" -ArgumentList "/c tasklist" Write-Host "[+] Simulación completa. Verifique SIEM para alertas." -
Comandos de Limpieza:
# Limpieza: Eliminar el directorio y archivos simulados como maliciosos $targetDir = "$env:APPDATAKB" if (Test-Path $targetDir) { Remove-Item -Path $targetDir -Recurse -Force Write-Host "[+] Limpieza exitosa: $targetDir eliminado." } else { Write-Host "[-] Fallo en limpieza: Directorio no encontrado." }