AvanzadoWindowsscheduled tasksCOM hijackingpersistenciadetecciónMITRE ATT&CK

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.

MalwareIntel Research··8 min lectura
Serie: Malware en Windows — Parte 6

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:

  1. Exportar la tarea legítima con schtasks /query /xml
  2. Modificar el XML para añadir una acción adicional
  3. 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

IndicadorFuenteEvent ID / Método
Tarea creadaSecurity Log4698 (task created)
Tarea modificadaSecurity Log4702 (task updated)
schtasks.exe ejecutadoSysmonEvent ID 1 (ProcessCreate)
Acción de tarea sospechosaAnálisis XMLPowerShell, cmd, rundll32 en Action
Tarea con Hidden=trueAnálisis XML / schtasks /queryPoco común en tareas legítimas
Tarea en directorio de usuarioRuta en Action%APPDATA%, %TEMP%, %LOCALAPPDATA%
Archivo XML nuevo en System32\TasksFile monitoringSysmon 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:

  1. HKCU\Software\Classes\CLSID\{CLSID}\InProcServer32 (usuario)
  2. 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:

  1. Se carga automáticamente: el sistema o una aplicación común lo instancia sin intervención del usuario
  2. No existe en HKCU: si ya hay un registro en HKCU, modificarlo es más detectable
  3. Se carga en un proceso interesante: explorer.exe, svchost.exe (para herencia de contexto)
  4. Se carga frecuentemente: para garantizar la ejecución regular

Herramientas para descubrir CLSIDs abusables

HerramientaMé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ó)
COMHijackToolkitAutomatiza la búsqueda de CLSIDs hijackables
PowerShell + ProcMonScript 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):

  1. La DLL maliciosa exporta las mismas funciones que la DLL legítima
  2. Cada función exportada simplemente redirige la llamada a la DLL legítima original
  3. En DllMain o en una función específica, la DLL ejecuta el payload malicioso
  4. La funcionalidad legítima se mantiene intacta

Detección de COM hijacking

IndicadorMétodoConfianza
Cualquier escritura en HKCU\Software\Classes\CLSIDSysmon Event ID 13Alta (muy pocos programas legítimos escriben aquí)
DLL sin firma cargada en proceso firmado vía COMSysmon Event ID 7Alta
CLSID registrado en HKCU que también existe en HKLMComparación de registroAlta
DLL en directorio de usuario cargada por proceso del sistemaSysmon Event ID 7 + path analysisMuy 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écnicaIDDescripción
Scheduled Task/Job: Scheduled TaskT1053.005Persistencia y ejecución via Task Scheduler
Event Triggered Execution: COM Object HijackingT1546.015Hijacking de CLSIDs en HKCU
Scheduled Task/Job: AtT1053.002Comando at (legacy, deprecado en Win10)
Event Triggered Execution: Component Object Model HijackingT1546.015COM hijacking genérico

Resumen: Scheduled Tasks vs COM Hijacking

AspectoScheduled TasksCOM Hijacking
PrivilegiosDepende (user o SYSTEM)Ninguno (HKCU)
VisibilidadMedia (muchas tareas legítimas)Baja (pocas herramientas la revisan)
RobustezAlta (infraestructura nativa)Alta (integrado en el sistema)
Detección estándarSecurity Log 4698, AutorunsSysmon Event ID 13 en CLSID
Uso en malwareCommodity + APTsPrincipalmente APTs
ComplejidadBaja-MediaMedia-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

Artículos relacionados

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.