Scheduled Tasks y COM Hijacking: Persistencia Avanzada en Windows
Análisis técnico de persistencia avanzada en Windows via Scheduled Tasks y COM Hijacking. Creación programática de tareas, abuso de Task Scheduler COM, hijacking de objetos COM para ejecución sigilosa, y estrategias de detección con Sysmon y ETW.
Persistencia sin Run keys: las alternativas sigilosas
Las Run keys son la técnica de persistencia más común, pero también la más vigilada. Los EDRs modernos y las herramientas de auditoría como Autoruns las detectan trivialmente. El malware avanzado necesita alternativas más sigilosas.
Las Scheduled Tasks y el COM Hijacking ofrecen persistencia robusta con menor visibilidad: las tareas programadas son parte normal de la operación de Windows (cientos de tareas legítimas existen por defecto), y el COM hijacking opera en un espacio del registro que pocas herramientas de seguridad monitorizan activamente.
Scheduled Tasks como persistencia (T1053.005)
Creación vía línea de comando
La forma más directa (y más detectable):
schtasks /create /tn "MicrosoftEdgeUpdateTaskMachineCore" /tr "C:\Users\user\AppData\Local\update.exe" /sc onlogon /ru SYSTEM
schtasks /create /tn "\Microsoft\Windows\Maintenance\WinSAT" /tr "powershell.exe -ep bypass -w hidden -f C:\ProgramData\sync.ps1" /sc daily /st 03:00
schtasks /create /tn "WindowsDefenderScheduledScan" /tr "rundll32.exe C:\ProgramData\scan.dll,DllMain" /sc onstart /rl highest
Patrones de naming: el malware intenta mimetizar tareas legítimas de Microsoft. Nombres que empiezan con "Microsoft", "Windows", "Defender" o que se ubican en subcarpetas de \Microsoft\Windows\.
Creación vía COM API (más sigiloso)
El malware sofisticado evita schtasks.exe y usa la interfaz COM de Task Scheduler directamente:
# Pseudocodigo: crear tarea via COM
task_service = CoCreateInstance(CLSID_TaskScheduler, ITaskService)
task_service.Connect()
root_folder = task_service.GetFolder("\\")
task_def = task_service.NewTask(0)
# Configurar trigger
trigger = task_def.Triggers.Create(TASK_TRIGGER_LOGON)
trigger.Delay = "PT5M" # 5 minutos despues del login
# Configurar accion
action = task_def.Actions.Create(TASK_ACTION_EXEC)
action.Path = "C:\\ProgramData\\payload.exe"
# Configurar settings
task_def.Settings.Hidden = True
task_def.Settings.ExecutionTimeLimit = "PT0S" # Sin limite de tiempo
# Registrar
root_folder.RegisterTaskDefinition(
"\\Microsoft\\Windows\\NetTrace\\GatherNetworkInfo",
task_def,
TASK_CREATE_OR_UPDATE,
None, None,
TASK_LOGON_INTERACTIVE_TOKEN
)
Ventaja: no genera un proceso schtasks.exe visible en logs de Process Creation. La creación ocurre dentro del proceso del malware vía llamadas COM.
Creación directa de archivo XML
Las tareas programadas se almacenan como archivos XML en C:\Windows\System32\Tasks\. El malware con privilegios de SYSTEM puede crear directamente un archivo XML de tarea:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Actions Context="Author">
<Exec>
<Command>C:\ProgramData\payload.exe</Command>
</Exec>
</Actions>
<Settings>
<Hidden>true</Hidden>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
</Settings>
</Task>
Scheduled Task Tampering
Técnica avanzada: el malware modifica una tarea legítima existente para añadir su payload:
- Exportar la tarea legítima con
schtasks /query /xml - Modificar el XML para añadir una acción adicional
- Re-importar la tarea modificada
Esto es difícil de detectar porque la tarea tiene un nombre legítimo y ya existía en el sistema.
Detección de scheduled tasks maliciosas
| Indicador | Fuente | Event ID / Método |
|---|---|---|
| Tarea creada | Security Log | 4698 (task created) |
| Tarea modificada | Security Log | 4702 (task updated) |
| schtasks.exe ejecutado | Sysmon | Event ID 1 (ProcessCreate) |
| Acción de tarea sospechosa | Análisis XML | PowerShell, cmd, rundll32 en Action |
| Tarea con Hidden=true | Análisis XML / schtasks /query | Poco común en tareas legítimas |
| Tarea en directorio de usuario | Ruta en Action | %APPDATA%, %TEMP%, %LOCALAPPDATA% |
| Archivo XML nuevo en System32\Tasks | File monitoring | Sysmon Event ID 11 |
Regla Sigma
title: Scheduled Task Created via schtasks.exe with Suspicious Action
id: b5678901-c2d3-e4f5-a678-9bcdef012345
status: stable
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\schtasks.exe'
CommandLine|contains: '/create'
suspicious_action:
CommandLine|contains:
- 'powershell'
- 'cmd /c'
- 'rundll32'
- 'mshta'
- 'regsvr32'
- 'AppData'
- 'ProgramData'
- 'Temp'
- '-enc'
- '-ep bypass'
condition: selection and suspicious_action
level: high
tags:
- attack.persistence
- attack.t1053.005
COM Hijacking en profundidad (T1546.015)
Cómo funciona el sistema COM
COM (Component Object Model) es un sistema de componentes binarios reutilizables de Windows. Cada componente se identifica por:
- CLSID (Class ID): GUID que identifica la implementación (ej.
{BCDE0395-E52F-467C-8E3D-C4579291692E}) - ProgID (Programmatic ID): nombre legible (ej.
MMDeviceEnumerator) - InProcServer32: ruta a la DLL que implementa el componente
- LocalServer32: ruta al EXE que implementa el componente
El orden de búsqueda
Cuando una aplicación instancia un objeto COM, Windows busca el CLSID en este orden:
HKCU\Software\Classes\CLSID\{CLSID}\InProcServer32(usuario)HKLM\Software\Classes\CLSID\{CLSID}\InProcServer32(sistema)
HKCU tiene precedencia sobre HKLM. Este es el mecanismo que permite el hijacking: el malware registra su DLL en HKCU para un CLSID que normalmente solo existe en HKLM.
Encontrar CLSIDs vulnerables
No todos los CLSIDs son buenos candidatos para hijacking. Los criterios:
- Se carga automáticamente: el sistema o una aplicación común lo instancia sin intervención del usuario
- No existe en HKCU: si ya hay un registro en HKCU, modificarlo es más detectable
- Se carga en un proceso interesante: explorer.exe, svchost.exe (para herencia de contexto)
- Se carga frecuentemente: para garantizar la ejecución regular
Herramientas para descubrir CLSIDs abusables
| Herramienta | Método |
|---|---|
| Process Monitor (Sysinternals) | Filtrar por RegOpenKey en HKCU\Software\Classes\CLSID con resultado NAME NOT FOUND (indica que HKCU no tiene el registro pero lo buscó) |
| COMHijackToolkit | Automatiza la búsqueda de CLSIDs hijackables |
| PowerShell + ProcMon | Script que parsea logs de ProcMon buscando CLSIDs buscados en HKCU |
Implementación del hijack
# Paso 1: Identificar CLSID objetivo (ejemplo: MMDeviceEnumerator)
# Este CLSID se carga en explorer.exe al arrancar
# Paso 2: Registrar DLL maliciosa en HKCU
reg add "HKCU\Software\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}\InProcServer32" /ve /d "C:\Users\user\AppData\Roaming\payload.dll" /f
reg add "HKCU\Software\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}\InProcServer32" /v "ThreadingModel" /d "Both" /f
# Paso 3: Al reiniciar (o al re-ejecutar explorer.exe),
# la DLL maliciosa se carga en explorer.exe
DLL proxy: mantener la funcionalidad legítima
Un problema del COM hijacking: si la DLL maliciosa no implementa la interfaz COM esperada, la aplicación que la carga puede fallar o comportarse de forma anómala, revelando el hijack.
La solución es el DLL proxy (o DLL forwarding):
- La DLL maliciosa exporta las mismas funciones que la DLL legítima
- Cada función exportada simplemente redirige la llamada a la DLL legítima original
- En DllMain o en una función específica, la DLL ejecuta el payload malicioso
- La funcionalidad legítima se mantiene intacta
Detección de COM hijacking
| Indicador | Método | Confianza |
|---|---|---|
Cualquier escritura en HKCU\Software\Classes\CLSID | Sysmon Event ID 13 | Alta (muy pocos programas legítimos escriben aquí) |
| DLL sin firma cargada en proceso firmado vía COM | Sysmon Event ID 7 | Alta |
| CLSID registrado en HKCU que también existe en HKLM | Comparación de registro | Alta |
| DLL en directorio de usuario cargada por proceso del sistema | Sysmon Event ID 7 + path analysis | Muy alta |
Regla Sigma para COM hijacking
title: COM Object Hijacking via Registry Modification
id: c9876543-d2e1-f0a1-b234-567890abcdef
status: stable
logsource:
category: registry_set
product: windows
detection:
selection:
TargetObject|contains: '\Software\Classes\CLSID\'
TargetObject|contains: '\InProcServer32'
filter_system:
User|contains:
- 'SYSTEM'
- 'TrustedInstaller'
condition: selection and not filter_system
level: high
tags:
- attack.persistence
- attack.t1546.015
COM Hijacking como trigger de scheduled tasks
Una combinación avanzada: usar COM hijacking no para persistencia directa, sino como trigger para una scheduled task. Windows permite crear scheduled tasks que se ejecutan cuando un evento COM específico ocurre. Esto combina la sigilosidad del COM hijacking con la robustez de la infraestructura de Task Scheduler.
Mapeo MITRE ATT&CK
| Técnica | ID | Descripción |
|---|---|---|
| Scheduled Task/Job: Scheduled Task | T1053.005 | Persistencia y ejecución via Task Scheduler |
| Event Triggered Execution: COM Object Hijacking | T1546.015 | Hijacking de CLSIDs en HKCU |
| Scheduled Task/Job: At | T1053.002 | Comando at (legacy, deprecado en Win10) |
| Event Triggered Execution: Component Object Model Hijacking | T1546.015 | COM hijacking genérico |
Resumen: Scheduled Tasks vs COM Hijacking
| Aspecto | Scheduled Tasks | COM Hijacking |
|---|---|---|
| Privilegios | Depende (user o SYSTEM) | Ninguno (HKCU) |
| Visibilidad | Media (muchas tareas legítimas) | Baja (pocas herramientas la revisan) |
| Robustez | Alta (infraestructura nativa) | Alta (integrado en el sistema) |
| Detección estándar | Security Log 4698, Autoruns | Sysmon Event ID 13 en CLSID |
| Uso en malware | Commodity + APTs | Principalmente APTs |
| Complejidad | Baja-Media | Media-Alta |
Fuentes y referencias
- Microsoft. "Task Scheduler." Microsoft Docs.
- Microsoft. "Component Object Model (COM)." Microsoft Docs.
- MITRE ATT&CK. "Scheduled Task/Job (T1053)." https://attack.mitre.org/techniques/T1053/
- MITRE ATT&CK. "COM Object Hijacking (T1546.015)." https://attack.mitre.org/techniques/T1546/015/
- Russinovich, M. et al. "Windows Internals Part 1." Microsoft Press, 2017.
- Bohops. "COM Hijacking Techniques." 2019.
- Elastic Security Labs. "Hunting COM Hijacking." 2023.
- Red Canary. "Scheduled Tasks in the 2024 Threat Landscape." Red Canary, 2024.
- CrowdStrike. "APT28 COM Hijacking." CrowdStrike Intelligence.
- SigmaHQ. "Scheduled Task Detection Rules." https://github.com/SigmaHQ/sigma
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Persistencia en el Registro de Windows: Cómo el Malware Sobrevive al Reboot
WMI como Vector de Ataque y Persistencia en Windows
Windows API Calls Más Usadas por Malware: Guía de Referencia para Analistas
Persistencia WMI y Event Subscription: Hunting en el SOC
Registro de Windows en Memoria: hivelist, printkey y Extraccion de Artefactos
De Alerta EDR a Informe Ejecutivo: Caso End-to-End Completo
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.