Retour à tous les articles

Prefetch, Amcache ou ShimCache

Windows enregistre les preuves d'exécution des programmes dans au moins trois endroits distincts, chacun avec son propre format, sa propre rétention et ses propres particularités :

  • Prefetch (C:\Windows\Prefetch\*.pf) — cache de timing par exécution
  • Amcache (C:\Windows\AppCompat\Programs\Amcache.hve) — ruche de registre dressant l'inventaire des programmes
  • ShimCache / AppCompatCache (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache) — cache de compatibilité stocké dans le registre

Ils se recoupent. Ils se contredisent. Chacun capture quelque chose que les autres manquent.

Prefetch — l'histoire du timing

Prefetch vous indique quand un programme a été exécuté et à quelle fréquence. Chaque fichier .pf contient jusqu'à huit horodatages d'exécution récents ainsi qu'un compteur d'exécutions. Il contient également la liste des fichiers chargés par l'exécutable lors de sa première exécution, ce qui est utile en analyse de malware.

Ce que Prefetch ne vous donne pas : la liste exhaustive de tous les programmes ayant été exécutés un jour. Les fichiers sont supprimés lorsque le cache est plein (généralement plafonné à 1024 fichiers), si bien qu'un poste de travail actif fera tourner ses entrées les plus anciennes. Prefetch est aussi régulièrement désactivé sur Windows Server.

Tournez-vous vers Prefetch lorsque vous avez besoin de la fréquence d'exécution, de la fraîcheur ou de l'empreinte de chargement d'un exécutable. Utilisez le parseur de ce site pour faire ressortir tous ces éléments en une seule passe.

Amcache — l'histoire de l'inventaire

Amcache est une ruche de registre (Amcache.hve) alimentée par l'infrastructure Application Compatibility de Windows. Elle enregistre des métadonnées pour chaque binaire que le système a vu, et pas seulement ceux qu'il a exécutés. Cela fait d'Amcache l'inventaire le plus large : hashes SHA-1, tailles de fichiers, éditeur, version, horodatages d'installation et indication de signature du binaire.

Là où Prefetch vous dit qu'un programme s'est exécuté huit fois mardi dernier, Amcache vous dit que le programme existe, quel est son SHA-1 et approximativement à quel moment il est apparu sur le système. Les deux artefacts se combinent bien : le compteur d'exécutions de Prefetch combiné au hash d'Amcache suffit à affirmer « ce binaire précis a été exécuté N fois ».

Pour le parsing d'Amcache, voyez le parseur Amcache.

ShimCache — l'histoire de la compatibilité

ShimCache (également appelé AppCompatCache) est plus ancien et plus sommaire que les deux autres. Il enregistre le chemin du fichier, l'horodatage de dernière modification et un flag indiquant l'exécution, avec un plafond strict d'environ 1024 entrées sur les versions modernes de Windows. Il existe avant tout pour alimenter le moteur de shimming de compatibilité applicative, pas pour servir la forensique.

ShimCache prend l'avantage dans un cas bien précis : lorsque Prefetch a été désactivé ou effacé et qu'Amcache est indisponible, ShimCache peut encore receler une trace. Il est aussi utile comme source de corroboration : si les trois artefacts s'accordent sur un chemin et un horodatage, la preuve est solide.

Lequel consulter en premier ?

Pour la plupart des enquêtes du type « ce programme s'est-il exécuté ? », l'ordre est le suivant :

  1. Prefetch pour les preuves d'exécution et la fraîcheur
  2. Amcache pour le hash, la version et l'inventaire plus large
  3. ShimCache comme repli de corroboration lorsque les deux premiers sont incomplets ou suspects

Chaque parseur de cette suite traite l'un de ces artefacts. Ensemble, ils comblent les angles morts que chacun d'eux laisserait, pris séparément.