Comprendre le ShimCache de Windows (AppCompatCache)

4 min de lecture

La plupart des analystes croisent le ShimCache de la même manière : quelqu'un dans l'équipe lance "sors l'AppCompatCache, vois si le binaire y est", et ça marche assez souvent pour que l'artefact se forge une réputation qu'il ne mérite pas tout à fait. J'ai passé assez d'heures à débattre de lignes du ShimCache en revues de dossier pour savoir que l'artefact vaut son pesant d'or, mais seulement si on le traite pour ce qu'il est réellement. Pas un journal d'exécution. Pas un audit de processus. Une liste d'exécutables que Windows a regardés d'assez près pour décider si un shim de compatibilité devait s'activer.

C'est le cadre. Le reste, c'est de la mécanique.

Ce que le cache enregistre vraiment

L'Application Compatibility Cache, presque toujours abrégé en ShimCache ou AppCompatCache, vit dans le hive SYSTEM et contient jusqu'à environ 1 024 entrées sur Windows moderne. Chaque entrée porte le chemin complet d'un exécutable, l'heure de dernière modification $STANDARD_INFORMATION du fichier, et (sur les anciennes versions) un flag décrivant si le binaire a effectivement été exécuté. Ce flag a disparu sur Windows 10 et 11. Fais comme s'il n'avait jamais existé.

Windows construit le cache en mémoire à chaque démarrage et ne l'écrit sur disque qu'à un arrêt propre. Un BSOD, un hard reset ou un kill de VM au niveau de l'hyperviseur engloutit tout ce qui se trouvait en mémoire volatile. Ce seul fait explique la moitié des histoires "mais j'ai vu le binaire en production" qui se transforment en tickets "le hive sur disque ne montre rien".

Où il se trouve

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache

Le AppCompatCache final est une valeur, pas une sous-clé. Son contenu est un unique blob binaire dont la disposition a changé à chaque version majeure de Windows : XP, 7, 8, 8.1 et la famille 10/11 utilisent toutes des schémas différents. Parser hors ligne implique de récupérer le hive SYSTEM (plus ses journaux de transactions SYSTEM.LOG1 et SYSTEM.LOG2) et de décoder le blob avec la bonne version. Cet outil parse ce seul fichier de hive SYSTEM dans ton navigateur, sans téléversement. Il ne rejoue pas les journaux : si le hive est dirty, rejoue-les d'abord avec rla.exe d'Eric Zimmerman.

Pourquoi les enquêteurs y recourent

Le ShimCache gagne sa place parce qu'il survit. Un attaquant peut déposer un binaire, l'exécuter, le supprimer, vider le dossier Prefetch, et le ShimCache conserve toujours le chemin complet. Cela en fait un témoin d'existence solide pour :

  • Du malware déjà effacé du disque.
  • Des binaires système renommés utilisés comme charges utiles living-off-the-land.
  • Du tooling déployé depuis un partage réseau que personne n'a jamais récupéré localement.

Combine les données de chemin avec AmCache pour l'attribution par hash et tu peux pivoter vers du threat intel même quand le fichier est parti depuis longtemps.

Trois pièges classiques

  1. L'horodatage est la mtime du fichier, pas le moment où le programme a tourné. Le timestomping change ce que le cache enregistre.
  2. Une entrée n'est pas une preuve d'exécution. Le cache Win10/11 n'a aucun flag d'exécution.
  3. Le cache n'est vidé qu'à l'arrêt propre. Les reboots brutaux détruisent silencieusement les entrées récentes.

Traite chaque ligne comme une hypothèse. Corrobore avec Prefetch, AmCache, EVTX / Sysmon ou les hives du registre avant d'écrire quoi que ce soit de définitif dans un rapport.

Pour aller plus loin

Le reste du blog s'organise en deux ensembles.

Comprendre le ShimCache

L'utiliser dans des enquêtes