Amcache vs ShimCache : quand chaque artefact gagne

Amcache et ShimCache (aussi appelé AppCompatCache) sont les deux artefacts Windows les plus souvent confondus l'un avec l'autre, car tous deux relèvent de l'infrastructure « Application Compatibility » et tous deux enregistrent les binaires ayant été sur un hôte. Ce sont des mécanismes différents, maintenus par des sous-systèmes Windows différents, avec des limites différentes et une valeur forensique différente.

Les différences phares :

ShimCache est plus court, plus pauvre, maintenu en kernel et mis à jour par le loader. Amcache est plus long, plus riche, maintenu en mode utilisateur et mis à jour par une tâche planifiée.

Pour la référence Amcache plus large, voir la référence complète Amcache. Pour la question Amcache vs Prefetch (une comparaison différente), voir Amcache vs Prefetch.


Ce que chacun enregistre#

ShimCache / AppCompatCache#

Un blob binaire stocké dans la ruche du registre SYSTEM sous HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. C'est maintenu en kernel — chaque fois que le loader touche un binaire (le charge, l'exécute, ou dans certains cas le stat simplement), le cache est mis à jour.

Chaque entrée stocke :

  • Le chemin complet du fichier.
  • Un horodatage de modification (le temps modifié de $STANDARD_INFORMATION du fichier au moment de la mise à jour du cache).
  • Un drapeau indiquant si le binaire a été exécuté.
  • Sur certaines versions de Windows : un horodatage de création d'entrée.

Le cache est flushé vers le registre à l'arrêt, pas en temps réel. Cela produit une particularité critique : sur un système actif, le cache sur disque est périmé jusqu'au prochain arrêt propre. Pour obtenir le ShimCache le plus frais, vous avez besoin d'une image mémoire ou d'un système qui s'est arrêté proprement depuis les événements d'intérêt.

Le cache est également limité en taille :

  • Windows 7 / Server 2008 R2 : 1024 entrées.
  • Windows 8 / 2012 : 1024 entrées.
  • Windows 10 / 11 / 2016+ : 1024 entrées.

Quand la limite est atteinte, les entrées les plus anciennes sont évincées en LRU. Un hôte fortement utilisé peut faire tourner ShimCache en quelques jours.

Amcache#

Une ruche du registre séparée (Amcache.hve) maintenue par la tâche planifiée Compatibility Appraiser, qui s'exécute environ chaque jour sur les postes de travail et moins fréquemment sur les serveurs. La ruche enregistre des milliers d'entrées par hôte avec des métadonnées riches : hash SHA-1, éditeur, version, date de link, contexte d'installation. Voir Structure du registre Amcache pour le schéma complet.


La différence fondamentale#

Propriété ShimCache Amcache
Stockage Ruche SYSTEM, une seule valeur binaire Amcache.hve autonome
Mainteneur Loader kernel Tâche planifiée mode utilisateur
Déclencheur de mise à jour Loader touche le binaire Scan de l'appraiser
Persistance vers disque À l'arrêt Continue (avec journaux de transactions)
Max entrées ~1024 Effectivement non bornée (milliers typiques)
Enregistre le hash ? Non Oui — SHA-1 des 31 premiers Mio
Enregistre éditeur / version ? Non Oui
Enregistre ProgramId ? Non Oui
Enregistre données pilote / périphérique ? Non Oui (sous-clés pilote + périphérique)
Granularité par entrée Chemin + 1-2 horodatages Chemin + métadonnées riches + plusieurs horodatages
Disponible sur système actif Périmé (besoin d'arrêt) Frais
Survit à la suppression du binaire Oui Oui
Disponible en mémoire Oui (endroit le plus utile) Oui (moins critique)

Pour la majorité du travail DFIR, Amcache est l'artefact le plus riche. ShimCache reste essentiel pour des questions spécifiques où sa position côté kernel paie.


Quand ShimCache gagne#

Une poignée de cas où vous voulez ShimCache, pas Amcache :

« Le loader a-t-il touché ce binaire, même s'il ne s'est pas exécuté ? »#

ShimCache enregistre les touches du loader plus agressivement que Amcache n'enregistre la présence. Un binaire brièvement stat par une application mais jamais exécuté et jamais inventorié par l'appraiser peut quand même laisser une trace dans ShimCache.

C'est rare mais pas impossible. ShimCache est le seul artefact qui le capture.

« J'ai une image mémoire mais pas d'image disque »#

ShimCache vit en mémoire kernel en continu et est l'un des artefacts que le plugin shimcachemem de Volatility extrait proprement. Amcache est de la donnée de ruche du registre sur disque — pour l'obtenir depuis la mémoire vous devez extraire la ruche elle-même, ce qui est plus de travail.

« L'appraiser est désactivé sur cet hôte »#

Les endpoints durcis désactivent parfois le Compatibility Appraiser pour empêcher la télémétrie vers Microsoft. Ces hôtes n'ont aucune activité Amcache, mais le kernel maintient toujours ShimCache (il fait partie du loader, pas de l'appraiser).

« J'ai besoin d'une couverture Windows 10 pré-1709 »#

Le schéma moderne Inventory* dans Amcache n'a atterri que dans Windows 10 build 1709. Pour les anciens builds 10/8.x, Amcache est plus pauvre. ShimCache précède Amcache et est disponible de manière cohérente sur Windows 7 et au-delà.


Quand Amcache gagne#

La plupart du temps. Les cas où Amcache est nettement meilleur :

« Quel est le SHA-1 de ce binaire ? »#

ShimCache : pas de réponse. Amcache : directement dans la colonne Hash. À elle seule, c'est une raison de faire d'Amcache votre premier arrêt sur la plupart des enquêtes.

« Qui a publié ce binaire ? »#

ShimCache : pas de réponse. Amcache : Publisher, PublisherName, ProductName.

« Quand ce binaire est-il apparu pour la première fois sur cet hôte ? »#

ShimCache : un horodatage, mais c'est l'heure de modification du fichier au moment de la touche du loader, pas l'heure de la touche elle-même. Utile mais indirect. Amcache : KeyLastWriteTimestamp est plus proche de « quand Amcache a-t-il enregistré ceci », ce qui est plus proche de « quand l'appraiser l'a-t-il vu pour la première fois ». Voir Horodatages Amcache expliqués.

« Ce binaire est-il lié à une application installée ? »#

ShimCache : pas de données de relation. Amcache : ProgramId se joint à InventoryApplication pour le contexte produit-installé complet. Voir ProgramId Amcache expliqué.

« Hunt cross-hôtes »#

ShimCache : 1024 entrées par hôte, pas de ProgramId, seulement des chemins. Un hunt cross-hôtes basé sur le hash est impossible depuis ShimCache seul. Amcache : Hash et ProgramId rendent les pivots cross-hôtes triviaux. Voir Mouvement latéral et pivot avec le ProgramId Amcache.

« Preuves de pilotes / périphériques »#

ShimCache : seulement les binaires PE que le loader a touchés. Amcache : InventoryDriverBinary, InventoryDeviceContainer et InventoryDevicePnp vous donnent un historique séparé et structuré de pilotes et de périphériques. Essentiel pour les enquêtes BYOVD et USB.


Comment ils se corroborent mutuellement#

Lorsque les deux artefacts ont une entrée pour le même binaire, vous obtenez une confirmation multi-source :

  • ShimCache dit que le loader l'a touché.
  • Amcache dit que l'appraiser l'a inventorié, avec un hash et des métadonnées.
  • Prefetch (si présent) dit qu'il s'est réellement exécuté, avec des heures de run.

Si un seul artefact a le binaire, l'absence dans l'autre est elle-même un signal :

  • ShimCache seul : le loader l'a touché mais l'appraiser ne l'a jamais inventorié. Raisons possibles : fichier supprimé avant le passage suivant de l'appraiser, fichier dans un chemin que l'appraiser ne scanne pas, appraiser désactivé.
  • Amcache seul : l'appraiser l'a inventorié mais le loader ne l'a jamais touché (dans la fenêtre temporelle couverte par le ShimCache actuel). Raisons possibles : fichier présent mais jamais chargé, touche du loader évincée de la limite de 1024 entrées de ShimCache, ShimCache effacé.

Workflow conjoint standard#

  1. Analyser ShimCache avec AppCompatCacheParser.exe (Zimmerman).
  2. Analyser Amcache avec AmcacheParser.exe (Zimmerman).
  3. Charger les deux dans Timeline Explorer.
  4. Pour chaque entrée du filtre de triage Amcache « PE non signé dans chemin inscriptible par l'utilisateur », vérifier ShimCache pour le même chemin. Si présent, le loader l'a touché ; si absent, présence seule.
  5. Pour chaque entrée dans ShimCache avec le drapeau executed activé, vérifier Amcache pour les métadonnées hash / éditeur.
  6. Recroiser les deux avec Prefetch pour la preuve d'exécution.

Table de décision rapide#

Votre question ShimCache Amcache
Le binaire X était-il sur cet hôte ? ✓ (chemin uniquement, derniers 1024) ✓✓ (chemin + métadonnées)
Quel est le SHA-1 du binaire X ?
Le binaire X s'est-il exécuté ? partiel (drapeau executed)
Quand le binaire X est-il apparu pour la première fois ? partiel
Hunt cross-hôtes par contenu ?
Hunt cross-hôtes par application ? ✓ (ProgramId)
Preuves pilote / périphérique ?
Couverture sur hôtes durcis/sans appraiser ?
Couverture sur pré-Win10 1709 ? partiel
Disponible frais sur système actif ? ✗ (besoin d'arrêt)

Voir aussi#

Pour explorer votre propre ruche en parallèle de votre analyse ShimCache, déposez le fichier sur la page d'accueil de l'analyseur — il s'exécute entièrement dans votre navigateur.

Articles liés

Retour à tous les articles