ShimCache vs Prefetch : lequel prouve qu'un programme a tourné ?

3 min de lecture

TL;DR. Le Prefetch est une vraie preuve d'exécution, avec nombre et heures d'exécution. Le ShimCache prouve seulement qu'un fichier a existé et a été examiné. S'il vous faut « a-t-il tourné, et quand ? », dégainez d'abord le Prefetch ; si le Prefetch est désactivé ou effacé, le ShimCache devient votre témoin de repli sur l'existence.

ShimCache et Prefetch sont sans cesse comparés parce que les deux font remonter « des programmes sur un hôte Windows ». Mais ce ne sont pas le même type de preuve, et les traiter comme interchangeables produit de fausses conclusions. Voici la comparaison directe.

Vue d'ensemble

ShimCachePrefetch
EmplacementHKLM\SYSTEM\…\AppCompatCacheC:\Windows\Prefetch\*.pf
Ce qu'il prouveLe fichier a existé / a été examinéLe fichier a été exécuté
Compteur d'exécutionsNonOui
Horodatages d'exécutionNon (seulement le mtime du fichier)Oui — 8 dernières exécutions
Fichiers référencésNonOui — DLL, fichiers de données chargés
ÉcritUniquement à l'arrêt propreSous ~10 s après l'exécution
Par défaut sur serveursOuiSouvent désactivé
CapacitéJusqu'à 1 024 entrées1 024 fichiers .pf (Win8+)

Là où le Prefetch l'emporte

Le Prefetch est l'artefact d'exécution le plus fort, point. Chaque fichier .pf donne la dernière heure d'exécution (jusqu'à huit sur Windows 8+), un compteur total d'exécutions et la liste des fichiers chargés par le processus. C'est suffisant pour affirmer « ce binaire a été exécuté à ces heures » — ce que le ShimCache ne peut jamais faire, car son seul horodatage est la date de dernière modification du fichier, pas une heure d'exécution.

Là où le ShimCache l'emporte

Le Prefetch a une faiblesse critique : il est fréquemment désactivé sur les serveurs, sur les images optimisées SSD, et par les attaquants (EnablePrefetcher = 0). Il est aussi activement supprimé par les outils de nettoyage. Le ShimCache, lui, est toujours actif et assez sensible pour enregistrer un binaire déposé puis supprimé avant même d'avoir tourné. Quand le Prefetch est vide, le ShimCache répond souvent encore à « ce fichier a-t-il touché cet hôte ? » — voir Le ShimCache prouve-t-il qu'un programme a été exécuté ? pour savoir jusqu'où pousser l'inférence.

Comment les utiliser ensemble

  • Les deux présents, chemins concordants : preuve d'exécution forte. Utilisez les heures du Prefetch comme chronologie d'événements ; n'utilisez le mtime du ShimCache que pour ancrer l'identité du fichier.
  • Prefetch seul : l'exécution est prouvée ; le ShimCache n'est peut-être tout simplement pas encore flushé (il n'écrit qu'à l'arrêt — voir où le ShimCache est stocké).
  • ShimCache seul : le fichier a existé et a été examiné. N'affirmez pas l'exécution sans corroboration — récupérez AmCache, BAM et journaux d'événements (matrice complète ici).
  • Ni l'un ni l'autre, mais exécution suspectée : cherchez l'anti-forensique. Une suppression du Prefetch plus un flush ShimCache manquant est en soi un constat, traité dans Anti-forensique du ShimCache.

Pour lire le côté ShimCache sans rien installer, déposez une ruche SYSTEM dans le Shimcache Parser — entièrement dans le navigateur.

Pour aller plus loin

Articles connexes