Aller au contenu

04 · Preuves d'exécution

Preuves d'exécution : Prefetch, Amcache, BAM et autres

Prouver qu'un programme a tourné sous Windows, pas seulement existé : Prefetch, ShimCache, Amcache, BAM, UserAssist, SRUM, PCA, WER et 4688 comparés.

Publié le Mis à jour le 11 min de lecture

« Ce programme a-t-il été exécuté ? » est l'une des questions les plus fréquentes en enquête, et l'une des plus faciles à trancher de travers. De nombreux artefacts Windows enregistrent des exécutables, mais ils ne veulent pas tous dire la même chose. Certains prouvent qu'un processus a été créé, d'autres qu'un utilisateur a lancé quelque chose depuis l'interface graphique, d'autres encore seulement qu'un fichier existait à un emplacement. Ce guide passe en revue les artefacts qui comptent, ce que chacun prouve réellement, ce que signifie son horodatage et comment les combiner pour aboutir à une conclusion défendable.

Présence ou exécution

Distinguez trois niveaux d'affirmation :

  1. Présence : un fichier existait à un emplacement (ShimCache sous Windows 10+, Amcache seul, $MFT).
  2. Exécution : un processus a été créé à partir de ce fichier (Prefetch, BAM, 4688, Sysmon 1, SRUM, WER).
  3. Exécution attribuée : un utilisateur précis l'a lancé à un moment précis (BAM par SID, UserAssist, MUICache, 4688 avec le compte à l'origine).

L'entrée de glossaire preuve d'exécution résume l'idée. Votre rapport doit préciser le niveau atteint par chaque constat. « Le binaire existait » et « l'utilisateur jdoe a exécuté le binaire à 14:07 UTC » sont deux conclusions très différentes.

Prefetch

Les fichiers Prefetch se trouvent dans C:\Windows\Prefetch sous la forme <NOMEXE>-<HASH>.pf. Windows en crée un lorsqu'un programme est exécuté, trace les fichiers chargés pendant ses premières secondes, puis le met à jour à chaque nouveau lancement. Prefetch est donc, sur les postes de travail, l'indicateur fichier le plus fort d'une exécution.

Chaque fichier contient :

  • Le nom de l'exécutable et un hachage de son chemin (pour les processus hôtes comme svchost.exe, dllhost.exe ou rundll32.exe, la ligne de commande entre aussi dans le hachage : plusieurs .pf pour un même nom sont normaux)
  • Un compteur d'exécutions
  • La dernière date d'exécution sous XP et 7, et jusqu'à huit dernières dates depuis Windows 8
  • Les fichiers et répertoires référencés au lancement, qui trahissent souvent une charge utile ou un dossier de préparation

La date de création du .pf lui-même donne une bonne approximation de la première exécution, à une dizaine de secondes près. Windows 10 et 11 compressent les fichiers Prefetch (format MAM) : PECmd doit donc tourner sous Windows 8 ou plus récent pour les décompresser.

Limites : Prefetch est actif par défaut sur les postes de travail mais désactivé par défaut sur Windows Server. Vérifiez la valeur EnablePrefetcher sous SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters (0 = désactivé, 3 = applications et démarrage) au lieu de supposer. Le dossier conserve 128 entrées sous XP et 7, 1 024 depuis Windows 8 ; les plus anciennes disparaissent.

# Parser tout le dossier Prefetch en CSV (avec un CSV chronologique par exécution)
PECmd.exe -d C:\Windows\Prefetch --csv .\out --csvf prefetch.csv

# Parser un seul fichier, sortie détaillée
PECmd.exe -f C:\Windows\Prefetch\CALC.EXE-DEADBEEF.pf

# Mettre en évidence les Prefetch d'un triage qui mentionnent un mot-clé
PECmd.exe -d D:\triage\C\Windows\Prefetch -k "temp,public" --csv .\out

ShimCache (AppCompatCache)

L'Application Compatibility Cache se trouve dans la ruche SYSTEM, sous ControlSet00x\Control\Session Manager\AppCompatCache. Le moteur de compatibilité s'en sert pour décider si un exécutable a besoin d'un shim. Voir la fiche ShimCache.

Ce qu'il apporte :

  • Le chemin complet de l'exécutable, même après suppression
  • La date de dernière modification du fichier, copiée depuis son attribut $STANDARD_INFORMATION. Ce n'est pas une date d'exécution
  • L'ordre des entrées : la position 0 est l'entrée insérée ou mise à jour le plus récemment, ce qui donne une séquence approximative

Sous Windows 10 et 11, ShimCache ne prouve pas l'exécution. Des entrées sont ajoutées quand l'Explorateur ou un autre processus examine un exécutable, par exemple à l'affichage d'un dossier, et les parseurs courants n'exposent aucun indicateur d'exécution sur ces versions. Certains travaux suggèrent qu'une valeur des données de l'entrée pourrait être corrélée à l'exécution sur les versions récentes ; tant que ce n'est pas largement validé, ce n'est au mieux qu'un élément de corroboration. Sous Windows 7 et 8, un indicateur d'insertion positionné à la création du processus fait d'une entrée un meilleur indice d'exécution.

Le cache vit en mémoire et n'est écrit dans le registre qu'à l'arrêt ou au redémarrage. Sur une machine qui n'a pas redémarré depuis l'incident, les entrées les plus récentes n'existent qu'en RAM ou dans hiberfil.sys.

# Parser une ruche SYSTEM exportée (tous les jeux de contrôle)
AppCompatCacheParser.exe -f D:\triage\C\Windows\System32\config\SYSTEM --csv .\out --csvf shimcache.csv

# Parser le cache du système en cours d'exécution
AppCompatCacheParser.exe --csv .\out --csvf shimcache_live.csv

Amcache

C:\Windows\AppCompat\Programs\Amcache.hve est une ruche de registre autonome, tenue par les tâches d'inventaire Application Experience. Elle catalogue exécutables, programmes installés, pilotes et périphériques. Son atout majeur est l'empreinte SHA-1 de chaque fichier inventorié, qui survit à la suppression du binaire. Voir la fiche Amcache.

Sous Windows 10 et 11, Root\InventoryApplicationFile contient pour chaque fichier :

  • LowerCaseLongPath (chemin complet) et Size
  • FileId : 0000 suivi du SHA-1 (calculé sur les 30 premiers Mo pour les gros fichiers)
  • Name face à OriginalFileName : un outil renommé saute aux yeux
  • LinkDate : la date de compilation PE, fixée par le développeur et falsifiable, pas une date d'exécution
  • Publisher, Version, ProgramId

La nuance : Amcache est écrite par des passes d'inventaire (le Microsoft Compatibility Appraiser et les tâches associées) autant que lors des exécutions. Des travaux comme l'analyse de l'ANSSI de 2019 ont montré que des entrées apparaissent pour des fichiers jamais exécutés. Une entrée Amcache seule prouve donc la présence, et la date de dernière écriture de la clé signifie « inventorié par Windows à », souvent proche de la première exécution mais sans garantie. Sur Windows 8 et les premières versions de Windows 10 (structure Root\File), les entrées sont plus étroitement liées à l'exécution, mais il faut tout de même corroborer.

# Parser Amcache (rejouer les journaux .LOG1/.LOG2 s'ils sont présents à côté)
AmcacheParser.exe -f D:\triage\C\Windows\AppCompat\Programs\Amcache.hve --csv .\out -i

L'option -i inclut les entrées de fichiers rattachées à des programmes installés, ignorées par défaut.

BAM et DAM

Le Background Activity Moderator, apparu avec Windows 10 1709, enregistre la dernière date d'exécution des exécutables pour chaque SID dans la ruche SYSTEM, sous Services\bam\State\UserSettings\<SID> (1809 et suivantes) ou Services\bam\UserSettings\<SID> (1709 à 1803). DAM tient une liste similaire sous Services\dam. Voir la fiche BAM/DAM.

BAM est l'un des rares artefacts d'exécution rattachés à un identifiant de sécurité, ce qui en fait un excellent outil d'attribution. Ses limites : une seule date (la dernière), aucun compteur, et les entrées de plus de sept jours environ sont purgées au démarrage. Les chemins sont en notation de périphérique (\Device\HarddiskVolume3\...), à convertir en lettres de lecteur.

# Extraire BAM avec RECmd et le fichier batch Kroll (couvre aussi UserAssist, MUICache, etc.)
RECmd.exe -d D:\triage\C --bn .\BatchExamples\Kroll_Batch.reb --csv .\out --csvf registry.csv

UserAssist

Les clés UserAssist du NTUSER.DAT de chaque utilisateur, sous Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count, enregistrent les programmes et raccourcis lancés via l'Explorateur : menu Démarrer, bureau, double-clic. Les noms de valeurs sont des chemins encodés en ROT13 ; les données contiennent un compteur d'exécutions, un compteur de focus, une durée de focus et la dernière date d'exécution. Le GUID {CEBFF5CD-...} suit les exécutables, {F4E57C4B-...} les raccourcis. Voir la fiche UserAssist.

UserAssist prouve une exécution graphique par cet utilisateur. Les programmes lancés depuis cmd.exe, PowerShell, un service ou une tâche planifiée n'y figurent pas : son absence ne prouve donc pas grand-chose.

MUICache

MUICache, stocké dans UsrClass.dat sous Local Settings\Software\Microsoft\Windows\Shell\MuiCache, conserve le FriendlyAppName et l'ApplicationCompany des exécutables dont le shell a résolu le nom d'affichage, généralement parce que l'utilisateur les a lancés. Il garde le chemin complet et survit à la suppression, mais n'a pas d'horodatage par entrée. C'est un élément d'appui rattaché à un utilisateur.

SRUM

La base System Resource Usage Monitor, C:\Windows\System32\sru\SRUDB.dat (Windows 8 et suivants), est une base ESE qui enregistre la consommation de ressources par application et par utilisateur : temps CPU, octets lus et écrits, octets envoyés et reçus sur le réseau. Les enregistrements sont écrits environ toutes les heures et conservés en général de 30 à 60 jours. Voir la fiche SRUM.

Un enregistrement SRUM prouve que l'application tournait pendant cet intervalle et consommait des ressources : précieux pour l'exfiltration (un processus inconnu qui a envoyé 4 Go) et pour les programmes dont les autres traces ont été effacées. L'horodatage correspond à l'intervalle, pas au lancement.

# Parser SRUM ; la ruche SOFTWARE sert à résoudre les noms d'interfaces réseau
SrumECmd.exe -f D:\triage\C\Windows\System32\sru\SRUDB.dat -r D:\triage\C\Windows\System32\config\SOFTWARE --csv .\out

Copiez la base avec ses fichiers .log et .chk ; si elle n'a pas été fermée proprement, réparez une copie avec esentutl /r sru /i puis esentutl /p avant le parsing, jamais l'original.

Program Compatibility Assistant (Windows 11 22H2+)

Depuis Windows 11 22H2, le service PCA écrit C:\Windows\appcompat\pca\PcaAppLaunchDic.txt : une ligne par exécutable, chemin|dernière exécution, en UTC. Les travaux de Sygnia ont montré qu'il enregistre les lancements via l'interface graphique (y compris dans une session RDP), mais pas ceux faits depuis une ligne de commande, une tâche planifiée ou PsExec. PcaGeneralDb0.txt et PcaGeneralDb1.txt ajoutent les arrêts anormaux et les échecs d'installation. Voir la fiche PCA.

Import-Csv C:\Windows\appcompat\pca\PcaAppLaunchDic.txt -Delimiter '|' -Header Path,LastRunUtc |
  Sort-Object LastRunUtc -Descending | Select-Object -First 30

Windows Error Reporting

Les implants instables, les exploits et les outils de vol d'identifiants plantent. Dans ce cas, Windows Error Reporting écrit un Report.wer sous C:\ProgramData\Microsoft\Windows\WER\ReportArchive ou ReportQueue (et leurs équivalents par utilisateur), avec AppPath, EventTime, les modules chargés et, pour de nombreux rapports Windows 10+, le SHA-1 dans TargetAppId. L'événement Application 1000 enregistre le chemin du processus fautif et son heure de démarrage. Un rapport de plantage prouve que le programme a tourné ; son absence ne prouve rien.

Get-ChildItem C:\ProgramData\Microsoft\Windows\WER -Recurse -Filter Report.wer |
  Select-String -Pattern '^AppPath=' | Select-Object Path, Line

Journaux d'événements : 4688 et Sysmon 1

Quand ils sont activés, les journaux fournissent les traces d'exécution les plus riches :

  • Security 4688 (création de processus) nécessite la stratégie « Auditer la création du processus ». La ligne de commande n'est journalisée que si le paramètre « Inclure la ligne de commande dans les événements de création de processus » est aussi activé. L'événement donne le compte à l'origine, le chemin du nouveau processus, le processus parent et le type d'élévation du jeton.
  • L'événement Sysmon 1 ajoute les empreintes, la ligne de commande du parent, le ProcessGuid et le niveau d'intégrité.

Les deux sont soumis à la rotation et à l'effacement des journaux. Voir la fiche journaux d'événements et le guide des journaux d'événements.

# N'extraire que les événements de création de processus
EvtxECmd.exe -f D:\triage\C\Windows\System32\winevt\Logs\Security.evtx --csv .\out --csvf 4688.csv --inc 4688
EvtxECmd.exe -f "D:\triage\C\Windows\System32\winevt\Logs\Microsoft-Windows-Sysmon%4Operational.evtx" --csv .\out --csvf sysmon.csv --inc 1

Tableau comparatif

ArtefactProuve l'exécution ?Sens de l'horodatageSurvit à la suppression du binaire ?Versions de Windows
PrefetchOuiJusqu'à 8 dernières exécutions (8+) ; création du .pf ≈ première exécutionOui, jusqu'à évictionXP+ ; désactivé par défaut sur Server
ShimCacheWin 7/8 : probable (indicateur). Win 10/11 : nonDate de modification $SI du fichierOuiXP+
AmcachePas seuleDernière écriture de la clé = inventorié ; LinkDate = compilationOui, avec SHA-17 (mises à jour), 8+
BAM/DAMOui, par SIDDernière exécutionOui, environ 7 jours10 1709+, 11
UserAssistOui, via l'ExplorateurDernière exécution et compteurOui7+ (format différent sous XP)
MUICacheProbable, par utilisateurAucun par entrée (dernière écriture de la clé)OuiXP+
SRUMOui, actif dans l'intervalleIntervalle d'environ une heureOui, 30 à 60 jours8+
PCAOui, lancements graphiquesDernière exécution, UTCOui11 22H2+
WEROui (il a planté)Heure du plantage ; 1000 donne le démarrageOuiVista+
4688 / Sysmon 1OuiCréation du processusJusqu'à rotation du journalAudit ou Sysmon requis

Corréler les preuves

Un enchaînement typique : ShimCache et Amcache montrent que C:\Users\Public\svch0st.exe existait, avec un SHA-1 Amcache connu du renseignement sur la menace. Prefetch confirme quatre exécutions et les date. BAM attribue la dernière au SID d'un compte compromis. SRUM montre que le processus a envoyé 2,3 Go sur le réseau dans l'heure suivante. La $MFT donne la date de création du fichier, et les ouvertures de session 4624 du journal Security expliquent comment le compte a été utilisé. Chaque étape s'appuie sur une source indépendante.

Si Prefetch est désactivé ou vidé, appuyez-vous sur BAM, Amcache, PCA, SRUM et 4688. Si les journaux ont été effacés, appuyez-vous sur les artefacts fichiers. Le guide sur l'anti-forensique explique comment repérer les trous volontaires, et construire une super timeline montre comment aligner toutes ces sources.

Pièges à éviter

  • Lire l'heure ShimCache comme une heure d'exécution. C'est la date de modification du fichier, que le timestomping peut altérer.
  • Prendre une présence Amcache ou ShimCache pour une exécution sous Windows 10 et 11.
  • Conclure « jamais exécuté » faute de Prefetch sur un serveur, ou après qu'un outil de nettoyage a vidé le dossier.
  • Ignorer les processus hôtes. Les Prefetch de rundll32.exe et svchost.exe cachent la vraie charge dans la liste des fichiers référencés.
  • Rater les entrées ShimCache les plus récentes parce que la machine n'a jamais redémarré et que la mémoire n'a pas été capturée.
  • Oublier la fenêtre de sept jours de BAM et le fait qu'il ne garde que la dernière exécution.
  • Croire qu'UserAssist ou PCA voient tout. Ni l'un ni l'autre ne capte les exécutions en ligne de commande ou à distance.
  • Mélanger les fuseaux horaires. Tous ces artefacts stockent de l'UTC ; certains outils affichent l'heure locale par défaut.

Liste de contrôle

  • Collecter Prefetch, SYSTEM, SOFTWARE, chaque NTUSER.DAT et UsrClass.dat, Amcache.hve (avec ses journaux), SRUDB.dat, le dossier pca, les dossiers WER et les journaux d'événements, y compris depuis les clichés instantanés
  • Vérifier EnablePrefetcher et la stratégie d'audit avant d'interpréter une absence
  • Parser avec PECmd, AppCompatCacheParser, AmcacheParser, RECmd, SrumECmd et EvtxECmd
  • Pour chaque binaire suspect, noter séparément présence, exécution et attribution
  • Confronter chaque empreinte issue d'Amcache et de WER au renseignement sur la menace
  • Corroborer chaque affirmation d'exécution par au moins deux artefacts indépendants
  • Donner les horodatages en UTC et le sens de chacun dans le rapport

Chaque artefact ci-dessus dispose d'une fiche d'une page avec ses emplacements selon la version de Windows, liée depuis sa section, ainsi que RecentFileCache pour Windows 7 et l'aide-mémoire des artefacts imprimable.

Domaine 04

Preuves d'exécution

Les fiches artefacts derrière ce guide : emplacement selon la version de Windows, ce que prouve chacun et les outils pour l'analyser.

Articles liés