Aller au contenu

Persistance

Tâches planifiées

Fiche tâches planifiées : XML et .job, clés TaskCache, horodatages DynamicInfo, tâches masquées, événements TaskScheduler et 4698.

Emplacement
C:\Windows\System32\Tasks\<TaskName>
Prouve
Une tâche a été enregistrée pour lancer une commande, par qui, sa création et sa dernière exécution
Horodatages
Création et dernière exécution DynamicInfo en FILETIME, UTC ; LastWrite TaskCache, UTC ; Date RegistrationInfo du XML en ISO 8601, souvent sans fuseau
Rétention
Tâches persistantes jusqu'à suppression ; 4698 exige l'audit, le journal TaskScheduler Operational peut être désactivé ; rotation par taille
Accès
Administrateur ; XML des tâches copiables directement, ruche SOFTWARE (TaskCache) verrouillée à chaud : reg save, VSS ou NTFS brut
Type
Fichier / système de fichiers
Windows
XPVista / 78 / 8.11011
Cible KAPE
ScheduledTasksRegistryHivesSystemEventLogs
Velociraptor
Windows.Triage.Targets:ScheduledTasksRegistryHivesSystemEventLogs

Présentation

Le service Planificateur de tâches lance des programmes à heure fixe, au démarrage, à l'ouverture de session ou sur un événement. Les attaquants s'en servent pour la persistance, pour l'élévation de privilèges (une tâche peut tourner en SYSTEM) et pour le mouvement latéral, puisque schtasks /create /s <hôte> enregistre une tâche sur une machine distante.

Une tâche laisse des traces à trois endroits : son fichier de définition sur disque, des clés de registre TaskCache dans la ruche SOFTWARE et les journaux d'événements lorsque l'audit est actif. C'est en confrontant ces trois sources que l'on repère les tâches modifiées ou masquées.

Emplacement

Version de WindowsDéfinitions des tâchesRegistre (ruche SOFTWARE)Journaux
XP / Server 2003C:\Windows\Tasks\*.job (binaire, Task Scheduler 1.0)aucunC:\Windows\SchedLgU.txt (XP), C:\Windows\Tasks\SchedLgU.txt (2003)
Vista / 7 / 8 / 10 / 11C:\Windows\System32\Tasks\<dossier>\<NomTâche> (XML, sans extension)Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree et \TasksMicrosoft-Windows-TaskScheduler/Operational, Security

Des fichiers .job hérités peuvent encore apparaître dans C:\Windows\Tasks sur les versions récentes, surtout pour les tâches créées avec la commande obsolète at.exe (At1.job, At2.job…).

Organisation de TaskCache :

  • TaskCache\Tree\<chemin>\<NomTâche> : valeurs Id (GUID de la tâche), Index et SD (descripteur de sécurité).
  • TaskCache\Tasks\{GUID} : valeurs comme Path, Actions, Triggers, DynamicInfo, Author, Description, Date, URI.
  • TaskCache\Boot, Logon, Plain, Maintenance : listes de GUID qui classent les tâches par type de déclencheur.

Ce que l'artefact prouve

  • Persistance ou exécution programmée : une commande, ses arguments et le compte sous lequel elle tourne.
  • Qui l'a enregistrée : Author/UserId du XML, compte indiqué dans l'événement 106 et dans le 4698 du journal Security.
  • Quand : dates de création, de dernière exécution et de dernière réussite dans DynamicInfo, et événements d'exécution dans le journal Operational.
  • Elle ne prouve pas que l'action a réussi : confirmez avec l'événement 201 (code retour), le Prefetch ou les événements de création de processus. Les champs Author et Date du XML sont du texte libre, donc falsifiables.

Champs clés

ChampSignification
RegistrationInfo\Date, Author, URIDate d'enregistrement et auteur tels qu'écrits par le créateur (non fiables)
TriggersDéclencheurs horaire, démarrage, ouverture de session, inactivité ou événement ; intervalle de répétition
Principals\Principal (UserId, RunLevel)Compte utilisé et HighestAvailable pour une tâche élevée
Settings\HiddenMasque la tâche dans la console sauf si « Afficher les tâches masquées » est coché
Actions\Exec (Command, Arguments, WorkingDirectory)Programme lancé
Actions\ComHandler (ClassId)Objet COM exécuté à la place d'un programme ; résolvez le CLSID
Tree\...\SDDescripteur de sécurité ; s'il manque, la tâche disparaît de l'énumération
Tasks\{GUID}\DynamicInfoBinaire : date de création, dernière exécution, état, dernier code d'erreur et (sur les versions récentes) dernière exécution réussie

Horodatages

HorodatagePositionné quandFormatPièges
DynamicInfo création / dernière exécution / dernière réussiteLe service enregistre ou exécute la tâcheFILETIME, UTCLe champ « dernière réussite » manque sur les anciennes versions ; seule la dernière exécution est conservée
LastWrite des clés Tree et Tasks\{GUID}Tâche enregistrée ou modifiéeFILETIME, UTCBouge aussi lors des mises à jour : ce n'est pas une date de création pure
RegistrationInfo\Date du XMLÉcrit par l'outil de créationChaîne ISO 8601, souvent sans fuseau horairePeut être absent ou falsifié
Horodatages $SI du fichier XMLFichier créé ou réécritNTFS, UTCMis à jour à chaque modification de la tâche
Dernière exécution du .jobExécution par Task Scheduler 1.0SYSTEMTIME dans le fichierFormat de l'époque XP
Événements 106 / 140 / 141 / 200 / 201Enregistrement, mise à jour, suppression, début et fin d'actionEVTX, UTCSeulement si le canal est activé
Security 4698–4702Tâche créée, supprimée, activée, désactivée, mise à jourEVTX, UTCNécessite « Auditer d'autres événements d'accès à l'objet »

Rétention et effacement

  • Une tâche reste en place jusqu'à sa suppression. Supprimer une tâche efface le XML et les clés TaskCache ; il reste alors surtout le journal Operational (141) et le journal Security (4699), plus les traces de suppression dans le journal USN et les anciennes ruches SOFTWARE des clichés instantanés.
  • Le 4698 du journal Security exige « Auditer d'autres événements d'accès à l'objet », et le canal Operational de TaskScheduler peut être désactivé selon la version et la configuration (« Activer l'historique de toutes les tâches »). Vérifiez que le canal est actif et contient des événements avant d'interpréter un résultat vide.
  • Tâches masquées : le malware Tarrask supprimait la valeur SD sous TaskCache\Tree. La tâche disparaît alors de schtasks /query et de la console, mais continue de s'exécuter. Cette suppression exige les droits SYSTEM. Le fichier XML et la clé Tasks\{GUID} restent en place.
  • Les journaux tournent selon leur taille : sur un système chargé, le journal Operational peut ne couvrir que quelques jours ou semaines.

Collecte

  • Cible KAPE : ScheduledTasks (XML, .job, SchedLgU.txt, tâches planifiées PowerShell), plus RegistryHivesSystem pour TaskCache et EventLogs pour les canaux d'événements.
  • Velociraptor (Windows.Triage.Targets) : ScheduledTasks, RegistryHivesSystem, EventLogs. Analyse en direct : Windows.System.TaskScheduler (analyse les XML) et Windows.EventLogs.ScheduledTasks.
  • Commandes natives : les XML se copient directement ; la ruche SOFTWARE est verrouillée, passez par reg save ou un cliché instantané.
robocopy C:\Windows\System32\Tasks E:\case\Tasks /E /COPY:DAT /DCOPY:T
reg save HKLM\SOFTWARE E:\case\SOFTWARE.hiv
wevtutil epl Microsoft-Windows-TaskScheduler/Operational E:\case\TaskScheduler.evtx
schtasks /query /fo csv /v > E:\case\schtasks.csv

Outils d'analyse

  • Velociraptor : Windows.System.TaskScheduler liste les commandes et le contexte utilisateur à partir des XML ; Windows.EventLogs.ScheduledTasks regroupe les événements Operational et Security.
  • RegRipper : plugins taskcache et tasks (ruche SOFTWARE), avec leurs variantes _tln pour la chronologie.
  • winreg-tasks (G DATA, open source) : définitions Kaitai et scripts qui décodent Actions, Triggers et DynamicInfo.
  • TaskSchedulerView (NirSoft, gratuit) : liste graphique des tâches sur un système en direct.
  • EvtxECmd (Eric Zimmerman) : convertit en CSV les événements de tâches des journaux TaskScheduler et Security.
  • Plaso : parseur winjob pour les fichiers .job et plugin de registre windows_task_cache.

Conseils d'investigation

  • Comparez la liste des tâches issue de trois sources : fichiers XML, TaskCache\Tree et TaskCache\Tasks. Une entrée Tree sans SD, ou un GUID sans XML correspondant, mérite qu'on s'y arrête.
  • Signalez les actions qui pointent vers powershell.exe -enc, cmd.exe /c, rundll32.exe, mshta.exe, des scripts, ou des binaires situés dans \Users\, \ProgramData\ ou \Windows\Temp\.
  • Les noms de tâches imitent souvent ceux de Microsoft (\Microsoft\Windows\...\Update) : vérifiez l'auteur, le chemin et la signature du binaire plutôt que le nom.
  • Le 4698 du journal Security contient le XML complet de la tâche : il permet de retrouver la définition d'une tâche supprimée depuis.
  • Un enregistrement à distance se traduit par une ouverture de session réseau (type d'ouverture de session 3) sur la cible juste avant l'événement 106 ; corrélez dans les journaux d'événements.
  • Confirmez l'exécution par le Prefetch du binaire lancé, et vérifiez les services et WMI à la recherche d'une persistance parallèle.

Artefacts liés

Termes du glossaire

Guides

Tous les artefacts sur une page : aide-mémoire