BAM vs Prefetch vs ShimCache vs Amcache : lequel croire ?
Comparatif des preuves d'exécution Windows : ce qu'enregistrent BAM, Prefetch, ShimCache et Amcache, combien de temps ils le gardent, et comment les combiner.
TL;DR. BAM répond à quel compte a lancé un programme et quand, récemment. Prefetch répond à combien de fois et ce qu'il a chargé. Amcache répond à quel fichier exactement (SHA-1). La ShimCache répond à ce chemin existait-il sur le disque. Aucun ne répond à tout, et chacun échoue à sa manière — BAM oublie au bout d'une semaine et ignore USB et réseau, Prefetch peut être désactivé, la ShimCache n'est écrite qu'à l'arrêt, une présence dans Amcache ne vaut pas toujours exécution. Traitez-les comme des témoins croisés.
C'est la comparaison à laquelle nous revenons sans cesse quand nous rédigeons des preuves d'exécution sous Windows 10 et 11. Pour BAM lui-même, voyez le guide complet BAM/DAM ; pour la comparaison par utilisateur avec UserAssist, voyez BAM vs UserAssist.
En un coup d'œil
| BAM / DAM | Prefetch | ShimCache | Amcache | |
|---|---|---|---|---|
| Emplacement | Ruche SYSTEM, Services\bam\State\UserSettings\<SID> | C:\Windows\Prefetch\*.pf | Ruche SYSTEM, Control\Session Manager\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| Par utilisateur ? | Oui (clé SID) | Non | Non | Non |
| Horodatages | Dernière activité enregistrée (1) | Jusqu'à 8 dernières exécutions (Win 8+), compteur | Date de modification du fichier, pas d'exécution | Heures d'écriture des clés/entrées ; pas une vraie « heure d'exécution » |
| Identité du fichier | Chemin seulement | Nom + hash du chemin, numéro de série du volume | Chemin (+ taille sur certaines versions) | SHA-1, taille, version, éditeur |
| Rétention | ~7 jours, purge au démarrage | Nombre limité de fichiers .pf ; les plus anciens remplacés | Taille de cache limitée ; les plus anciens évincés | Longue |
| Écrit | Au lancement/à la fin du processus | Peu après le lancement (premières secondes surveillées) | Seulement à l'arrêt | Par les tâches d'inventaire |
| Angle mort | USB, partages réseau, outils console en ligne de commande | Machines où Prefetch est désactivé | Session récente sans arrêt propre | Dépend des passes d'inventaire |
| Analyse | BAM/DAM Parser | Prefetch Parser | ShimCache Parser | Amcache Parser |
Sources : BAM — Suhanov, BAM internals ; Prefetch — documentation du format libscca ; ShimCache — Mandiant, Caching Out ; Amcache — ANSSI, Analysis of the AmCache.
(1) Mise à jour à la création et à la fin du processus, d'après Suhanov.
Là où BAM l'emporte
L'attribution. C'est le seul artefact du tableau qui associe un SID à l'exécution. Quand la question est « le compte de service ou l'utilisateur ? », BAM tranche — voir l'attribution BAM à un utilisateur.
La précision de la dernière exécution. Un FILETIME à 100 ns écrit au moment de l'activité du processus, contre les horodatages de Prefetch (précis aussi, mais globaux au système) ou la date de modification de fichier de la ShimCache, qui n'est pas du tout une heure d'exécution.
L'indépendance vis-à-vis de Prefetch. Prefetch dépend du réglage EnablePrefetcher et est souvent indisponible sur les serveurs (pourquoi Prefetch manque souvent sous Windows Server). BAM ne dépend pas de ce réglage — mais sur les builds Server, vérifiez d'abord que BAM est bien présent (BAM selon les versions de Windows).
Le coût de collecte. Il est dans la ruche SYSTEM que vous collectez de toute façon.
Là où BAM perd
La mémoire. Environ une semaine, purge au démarrage ; les entrées des exécutables supprimés disparaissent au démarrage suivant (limites). Prefetch et Amcache peuvent remonter bien plus loin.
La couverture. Aucune entrée pour les exécutables situés sur supports amovibles ou partages réseau, et des programmes console lancés en ligne de commande ont été observés sans entrée. Prefetch enregistre bien les programmes lancés depuis un volume amovible — ses informations de volume montrent alors un numéro de série qui n'est pas celui du disque système —, ce qui en fait le complément naturel.
L'identité. Le chemin seulement. Un outil renommé passe inaperçu en tant que tel ; le SHA-1 d'Amcache l'identifie.
La profondeur. Un seul horodatage. Prefetch donne jusqu'à huit heures d'exécution, un compteur et la liste des fichiers et dossiers touchés par le programme dans ses premières secondes — souvent de quoi voir quelles DLL ou quels documents il a ouverts.
Lire les combinaisons
| BAM | Prefetch | Amcache | ShimCache | Scénario probable |
|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | Exécuté, identifié, attribué. La position la plus solide. |
| ✓ | — | ✓ | ✓ | Exécuté sous cet utilisateur ; Prefetch désactivé ou nettoyé. Vérifiez EnablePrefetcher et les horodatages du dossier Prefetch. |
| — | ✓ | ✓ | ✓ | Exécuté, mais BAM n'a rien : plus d'une semaine et redémarrage, lancement depuis USB/partage, lancement console en ligne de commande, ou suppression avant un redémarrage. |
| ✓ | — | — | — | Exécution récente, identité du fichier inconnue. Obtenez le fichier ou son hash ailleurs. |
| — | — | — | ✓ | Le fichier était sur le disque ; l'exécution n'est pas démontrée. La ShimCache seule ne prouve pas l'exécution sous Windows 10+. |
| — | — | ✓ | — | L'inventaire a vu le fichier ; l'exécution doit être corroborée (l'étude de l'ANSSI discute des cas où une entrée Amcache implique ou non une exécution). |
Les journaux d'événements : le cinquième témoin
Les événements de création de processus apportent la ligne de commande et le processus parent qu'aucun des quatre artefacts ne possède :
- Sécurité 4688 — seulement si « Auditer la création de processus » est activé, et la ligne de commande seulement si la stratégie complémentaire l'est aussi (Microsoft Learn).
- Sysmon événement 1 — si Sysmon est déployé (Sysmon).
Analysez-les avec EVTX Parser et joignez sur le chemin et l'heure. L'attribution de BAM plus la ligne de commande du 4688 : c'est la paire qui clôt la plupart des débats.
Un ordre de travail pratique
- BAM d'abord — c'est petit, par utilisateur, et cela vous dit sur quels comptes vous concentrer.
- Prefetch — pour les compteurs, les exécutions plus anciennes et les outils console que BAM a manqués.
- Amcache — les hash de chaque chemin suspect issu des étapes 1 et 2.
- ShimCache — les chemins qui existaient mais sans exécution visible ailleurs (déposés, jamais lancés, ou lancés depuis un endroit que BAM ignore).
- Journaux d'événements, SRUM, journal USN — lignes de commande, usage réseau, création et suppression de fichiers.
Questions fréquentes
BAM est-il meilleur que Prefetch ?
Aucun n'est meilleur : ils répondent à des questions différentes. BAM attribue l'exécution à un compte utilisateur avec un seul horodatage récent. Prefetch est global au système mais conserve un compteur d'exécutions, jusqu'à huit heures d'exécution et les fichiers chargés par le programme. Utilisez les deux quand vous le pouvez.
Quel artefact Windows montre quel utilisateur a lancé un programme ?
Parmi les artefacts d'exécution classiques, BAM/DAM (clés par SID dans SYSTEM) et UserAssist (dans le NTUSER.DAT de chaque utilisateur) sont par utilisateur. Prefetch, ShimCache et Amcache sont globaux au système.