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.
« 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 :
- Présence : un fichier existait à un emplacement (ShimCache sous Windows 10+, Amcache seul,
$MFT). - Exécution : un processus a été créé à partir de ce fichier (Prefetch, BAM, 4688, Sysmon 1, SRUM, WER).
- 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.exeourundll32.exe, la ligne de commande entre aussi dans le hachage : plusieurs.pfpour 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) etSizeFileId:0000suivi du SHA-1 (calculé sur les 30 premiers Mo pour les gros fichiers)Nameface àOriginalFileName: un outil renommé saute aux yeuxLinkDate: la date de compilation PE, fixée par le développeur et falsifiable, pas une date d'exécutionPublisher,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
ProcessGuidet 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
| Artefact | Prouve l'exécution ? | Sens de l'horodatage | Survit à la suppression du binaire ? | Versions de Windows |
|---|---|---|---|---|
| Prefetch | Oui | Jusqu'à 8 dernières exécutions (8+) ; création du .pf ≈ première exécution | Oui, jusqu'à éviction | XP+ ; désactivé par défaut sur Server |
| ShimCache | Win 7/8 : probable (indicateur). Win 10/11 : non | Date de modification $SI du fichier | Oui | XP+ |
| Amcache | Pas seule | Dernière écriture de la clé = inventorié ; LinkDate = compilation | Oui, avec SHA-1 | 7 (mises à jour), 8+ |
| BAM/DAM | Oui, par SID | Dernière exécution | Oui, environ 7 jours | 10 1709+, 11 |
| UserAssist | Oui, via l'Explorateur | Dernière exécution et compteur | Oui | 7+ (format différent sous XP) |
| MUICache | Probable, par utilisateur | Aucun par entrée (dernière écriture de la clé) | Oui | XP+ |
| SRUM | Oui, actif dans l'intervalle | Intervalle d'environ une heure | Oui, 30 à 60 jours | 8+ |
| PCA | Oui, lancements graphiques | Dernière exécution, UTC | Oui | 11 22H2+ |
| WER | Oui (il a planté) | Heure du plantage ; 1000 donne le démarrage | Oui | Vista+ |
| 4688 / Sysmon 1 | Oui | Création du processus | Jusqu'à rotation du journal | Audit 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.exeetsvchost.execachent 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, chaqueNTUSER.DATetUsrClass.dat,Amcache.hve(avec ses journaux),SRUDB.dat, le dossierpca, les dossiers WER et les journaux d'événements, y compris depuis les clichés instantanés - Vérifier
EnablePrefetcheret 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.