Skip to content

Tarrask y tareas programadas ocultas: cómo detectarlas

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.

Publicado el 7 min de lectura

Resumen. En abril de 2022 Microsoft describió Tarrask, una herramienta de HAFNIUM que ocultaba tareas programadas borrando el valor SD bajo TaskCache\Tree\<task>. La tarea desaparecía de schtasks y de la consola, pero seguía en el registro y en disco. Las variantes posteriores usan un descriptor que deniega la lectura o manipulan Index. En análisis offline, las tres son visibles: enumere las claves de Tree sin SD, decodifique los SD que sí existen, revise Index y compare con la carpeta de XML. Trabaje con un hive con sus registros de transacciones aplicados.

Este artículo forma parte de la serie sobre investigación de tareas programadas. Las estructuras del registro en las que se apoya se explican en análisis forense de TaskCache en el registro.

Lo que publicó Microsoft

En Tarrask malware uses scheduled tasks for defense evasion (12 de abril de 2022), el equipo de inteligencia de amenazas de Microsoft describió una herramienta de HAFNIUM (que ahora se sigue como Silk Typhoon) que creaba tareas programadas para mantener la persistencia y después eliminaba el valor SD de la clave Tree de la tarea. Puntos clave del informe:

  • El valor SD contiene el descriptor de seguridad de la tarea. Sin él, las herramientas que enumeran las tareas a través del servicio, como schtasks /query y la consola del Programador de tareas, no muestran la tarea.
  • El borrado requería SYSTEM; desde un símbolo del sistema de administrador con privilegios elevados se obtenía «access denied». La herramienta conseguía SYSTEM robando un token de lsass.exe.
  • Los valores Tree y Tasks de la tarea y su archivo XML en C:\Windows\System32\Tasks permanecían.
  • Ocultar la tarea no la detenía: seguía ejecutándose según sus desencadenadores. Microsoft añade que incluso borrar las claves Tree y Tasks y el archivo XML dejaría la tarea en ejecución hasta el siguiente reinicio o hasta que terminara el proceso svchost.exe que la aloja; lo que da persistencia tras los reinicios es conservar los datos del registro, sin el SD.
  • La recomendación de detección de Microsoft: enumerar TaskCache\Tree en busca de tareas sin valor SD y activar el registro del canal TaskScheduler/Operational y del evento de seguridad 4698.

MITRE ATT&CK incorporó la técnica a T1053.005, donde recoge tanto el borrado del SD como la alteración del valor Index como formas de ocultar una tarea.

Las variantes que también debe revisar

Descriptor que deniega la lectura. En 2024 Binary Defense demostró que un SD válido cuya ACL deniega la lectura a todas las cuentas oculta la tarea a esas mismas herramientas. El valor SD existe y se analiza sin problemas, así que una regla de «SD ausente» no lo detecta. Hay que decodificar el descriptor y leer las ACE.

Manipulación de Index. El DWORD Index de la clave Tree sitúa la tarea en una categoría (1 Boot, 2 Logon, 3 Plain, 4 Maintenance, según cyber.wtf). MITRE cita darle un valor inesperado como método de ocultación. Hay menos detalles públicos que sobre el borrado del SD, así que trate los valores extraños como una pista.

Creación solo en el registro. Binary Defense también comprobó que escribir una tarea directamente en TaskCache, sin SD, evitaba tanto el evento de seguridad 4698 como el 106 de TaskScheduler/Operational. En Windows 10 esa tarea se podía usar de inmediato; en Windows 11 no se ejecutaba hasta que se reiniciaba el servicio o el host. Por tanto, la ausencia de eventos de creación no es prueba de ausencia.

Detección offline

Todo lo necesario está en el hive SOFTWARE y en la carpeta Tasks:

  1. Enumere las claves de tarea de Tree sin SD. Una clave de tarea es la que tiene un valor Id; las carpetas no tienen ni Id ni Index. Cada clave de tarea sin SD es un hallazgo: las tareas legítimas lo tienen.
  2. Decodifique cada SD a SDDL y busque ACE de denegación (D:(D;...)) o una DACL que no conceda nada a Administrators ni a SYSTEM. Compárelos con los descriptores de las tareas de Microsoft vecinas.
  3. Revise Index frente a la clave de categoría (Boot, Logon, Plain, Maintenance) en la que aparece el GUID de la tarea.
  4. Emparéjela con el archivo XML. Una tarea oculta suele conservar su XML. Lea sus acciones y su principal como con cualquier otra tarea.
  5. Lea DynamicInfo en Tasks\{GUID}: las horas de última ejecución y de última ejecución correcta indican si la tarea oculta se ha estado ejecutando.
  6. Fíjese en la hora de última escritura de la clave Tree. Borrar SD modifica la clave. Una hora de última escritura posterior al registro de la tarea es coherente con que el SD se eliminara después. No es una prueba por sí sola: cualquier cambio en Id, Index o SD la actualiza.

La trampa del hive sucio

Un hive copiado de un sistema en vivo puede no contener los últimos cambios, que pueden seguir en SOFTWARE.LOG1/.LOG2. Con las tareas ocultas esto funciona en ambos sentidos: un borrado reciente del SD puede no figurar en el archivo principal (y se le escapa la ocultación), o una tarea registrada minutos antes de la recogida puede faltar por completo. Recopile los registros, aplíquelos con una herramienta que los tenga en cuenta y solo entonces saque conclusiones. El Scheduled Tasks Parser detecta los hives sucios y avisa; no aplica los registros por sí mismo. Los detalles de adquisición están en ubicaciones y adquisición de las tareas programadas.

Detección en vivo

En un sistema en vivo, el equivalente es una consulta al registro como SYSTEM o como administrador sobre HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree que enumere las claves con Id y sin SD. Velociraptor incluye un artefacto precisamente para esto, Windows.Registry.TaskCache.HiddenTasks, que además recupera el XML correspondiente. Sigma tiene una regla para el propio borrado cuando hay auditoría del registro disponible (réplica en detection.fyi).

Para la monitorización continua siguen valiendo las recomendaciones de Microsoft: registro de TaskScheduler/Operational activado, auditoría del evento de seguridad 4698 y alertas ante borrados de SD en el registro bajo TaskCache\Tree. Binary Defense añade un enfoque útil para el threat hunting: tareas presentes en TaskCache sin evento de creación correspondiente (106 o 4698) cuando esos registros están completos por lo demás.

Interpretar una coincidencia

Una entrada de Tree sin SD es una señal fuerte; no hay ningún motivo legítimo habitual para ello. Aun así, redacte el hallazgo como lo que observó: «la clave Tree de \Microsoft\Windows\UPnP\UPnPHostConfigSync no tiene valor SD; por tanto, la tarea no aparece en schtasks ni en la consola del Programador de tareas». Después, establezca:

  • Qué ejecuta: las acciones del XML, o el blob Actions decodificado si el XML ya no existe.
  • Con qué cuenta: el principal en el XML o en la cabecera de Triggers.
  • Desde cuándo: la creación en DynamicInfo, el Date del XML (con el desfase UTC correcto) y la hora de última escritura de la clave.
  • Si llegó a ejecutarse: última ejecución y resultado en DynamicInfo, eventos 200/201 de TaskScheduler/Operational y artefactos de ejecución como Prefetch.
  • Cómo se obtuvo SYSTEM: el borrado lo requiere, así que busque el paso de escalada de privilegios o de acceso a credenciales en los registros de eventos.

En cómo analizar tareas programadas en el navegador hay un ejemplo práctico y ficticio con una tarea al estilo Tarrask.

Preguntas frecuentes

¿Cómo ocultaba Tarrask las tareas programadas?

Borraba el valor SD (descriptor de seguridad) de la clave de la tarea bajo TaskCache\Tree en el hive SOFTWARE. Sin él, schtasks /query y la consola del Programador de tareas dejan de mostrar la tarea, mientras que esta conserva sus datos en el registro y su archivo XML. Microsoft indicó que el borrado tenía que hacerse como SYSTEM.

¿Una tarea oculta se sigue ejecutando?

Sí. En el informe de Microsoft sobre Tarrask, la tarea oculta siguió ejecutándose según sus desencadenadores, y Microsoft señala que incluso una tarea cuyas claves de registro y cuyo XML se hayan borrado por completo sigue ejecutándose hasta el siguiente reinicio o hasta que termine el proceso svchost.exe que la aloja. Una investigación posterior de Binary Defense observó que el comportamiento difiere entre Windows 10 y 11 en las tareas escritas directamente en el registro. Compruebe la hora de última ejecución de DynamicInfo en TaskCache y los registros de eventos en lugar de suponerlo.

¿Cómo encuentro tareas programadas ocultas en modo offline?

Analice el hive SOFTWARE y enumere todas las claves de tarea de TaskCache\Tree que no tengan valor SD, que tengan un SD que deniegue la lectura o un Index inusual. Compare la lista con los archivos XML de System32\Tasks y asegúrese de que se aplicaron los registros de transacciones del hive.

Artículos relacionados

Qué guarda la clave TaskCache de SOFTWARE para cada tarea programada: Id/Index/SD de Tree, valores de Tasks, DynamicInfo, blobs Actions y Triggers, y el Hash.
Análisis forense de tareas programadas: XML de tareas, clave TaskCache del registro, archivos .job heredados y registros de eventos, y cómo correlacionarlos.
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.