Cache du Planificateur de tâches¶
Qu'est-ce que TaskCache¶
Le Planificateur de tâches de Windows conserve sous SOFTWARE un cache de Registre reliant les chemins des tâches à des GUID,
aux déclencheurs/listes, aux principaux de sécurité, aux actions, aux métadonnées d'exécution et aux descripteurs de sécurité. Juntei décode
les actions d'exécution et de gestionnaire COM, ainsi que les anciennes actions d'e-mail/de message, les horodatages des tâches et les indices
de tâches masquées dans l'interface normale du Planificateur de tâches.
Les tâches sont un mécanisme courant de persistance et d'exécution à distance. Le cache du Registre est également précieux lorsqu'un attaquant supprime ou altère le fichier XML de la tâche.
Meilleure conclusion : le TaskCache a configuré ou conservé la tâche/l'action. Les champs d'exécution et des journaux indépendants sont nécessaires pour prouver une exécution particulière.
Emplacements¶
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
C:\Windows\System32\Tasks\... (task XML/files; collect separately)
Collectez SOFTWARE avec ses journaux de transactions et l'arborescence complète de System32\Tasks. Les journaux d'événements
Operational du Planificateur de tâches et Security apportent des preuves de création/de mise à jour/d'exécution.
Précautions d'analyse¶
- Le cache du Registre et le XML de la tâche peuvent diverger après une altération, une suppression, une inscription incomplète ou des dommages.
- Le champ
Hiddende Juntei identifie un masquage structurel (absence de liaison Tree/de descripteur de sécurité dans les conditions pertinentes), et non simplement une tâche configurée avec l'indicateur d'interface « Masqué » habituel. - Windows 7 stocke les actions des tâches dans le XML plutôt que dans la valeur
Actionsdu cache ; une action vide n'y est donc pas automatiquement suspecte. LastRunetLastResultsont utiles, mais ne constituent pas un historique d'exécution complet et infalsifiable.Contextnomme le principal/contexte configuré, et non l'utilisateur qui a inscrit la tâche.- Les CLSID des gestionnaires COM nécessitent une résolution distincte dans le Registre/les fichiers.
Analyser avec Juntei¶
Usage: juntei parse-registry taskcache <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE hives
-f, --file <FILE> Parse one SOFTWARE hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--task <NAME> Full task path or final task name
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry taskcache -f SOFTWARE -o tasks.csv
juntei parse-registry taskcache -f SOFTWARE -t jsonl \
| jq 'select(.Hidden == true or (.Executable? | test("powershell|cmd|mshta"; "i")))'
Champs de sortie¶
| Champ | Interprétation |
|---|---|
Host, SourcePath |
Contexte de l'hôte et ruche SOFTWARE source. |
TaskName |
Chemin complet dans le planificateur. Pivot principal vers le XML et les journaux d'événements. |
TaskGUID |
GUID reliant les entrées Tree et Tasks du cache. Clé de corrélation solide. |
TaskIndex |
Métadonnées Tree/d'index utilisées par le planificateur ; élément de contexte, et non nombre d'exécutions. |
TaskLists |
Listes du cache (Boot, Logon, Plain, Maintenance) qui catégorisent le déclenchement/le traitement. |
Hidden |
Indicateur structurel de tâche masquée. Examinez InTree, InTasks et l'état du descripteur avant de conclure à une altération. |
InTree, InTasks |
Indiquent si les deux côtés du cache existent. Une liaison manquante peut indiquer une suppression/une altération/une inscription incomplète. |
HasSecurityDescriptor |
Indique si l'entrée Tree comporte SD ; son absence peut contribuer au masquage de la tâche sur les versions concernées. |
TreeKeyLastWrittenUTC, TaskKeyLastWrittenUTC |
Modifications au niveau des clés pour chaque côté du cache ; il ne s'agit pas des heures exactes de création/d'exécution. |
ActionIndex |
Action (numérotée à partir de zéro) au sein de la tâche. Une tâche peut produire plusieurs lignes. |
ActionType |
exec, com_handler, send_email ou show_message. |
Executable, Args, WorkingDirectory |
Action d'exécution effective. Interprétez les guillemets, les variables, les chemins relatifs et les LOLBins. |
COM-ClassID, ActionData |
CLSID et données du gestionnaire COM, ou charge utile d'un ancien e-mail/message. Résolvez le CLSID séparément. |
Context |
Contexte du principal encodé avec les actions (LocalSystem, Author, etc.) ; identité configurée, et non auteur de l'inscription. |
Author, URI, Description |
Métadonnées de la tâche. Facilement contrôlées par l'attaquant, elles ne constituent pas une preuve de confiance. |
LastRegisteredUTC |
Heure d'inscription/de mise à jour de DynamicInfo, lorsqu'elle est présente. |
LastRunUTC, LastSuccessfulRunUTC, LastResult |
Métadonnées d'exécution/de résultat mises en cache. Corrélez avec les journaux opérationnels et les preuves de processus. |
ActionsRaw |
Octets d'origine des actions si le décodage est incomplet ou si une validation est nécessaire. |
TransactionLogStatus, LogsApplied |
Contexte de récupération du Registre. |
Problems |
Incohérence chemin/GUID, type de valeur incorrect, structure d'action tronquée ou éléments manquants. |
Stratégie d'investigation¶
- Examinez d'abord les tâches masquées/incohérentes et les chemins non Microsoft.
- Reconstituez les commandes effectives, y compris les arguments, le répertoire de travail, l'expansion des variables d'environnement et la résolution COM.
- Comparez l'enregistrement du Registre avec le XML de la tâche, et calculez l'empreinte/relevez les horodatages de l'exécutable référencé.
- Corrélez
TaskName/le GUID/l'heure avec les événements du Planificateur de tâches, Security 4698/4702, les journaux de processus, Prefetch et la MFT/l'USN. - Recherchez dans les données de Registre supprimées/récupérées lorsqu'un attaquant a supprimé la tâche.