TL;DR. Le ShimCache prouve qu'un fichier a existé sur disque. AmCache prouve qu'il a été exécuté et l'identifie par SHA-1. Le ShimCache n'est vidé qu'à l'arrêt propre. AmCache écrit en continu. Récupère les deux. Ce sont des co-témoins, pas des substituts.
Chaque analyste junior que j'ai onboardé a posé la même question la première semaine : "Si AmCache est meilleur, pourquoi continue-t-on de récupérer le ShimCache ?" La réponse, c'est qu'ils enregistrent des événements différents, à des moments différents, avec des modes de défaillance différents. Traite-les comme des substituts et tu écriras des rapports qui s'effondrent à la première revue technique.
En un coup d'œil
| ShimCache | AmCache | |
|---|---|---|
| Emplacement registre | HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| Capacité | Jusqu'à ~1 024 entrées | Des milliers d'entrées, pas de plafond fixe |
| Données par entrée | Chemin, mtime fichier, flag d'exécution (legacy) | Chemin, SHA-1, taille, éditeur, date d'installation, beaucoup plus |
| Écrit quand | Uniquement à l'arrêt propre | En continu et à chaque exécution de la tâche Appraiser |
| Survit au reboot brutal | Non, les entrées récentes sont perdues | Oui, déjà sur disque |
| Idéal pour | Prouver qu'un fichier a existé sur disque | Prouver qu'un fichier a tourné et l'identifier par hash |
Quand le ShimCache l'emporte
Le cache se déclenche à l'examen, pas à l'exécution. Cette sensibilité en fait le meilleur témoin pour des fichiers qu'un attaquant a déposés brièvement puis effacés. Un binaire posé à 14:33 dans C:\Users\Public\ et supprimé à 14:35 peut quand même apparaître dans le ShimCache si Windows l'a touché pour une raison quelconque pendant cette fenêtre de deux minutes.
Le cache porte aussi la mtime $STANDARD_INFORMATION du fichier. Cet horodatage n'est pas un temps d'exécution. C'est une propriété du fichier, ce qui signifie qu'il survit aux renommages et copies qui préservent les métadonnées. Utile pour regrouper des builds liés sur plusieurs hôtes. Inutile pour séquencer des événements sur une chronologie, comme couvert dans ce que signifie vraiment l'horodatage du ShimCache.
Quand AmCache l'emporte
Demande à AmCache "ce binaire a-t-il vraiment tourné, et lequel précisément ?" et tu obtiens une vraie réponse. Chaque entrée InventoryApplicationFile sous Amcache.hve porte un hash SHA-1, une taille de fichier, un éditeur, un statut de signature, et un LastWrite par fichier qui sert de proxy pour "quand Appraiser l'a remarqué". C'est suffisant pour pivoter vers VirusTotal, vers du threat intel, ou vers d'autres hôtes du parc même quand le fichier sur disque est parti depuis longtemps.
Le modèle de persistance gagne aussi. AmCache est vidé par compattelrunner.exe à intervalles planifiés et lors d'événements d'installation. Les reboots brutaux et les BSOD ne détruisent pas silencieusement l'activité récente comme c'est le cas pour le ShimCache. Récupère Amcache.hve plus Amcache.hve.LOG1 et Amcache.hve.LOG2 pour rejouer toute transaction en vol.
Les utiliser ensemble
Traite-les comme des co-témoins avec des angles morts différents.
- Les deux présents, chemins concordants. Preuve forte d'exécution. Utilise AmCache pour l'identité par hash, le ShimCache pour confirmer que le fichier a vécu à ce chemin à un moment donné.
- ShimCache uniquement. Le fichier a existé. L'exécution n'est pas prouvée. Cherche corroboration avec Prefetch, EVTX ou BAM/DAM.
- AmCache uniquement. L'hôte n'a pas été arrêté proprement depuis l'activité. Le ShimCache n'a jamais été vidé. Prélève un dump RAM si la machine est encore debout ; le ShimCache en mémoire est là.
- Aucun présent, mais tu soupçonnes une activité. Vérifie que la tâche Appraiser a tourné. Un Compatibility Appraiser désactivé produit des hives AmCache qui paraissent vides.
Pour les détails techniques de la disposition, voir le guide du format binaire Windows 10/11. Pour parser un hive tout de suite sans rien installer, dépose-le dans le Shimcache Parser. Il tourne entièrement dans le navigateur.
Lectures complémentaires
- AppCompatCacheParser d'Eric Zimmerman. implémentation C# de référence.
- Artefact
Windows.Registry.AppCompatCachede Velociraptor. logique de collecte sur système vivant. - ShimCache & AmCache forensic analysis de Mehrnoush. déroulé basé sur des cas.