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.
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
SDcontiene el descriptor de seguridad de la tarea. Sin él, las herramientas que enumeran las tareas a través del servicio, comoschtasks /queryy 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
TreeyTasksde la tarea y su archivo XML enC:\Windows\System32\Taskspermanecían. - Ocultar la tarea no la detenía: seguía ejecutándose según sus desencadenadores. Microsoft añade que incluso borrar las claves
TreeyTasksy el archivo XML dejaría la tarea en ejecución hasta el siguiente reinicio o hasta que terminara el procesosvchost.exeque la aloja; lo que da persistencia tras los reinicios es conservar los datos del registro, sin elSD. - La recomendación de detección de Microsoft: enumerar
TaskCache\Treeen busca de tareas sin valorSDy 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:
- Enumere las claves de tarea de
TreesinSD. Una clave de tarea es la que tiene un valorId; las carpetas no tienen niIdniIndex. Cada clave de tarea sinSDes un hallazgo: las tareas legítimas lo tienen. - Decodifique cada
SDa 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. - Revise
Indexfrente a la clave de categoría (Boot,Logon,Plain,Maintenance) en la que aparece el GUID de la tarea. - Emparéjela con el archivo XML. Una tarea oculta suele conservar su XML. Lea sus acciones y su principal como con cualquier otra tarea.
- Lea
DynamicInfoenTasks\{GUID}: las horas de última ejecución y de última ejecución correcta indican si la tarea oculta se ha estado ejecutando. - Fíjese en la hora de última escritura de la clave
Tree. BorrarSDmodifica 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 enId,IndexoSDla 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
Actionsdecodificado 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, elDatedel 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.