Skip to content
TarraskDetecta tareas ocultas al estilo Tarrask — TaskCache frente a XML

Scheduled Tasks Parser

Todas las tareas programadas de un equipo Windows: las definiciones XML, el TaskCache del subárbol SOFTWARE y los archivos .job heredados, cruzados para que destaquen las tareas ocultas, eliminadas o manipuladas. Se analiza en tu navegador con WebAssembly: no se sube nada.

  • System32\Tasks
  • TaskCache
  • .job
  • Rust → WebAssembly

Suelta la carpeta Tasks, el subárbol SOFTWARE o un ZIP de triaje

Archivos XML de tareas de C:\Windows\System32\Tasks, archivos .job heredados de C:\Windows\Tasks y el subárbol SOFTWARE (TaskCache). Añade tanto la carpeta como el subárbol: los hallazgos interesantes salen de compararlos. Las colecciones de KAPE y Velociraptor funcionan tal cual.

Una colección sintética de una intrusión ficticia: sin datos reales y con comandos de relleno inofensivos. Consejo: ordena por gravedad, abre \SyncBackup y centra el rango de tiempo en ella (±1 h).

100 % en el cliente: WebAssembly analiza los archivos en tu navegador y nunca se suben.

Cómo obtener tus datos

Guía de adquisición completa

Necesitas dos cosas del equipo: la carpeta Tasks (archivos XML de tareas, más los archivos .job heredados) y el subárbol del registro SOFTWARE, que contiene el TaskCache. Recoge ambos y suelta aquí la carpeta o el ZIP.

  1. Recoge la carpeta Tasks y el subárbol SOFTWARE
  2. Suelta aquí la carpeta o el ZIP
  3. Se analiza en tu navegador, nunca se sube

Pégalo en Windows PowerShell ejecutado como administrador. Copia las dos carpetas Tasks y guarda una copia coherente del subárbol SOFTWARE con reg save (que incluye los cambios aún pendientes en los registros de transacciones) en C:\triage.

PowerShell · Admin
New-Item -ItemType Directory -Force -Path C:\triage\Windows\System32\config | Out-Null
robocopy C:\Windows\System32\Tasks C:\triage\Windows\System32\Tasks /E /B /R:0 /W:0 /NP /NDL /NFL
robocopy C:\Windows\Tasks C:\triage\Windows\Tasks *.job /B /R:0 /W:0 /NP /NDL /NFL
reg save HKLM\SOFTWARE C:\triage\Windows\System32\config\SOFTWARE /y

Resultado: C:\triage\Windows\System32\Tasks, C:\triage\Windows\Tasks y C:\triage\Windows\System32\config\SOFTWARE, con la misma estructura que el disco, de modo que la herramienta empareja archivos y registro por equipo. Suelta aquí la carpeta C:\triage.

¿Vas a analizarlo en otro equipo? Empaquétalo en un solo ZIP con el tar.exe integrado en Windows 10 1803 y posteriores (un ZIP creado con Compress-Archive también sirve):

PowerShell / cmd
tar -a -c -f C:\triage\tasks.zip -C C:\triage Windows

Errores habituales

  • Copia la carpeta Tasks completa, no solo las tareas sospechosas: «solo registro» (XML eliminado) solo se puede señalar cuando la carpeta está completa.
  • Una copia normal de SOFTWARE falla mientras Windows está en ejecución, y algunas herramientas devuelven un archivo lleno de ceros: usa reg save, KAPE, Velociraptor o una copia en bruto con sus archivos .LOG1/.LOG2.
  • Las fechas del XML y las horas de los desencadenadores son hora local sin zona. La herramienta deduce el desfase a partir de las horas del TaskCache; aun así, anota la zona horaria del equipo.

¿Qué son las tareas programadas de Windows?

El Programador de tareas ejecuta programas al arrancar, al iniciar sesión, según un calendario, ante un evento o cuando el equipo está inactivo. Windows incluye cientos de tareas propias y los instaladores de software añaden más. También es una de las formas más habituales que usan los atacantes para mantener el acceso a un equipo (MITRE ATT&CK T1053.005).

Cada tarea existe en dos lugares: una definición XML en disco y una caché en el subárbol del registro SOFTWARE, que es la que realmente carga el Programador de tareas. Comparar ambas es la forma de encontrar tareas ocultas, manipuladas o cuyos archivos se eliminaron.

Dónde se guardan las evidencias

  • C:\Windows\System32\Tasks\ — un archivo XML por tarea (UTF-16LE, sin extensión): autor, fecha de registro, desencadenadores, cuenta con la que se ejecuta, configuración y acciones (línea de comandos, controlador COM).
  • SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache — Tree (rutas de tareas con los valores Id, Index y SD) y Tasks\{GUID} (Path, Hash, Actions, Triggers y DynamicInfo con los FILETIME de creación y última ejecución).
  • C:\Windows\Tasks\*.job — trabajos heredados del Programador de tareas 1.0: aplicación, parámetros, autor, hora de la última ejecución.
  • Registros relacionados (no se analizan aquí): los event IDs 4698–4702 de Security cuando la auditoría de acceso a objetos está activada, y Microsoft-Windows-TaskScheduler/Operational (106 registrada, 140 actualizada, 141 eliminada, 200/201 acción iniciada/completada).

Qué comprueba esta herramienta

  • Tareas ocultas: una entrada Tree del TaskCache sin su valor SD (la técnica «Tarrask»), invisible para schtasks y la consola, pero que sigue ejecutándose.
  • Archivos eliminados o plantados: tareas registradas sin archivo XML y archivos XML sin registro; archivos XML editados después del registro (hash del TaskCache) y acciones del registro que difieren del archivo.
  • Contenido sospechoso: PowerShell codificado (lo decodificamos por ti), LOLBins, comandos en rutas de red o con escritura de usuario, SYSTEM o privilegios más altos en tareas que no son de Microsoft, tareas ocultas que no son de Microsoft, nombres de aspecto aleatorio y tareas registradas recientemente.
  • Marcas de tiempo: fecha de registro, creación en el TaskCache, última ejecución y última ejecución correcta, límites de inicio de los desencadenadores y horas de última escritura de las claves del registro, en una única cronología filtrable.

Limitaciones

  • Los registros de transacciones del registro no se aplican: se señala un subárbol «sucio», pero faltan los cambios que aún están en SOFTWARE.LOG1/LOG2.
  • Los valores binarios del TaskCache (DynamicInfo, Actions, Triggers) no están documentados; su estructura procede de ingeniería inversa pública. Solo se decodifican la cabecera de Triggers y el principal, no cada registro de desencadenador.
  • Las fechas del XML, las horas de los desencadenadores y las horas de los .job son hora local sin zona; el desfase se deduce cuando es posible y se muestra.
  • No se hace carving de claves del registro ni de archivos XML eliminados; para eso hay que buscar en los registros de eventos y en las instantáneas de volumen.

Cómo obtener los archivos

  • Recoge C:\Windows\System32\Tasks (y C:\Windows\Tasks) y el subárbol SOFTWARE con KAPE (ScheduledTasks + RegistryHivesSystem), Velociraptor (Windows.Triage.Targets) o con reg save y una copia de la carpeta.
  • Conserva la estructura de carpetas (…\Windows\System32\Tasks, …\Windows\System32\config\SOFTWARE) para que las tareas se emparejen con el subárbol correcto cuando un ZIP contiene varios equipos.
  • Recoge la carpeta Tasks completa: los archivos XML que faltan solo se señalan cuando la mayoría de las tareas registradas tienen el suyo.

Preguntas frecuentes

¿Se suben mis archivos a algún sitio?

No. El parser, incluidos sus lectores de registro y de XML, está escrito en Rust compilado a WebAssembly y se ejecuta en un Web Worker de tu navegador. No existe ningún endpoint de subida.

¿Cómo encuentra las tareas ocultas (Tarrask)?

El Programador de tareas solo muestra una tarea si su clave TaskCache\Tree tiene un valor SD (descriptor de seguridad). Un malware con privilegios de SYSTEM puede eliminar ese valor: la tarea desaparece de schtasks y de la consola, pero sigue ejecutándose. La herramienta señala cada clave Tree que tiene un Id de tarea pero no SD, y muestra la hora de última escritura de la clave.

¿Por qué necesito tanto la carpeta Tasks como el subárbol SOFTWARE?

Cada uno cuenta la mitad de la historia. El archivo XML es la definición legible; el TaskCache es lo que realmente carga el Programador de tareas. Las tareas registradas sin archivo XML, los archivos que nunca se registraron, los XML editados tras el registro y las acciones del registro que difieren del archivo solo aparecen al comparar ambos.

¿Por qué están desplazadas las horas?

Windows escribe la fecha de registro y las horas de los desencadenadores en el XML de la tarea como hora local sin zona horaria, mientras que las horas del TaskCache están en UTC. La herramienta deduce el desfase del equipo comparando ambas en las mismas tareas, y también puedes configurarlo tú.

¿Una tarea señalada es maliciosa?

No necesariamente. Los hallazgos son pistas de triaje: hay actualizadores de terceros que se ejecutan como SYSTEM desde ProgramData y herramientas de administración que usan PowerShell codificado. Lee la explicación de cada hallazgo y contrástala con otros artefactos.

Paso a paso: cargue XML de tareas, archivos .job y el hive SOFTWARE en un parser gratuito en el navegador, lea tareas ocultas, ajuste la zona horaria y exporte.
Lista práctica para detectar tareas programadas maliciosas: rutas escribibles, PowerShell codificado, LOLBins, SYSTEM, tareas ocultas y discrepancias XML/registro.
Cómo Tarrask ocultaba tareas programadas borrando el valor SD de TaskCache, las variantes con ACL de denegación e Index, y cómo hallarlas offline en el hive SOFTWARE.