Skip to content
TarraskRepère les tâches masquées façon Tarrask — TaskCache contre XML

Scheduled Tasks Parser

Toutes les tâches planifiées d’une machine Windows : les définitions XML, le TaskCache de la ruche SOFTWARE et les fichiers .job hérités, rapprochés pour faire ressortir les tâches masquées, supprimées ou altérées. Analyse dans votre navigateur avec WebAssembly — rien n’est envoyé.

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

Déposez le dossier Tasks, la ruche SOFTWARE ou un ZIP de triage

Fichiers XML de tâches de C:\Windows\System32\Tasks, fichiers .job hérités de C:\Windows\Tasks et ruche SOFTWARE (TaskCache). Ajoutez le dossier et la ruche : les constats intéressants naissent de leur comparaison. Les collectes KAPE et Velociraptor fonctionnent telles quelles.

Une collecte synthétique issue d’une intrusion fictive — aucune donnée réelle, commandes factices inoffensives. Astuce : triez par gravité, puis ouvrez \SyncBackup et centrez la plage horaire dessus (±1 h).

100 % côté client : les fichiers sont analysés par WebAssembly dans votre navigateur et ne sont jamais envoyés.

Comment obtenir vos données

Guide d’acquisition complet

Il vous faut deux éléments de la machine : le dossier Tasks (fichiers XML des tâches, plus les fichiers .job hérités) et la ruche de registre SOFTWARE, qui contient le TaskCache. Collectez les deux, puis déposez le dossier ou le ZIP ici.

  1. Collectez le dossier Tasks et la ruche SOFTWARE
  2. Déposez le dossier ou le ZIP ici
  3. Analysé dans votre navigateur, jamais envoyé

À coller dans Windows PowerShell exécuté en tant qu’administrateur. La commande copie les deux dossiers Tasks et enregistre une copie cohérente de la ruche SOFTWARE avec reg save (qui inclut les modifications encore en attente dans les journaux de transactions), dans 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

Résultat : C:\triage\Windows\System32\Tasks, C:\triage\Windows\Tasks et C:\triage\Windows\System32\config\SOFTWARE — la même arborescence que sur le disque, ce qui permet à l’outil de rapprocher fichiers et registre par machine. Déposez le dossier C:\triage ici.

Analyse sur une autre machine ? Regroupez le tout dans un seul ZIP avec le tar.exe intégré à Windows 10 1803 et versions ultérieures (un ZIP créé avec Compress-Archive fonctionne aussi) :

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

Pièges à éviter

  • Copiez tout le dossier Tasks, pas seulement les tâches suspectes : « registre seul » (XML supprimé) ne peut être signalé que si le dossier est complet.
  • Une simple copie de SOFTWARE échoue pendant que Windows tourne, et certains outils renvoient un fichier rempli de zéros : utilisez reg save, KAPE, Velociraptor ou une copie brute accompagnée de ses fichiers .LOG1/.LOG2.
  • Les dates XML et les heures des déclencheurs sont en heure locale sans fuseau. L’outil déduit le décalage à partir des heures du TaskCache ; notez tout de même le fuseau horaire de la machine.

Que sont les tâches planifiées Windows ?

Le Planificateur de tâches exécute des programmes au démarrage, à l’ouverture de session, selon un calendrier, sur un événement ou lorsque la machine est inactive. Windows embarque des centaines de tâches qui lui sont propres, et les installateurs de logiciels en ajoutent d’autres. C’est aussi l’un des moyens les plus courants pour un attaquant de conserver l’accès à une machine (MITRE ATT&CK T1053.005).

Chaque tâche existe à deux endroits : une définition XML sur disque et un cache dans la ruche de registre SOFTWARE, que le Planificateur de tâches charge réellement. C’est en comparant les deux que l’on trouve les tâches masquées, altérées ou dont les fichiers ont été supprimés.

Où se trouvent les traces

  • C:\Windows\System32\Tasks\ — un fichier XML par tâche (UTF-16LE, sans extension) : auteur, date d’enregistrement, déclencheurs, compte d’exécution, paramètres et actions (ligne de commande, gestionnaire COM).
  • SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache — Tree (chemins des tâches avec les valeurs Id, Index et SD) et Tasks\{GUID} (Path, Hash, Actions, Triggers et DynamicInfo avec les FILETIME de création et de dernière exécution).
  • C:\Windows\Tasks\*.job — tâches héritées du Planificateur de tâches 1.0 : application, paramètres, auteur, heure de dernière exécution.
  • Journaux associés (non analysés ici) : événements Security 4698–4702 lorsque l’audit de l’accès aux objets est activé, et Microsoft-Windows-TaskScheduler/Operational (106 enregistrée, 140 mise à jour, 141 supprimée, 200/201 action démarrée/terminée).

Ce que vérifie l’outil

  • Tâches masquées : une entrée Tree du TaskCache sans sa valeur SD (la technique « Tarrask ») — invisible pour schtasks et la console, mais toujours exécutée.
  • Fichiers supprimés ou déposés : tâches enregistrées sans fichier XML et fichiers XML sans enregistrement ; fichiers XML modifiés après l’enregistrement (hash du TaskCache) et actions du registre qui diffèrent du fichier.
  • Contenu suspect : PowerShell encodé (décodé pour vous), LOLBins, commandes dans des chemins réseau ou modifiables par l’utilisateur, privilèges SYSTEM ou les plus élevés pour des tâches non Microsoft, tâches non Microsoft masquées, noms d’apparence aléatoire et tâches enregistrées récemment.
  • Horodatages : date d’enregistrement, création dans le TaskCache, dernière exécution et dernière exécution réussie, bornes de début des déclencheurs et heures de dernière écriture des clés de registre, sur une chronologie unique et filtrable.

Limites

  • Les journaux de transactions du registre ne sont pas rejoués : une ruche « dirty » est signalée, mais les modifications encore présentes dans SOFTWARE.LOG1/LOG2 manquent.
  • Les valeurs binaires du TaskCache (DynamicInfo, Actions, Triggers) ne sont pas documentées ; leur structure provient de travaux publics de rétro-ingénierie. Seuls l’en-tête Triggers et le principal sont décodés, pas chaque enregistrement de déclencheur.
  • Les dates XML, les heures des déclencheurs et les heures des .job sont en heure locale sans fuseau ; le décalage est déduit lorsque c’est possible, et affiché.
  • Les clés de registre et les fichiers XML supprimés ne sont pas récupérés par carving ; c’est dans les journaux d’événements et les clichés instantanés de volume qu’il faut les chercher.

Comment obtenir les fichiers

  • Collectez C:\Windows\System32\Tasks (et C:\Windows\Tasks) ainsi que la ruche SOFTWARE avec KAPE (ScheduledTasks + RegistryHivesSystem), Velociraptor (Windows.Triage.Targets) ou reg save et une copie du dossier.
  • Conservez l’arborescence (…\Windows\System32\Tasks, …\Windows\System32\config\SOFTWARE) pour que les tâches soient rapprochées de la bonne ruche lorsqu’un ZIP contient plusieurs machines.
  • Collectez le dossier Tasks complet : les fichiers XML manquants ne sont signalés que lorsque la plupart des tâches enregistrées ont le leur.

FAQ

Mes fichiers sont-ils envoyés quelque part ?

Non. Le parseur — y compris ses lecteurs de registre et de XML — est écrit en Rust, compilé en WebAssembly, et s’exécute dans un Web Worker de votre navigateur. Il n’existe aucun point de téléversement.

Comment détecte-t-il les tâches masquées (Tarrask) ?

Le Planificateur de tâches ne liste une tâche que si sa clé TaskCache\Tree possède une valeur SD (descripteur de sécurité). Un logiciel malveillant disposant des droits SYSTEM peut supprimer cette valeur : la tâche disparaît de schtasks et de la console mais continue de s’exécuter. L’outil signale chaque clé Tree qui a un Id de tâche mais pas de SD, et affiche l’heure de dernière écriture de la clé.

Pourquoi faut-il à la fois le dossier Tasks et la ruche SOFTWARE ?

Chacun raconte la moitié de l’histoire. Le fichier XML est la définition lisible ; le TaskCache est ce que le Planificateur de tâches charge réellement. Les tâches enregistrées sans fichier XML, les fichiers jamais enregistrés, les XML modifiés après l’enregistrement et les actions du registre qui diffèrent du fichier n’apparaissent qu’en comparant les deux.

Pourquoi les heures sont-elles décalées ?

Windows écrit la date d’enregistrement et les heures des déclencheurs dans le XML des tâches en heure locale sans fuseau horaire, alors que les heures du TaskCache sont en UTC. L’outil déduit le décalage de la machine en comparant les deux pour les mêmes tâches, et vous pouvez le définir vous-même.

Une tâche signalée est-elle malveillante ?

Pas nécessairement. Les constats sont des pistes de triage : des outils de mise à jour tiers s’exécutent en tant que SYSTEM depuis ProgramData, certains outils d’administration utilisent du PowerShell encodé. Lisez l’explication de chaque constat et corroborez avec d’autres artefacts.

Pas à pas : chargez XML, fichiers .job et ruche SOFTWARE dans un parser gratuit, lisez tâches cachées et registre seul, corrigez le fuseau et exportez. Cas fictif.
Checklist pour repérer les tâches planifiées malveillantes : chemins inscriptibles, PowerShell encodé, LOLBins, SYSTEM, tâches cachées, écarts XML/registre.
Comment Tarrask cachait des tâches planifiées en supprimant la valeur SD de TaskCache, les variantes ACL de refus et Index, et la détection hors ligne.