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

4 min de lecture

TL;DR. Prefetch est une vraie preuve d'exécution avec compteurs et heures d'exécution. Le ShimCache prouve seulement qu'un fichier a existé et a été examiné. Si tu as besoin de "a-t-il tourné, et quand ?", attaque Prefetch d'abord. Si Prefetch est désactivé ou effacé, le ShimCache devient ton témoin d'existence de repli.

On les compare en permanence parce que les deux font remonter des "programmes sur un hôte Windows". Ce ne sont pas le même type de preuve. Traite-les comme interchangeables et tu produis des conclusions fausses. Voici le duel.

En un coup d'œil

ShimCachePrefetch
EmplacementHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCacheC:\Windows\Prefetch\*.pf
Ce qu'il prouveLe fichier a existé et a été examinéLe fichier a été exécuté
Compteur d'exécutionsNonOui
Horodatages d'exécutionNon (seulement mtime fichier)Oui, 8 dernières heures d'exécution
Fichiers référencésNonOui, DLLs et fichiers de données chargés
Écrit quandUniquement à l'arrêt propreDans les ~10 s après l'exécution
Par défaut sur SKUs poste de travailOuiOui
Par défaut sur SKUs serveurOuiSouvent désactivé
CapacitéJusqu'à ~1 024 entrées1 024 fichiers .pf sur Win8+

Là où Prefetch gagne

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

La liste des modules chargés est aussi de l'or pour le triage : un .pf montrant un processus Word qui a chargé WINWORD.EXE plus MSO.DLL plus une DLL suspecte dans \AppData\, c'est une lecture rapide de chargement d'add-in malveillant. PECmd d'Eric Zimmerman est le parser standard. Le parser Prefetch couvre le format si tu veux faire le tien.

Là où le ShimCache gagne

Prefetch a une faiblesse critique : il est fréquemment désactivé sur les serveurs, sur les images SSD-tunées, et par les attaquants (EnablePrefetcher = 0). Il est aussi activement supprimé par les outils de nettoyage. Le ShimCache, à l'inverse, est toujours actif et est assez sensible pour enregistrer un binaire qui a été déposé et supprimé avant même d'avoir tourné.

Quand Prefetch est vide, le ShimCache répond souvent encore à "ce fichier a-t-il jamais touché cet hôte ?" L'inférence complète est dans le ShimCache prouve-t-il qu'un programme a été exécuté ?.

Le cache capture aussi des fichiers que Prefetch ne voit jamais :

  • Des binaires qui ont crashé avant de terminer l'initialisation du processus.
  • Des fichiers que Windows a examinés pour compatibilité mais que l'utilisateur n'a pas réellement lancés.
  • Des exécutables qui ont tourné depuis des partages réseau avant que Prefetch décide d'écrire un .pf.

Comment les utiliser ensemble

  • Les deux présents, chemins concordants. Preuve d'exécution forte. Utilise les heures d'exécution de Prefetch comme chronologie d'événement. Utilise la mtime du ShimCache uniquement pour ancrer l'identité du fichier.
  • Prefetch uniquement. L'exécution est prouvée. Le ShimCache peut simplement ne pas avoir encore été vidé (il n'écrit qu'à l'arrêt, voir où le ShimCache est stocké).
  • ShimCache uniquement. Le fichier a existé et a été examiné. Ne revendique pas l'exécution sans corroboration. Récupère AmCache, BAM, et EVTX. La matrice complète est dans la référence des artefacts.
  • Aucun des deux, mais tu soupçonnes une exécution. Cherche de l'anti-forensique. Suppression de Prefetch plus ShimCache non vidé, c'est en soi un finding, traité dans anti-forensique ShimCache.

Pour lire le côté ShimCache sans rien installer, dépose un hive SYSTEM dans le Shimcache Parser. Entièrement dans le navigateur.

Lectures complémentaires

Articles liés