Amcache vs Prefetch : ce que chacun prouve vraiment

Amcache et Prefetch sont tous deux des artefacts Windows qui vous disent quels binaires ont été présents sur un hôte. Ils sont constamment confondus, et cette confusion produit des conclusions fausses. Cette page est le guide pratique sur ce que chacun prouve vraiment et quand utiliser lequel.

La différence phare, d'emblée :

Prefetch prouve l'exécution. Amcache prouve la présence.

Pour la référence Amcache plus large, voir la référence complète Amcache. Pour la structure de fichier, voir Structure du registre Amcache.


Ce que chacun enregistre#

Prefetch#

Un répertoire de fichiers .pf (C:\Windows\Prefetch\) maintenu par le sous-système Prefetcher. Chaque fichier est créé la première fois qu'un binaire est exécuté, et mis à jour lors des exécutions suivantes. Chaque fichier .pf contient :

  • Le nom et le hash de l'exécutable.
  • Jusqu'à 8 horodatages d'exécution (10 sur Windows 11) — runs réels.
  • Un compteur d'exécutions.
  • Une liste des fichiers chargés par l'exécutable pendant ses 10 premières secondes d'exécution.
  • Une liste des volumes référencés.

Prefetch existe parce que Windows utilise les données de fichiers chargés pour pré-cacher ces fichiers avant la prochaine exécution du binaire, accélérant le temps de lancement. La valeur forensique est un effet de bord : l'existence d'un .pf est la preuve que le binaire s'est exécuté.

Amcache#

Une seule ruche du registre (C:\Windows\AppCompat\Programs\Amcache.hve) alimentée par la tâche planifiée Compatibility Appraiser. L'appraiser parcourt le système périodiquement (environ chaque jour sur les postes de travail) et inventorie chaque binaire PE qu'il trouve, en enregistrant :

  • Chemin complet, taille, hash SHA-1 des 31 premiers Mio.
  • Métadonnées PE (éditeur, version, date de link, langue).
  • Contexte par application (ProgramId, date d'installation).
  • Contexte par pilote et par périphérique pour les catégories pertinentes.

Amcache existe pour soutenir l'infrastructure de télémétrie de compatibilité de Windows. La valeur forensique est, à nouveau, un effet de bord.


La différence fondamentale#

Question Prefetch Amcache
« Ce binaire s'est-il exécuté sur cet hôte ? » Oui — définitif. Non.
« Ce binaire a-t-il jamais été sur disque ? » Pas directement (seulement s'il a tourné). Oui.
« Quand s'est-il exécuté ? » Oui — jusqu'à 8/10 horodatages par binaire. Non.
« Quel est son SHA-1 ? » Hash existe mais c'est un Prefetch hash, pas SHA-1. Oui — SHA-1 des 31 premiers Mio.
« Quel est son chemin complet ? » Récupérable. Oui — directement.
« Survit-il à la suppression ? » Le .pf survit à la suppression du binaire. L'entrée de ruche survit à la suppression du binaire.
« Survit-il au reboot système ? » Oui. Oui.
« Survit-il à l'effacement direct de l'artefact ? » Non — les fichiers .pf peuvent être supprimés. Non — la ruche peut être supprimée (mais les journaux de transactions et VSS préservent souvent).

Les deux artefacts répondent à des questions différentes. Là où ils se recoupent (même fichier, même hôte, même fenêtre temporelle), ils se corroborent mutuellement. Là où ils divergent, la divergence est elle-même une information.


Comment ils se recoupent et divergent#

Les deux présents (le cas typique)#

Un binaire s'exécute, le Prefetcher crée un .pf, et l'appraiser l'inventorie à son prochain passage. Vous voyez le binaire dans les deux artefacts. Le Prefetch vous dit les heures d'exécution ; l'Amcache vous dit le chemin, l'éditeur, le hash et les métadonnées.

Amcache seul — « présent mais jamais exécuté »#

Vous trouvez un binaire dans *_UnassociatedFileEntries.csv sans .pf correspondant. Raisons possibles :

  • Le binaire a été placé sur disque mais jamais exécuté.
  • Le binaire a été exécuté mais Prefetch est désactivé (rare — la clé du registre PrefetchParameters contrôle cela).
  • Le binaire a été exécuté une fois mais le .pf a été supprimé (anti-forensique, nettoyage de disque, suppression intentionnelle).

La lecture « présent mais jamais exécuté » est la plus courante, et c'est un constat très différent d'« exécuté ». Un outil attaquant en place mais jamais lancé, une DLL déposée qui n'a été chargée que par rundll32.exe (auquel cas le .pf de rundll32.exe se met à jour à la place), un payload en attente d'un déclencheur qui n'est jamais venu.

Prefetch seul — « exécuté mais pas d'inventaire »#

Vous trouvez un .pf pour un binaire, mais aucune ligne dans Amcache. Raisons possibles :

  • Le binaire s'est exécuté entre passages de l'appraiser et a été supprimé avant le passage suivant. Le Prefetch a survécu ; Amcache n'a jamais vu le fichier.
  • Le binaire vit dans un chemin que l'appraiser ne scanne pas.
  • L'appraiser est désactivé ou dysfonctionne.

La lecture « exécuté mais pas d'inventaire » est le signal plus fort d'un nettoyage délibéré. Le binaire a vécu assez longtemps pour s'exécuter, puis a disparu avant le passage d'inventaire suivant. Ce timing est caractéristique de :

  • Stagers C2 Cobalt Strike / Sliver / similaires qui déposent, exécutent et s'auto-suppriment.
  • Outillage en mémoire qui n'a écrit qu'un minuscule launcher sur disque très brièvement.
  • Déploiement de wiper où l'opérateur a retiré le dropper après exécution réussie.

Les deux absents — « jamais vu »#

Un binaire n'apparaît ni dans Prefetch ni dans Amcache. Le cas le plus fort pour « cela n'est jamais arrivé sur cet hôte » — mais pas concluant :

  • Les deux artefacts peuvent être effacés par un attaquant suffisamment capable.
  • Un binaire qui ne s'est jamais exécuté et a été inventorié dans une brève fenêtre entre passages de l'appraiser peut être absent des deux même dans des circonstances bénignes.
  • Sur les serveurs avec appraiser désactivé, Amcache peut être entièrement vide pendant certaines périodes.

Différences de hashing#

Un piège qui attrape les nouveaux analystes :

  • Prefetch hash est un hash de chemin spécifique à Windows (pas un hash de contenu). Il est dans le nom de fichier .pf : NOTEPAD.EXE-1A2B3C4D.pf. Vous ne pouvez pas le soumettre à VirusTotal.
  • Amcache hash est un vrai SHA-1 des 31 premiers Mio. Vous pouvez le soumettre directement à VirusTotal. Voir FileId Amcache expliqué.

Pour obtenir un hash de contenu depuis Prefetch, vous avez besoin du binaire lui-même — le fichier .pf ne contient ni le binaire ni un hash de contenu.


Comment les combiner dans une timeline#

La bonne façon d'utiliser les deux :

  1. Analyser les deux. AmcacheParser pour Amcache ; PECmd (aussi Zimmerman) pour Prefetch.
  2. Charger les deux CSVs dans Timeline Explorer. Filtrer Prefetch à la fenêtre temporelle d'intérêt du *_UnassociatedFileEntries.csv de l'hôte.
  3. Trier depuis Amcache. Appliquer le filtre « PE non signé dans chemin inscriptible par l'utilisateur » pour faire ressortir les binaires suspects.
  4. Confirmer l'exécution via Prefetch. Pour chaque ligne suspecte, vérifier si un .pf existe. Si oui, vous avez la preuve d'exécution. Si non, vous n'avez que la présence.
  5. Recroiser les horodatages. Prefetch donne des heures d'exécution précises ; le KeyLastWriteTimestamp d'Amcache donne une heure d'inventaire qui borne le moment où le binaire est apparu pour la première fois. Le plus tôt entre « premier run Prefetch » et « premier inventaire Amcache » est votre meilleure estimation du moment où le binaire est arrivé.

Pour en savoir plus sur le pivot Amcache borné dans le temps, voir Horodatages Amcache expliqués.


Table de décision rapide#

Votre question Regardez…
Ce binaire s'est-il jamais exécuté sur cet hôte ? Prefetch.
Quand ce binaire s'est-il exécuté ? Prefetch (jusqu'à 8/10 fois).
Ce binaire était-il présent sur cet hôte ? Amcache.
Quel est son hash SHA-1 ? Hash Amcache.
Quel était son chemin complet ? FullPath Amcache (ou récupérer depuis les métadonnées Prefetch).
S'est-il exécuté plusieurs fois ? Compteur de runs Prefetch.
Quels autres fichiers a-t-il chargés à l'exécution ? Liste des fichiers chargés Prefetch.
Le binaire est-il encore sur disque ? Vérification système de fichiers ; Amcache ne le dit pas.
Le contenu du binaire a-t-il changé dans le temps ? Amcache (lignes avec le même FullPath, Hash différent, KeyLastWriteTimestamp différent).
Ce binaire est-il présent sur d'autres hôtes ? Hash et ProgramId Amcache à travers les ruches collectées.

Implications anti-forensiques#

Les deux artefacts peuvent être manipulés, mais ils ont des faiblesses différentes :

  • Prefetch est par-fichier. Un attaquant qui veut nettoyer après un binaire spécifique n'a qu'à supprimer le .pf de ce binaire. Facile et ciblé.
  • Amcache est monolithique. Nettoyer une entrée spécifique nécessite d'éditer la ruche en place — possible, mais plus impliquant que supprimer un fichier. Beaucoup d'attaquants se contentent de supprimer toute la ruche, ce qui est bruyant (l'appraiser la recrée) et forensiquement évident.
  • Les journaux de transactions et VSS préservent l'historique Amcache que l'attaquant peut ne pas avoir pensé à nettoyer. Voir Où se trouve Amcache.hve sur disque pour le workflow de récupération VSS.

Dans une enquête où vous suspectez du sabotage, l'absence des entrées attendues dans les deux artefacts est elle-même le constat.


Voir aussi#

Vous voulez regarder une ruche en parallèle de vos données Prefetch ? Déposez la ruche sur la page d'accueil de l'analyseur — elle s'analyse entièrement dans votre navigateur et se marie bien avec la sortie CSV de PECmd.

Articles liés

Retour à tous les articles