Amcache : la référence forensique complète de la ruche Windows .hve

TL;DR — Amcache en un paragraphe. Amcache est une ruche du registre Windows (Amcache.hve) maintenue par le Microsoft Compatibility Appraiser. Elle enregistre chaque binaire PE inventorié sur l'hôte, avec hash SHA-1, chemin complet, éditeur, date de link PE et horodatage d'inventaire. Les analystes l'utilisent pour prouver la présence d'un binaire (pas nécessairement son exécution), pivoter sur le hash entre hôtes, et récupérer les preuves d'outils d'attaquants supprimés.

Amcache.hve est la ruche du registre Windows qui enregistre quels programmes ont été présents ou exécutés sur une machine, avec des métadonnées riches : chemin complet, hash SHA-1, date de link PE, éditeur, version et heure d'inventaire. Pour l'investigation numérique et la réponse à incident, c'est l'un des quatre artefacts que tout analyste Windows apprend en premier — aux côtés de Prefetch, ShimCache et du journal d'événements de sécurité.

Cette page est la référence canonique sur l'artefact lui-même : ce qu'il est, où il se trouve, comment Windows le produit, ce que chaque clé de premier niveau contient, comment l'utiliser dans une enquête et comment il se positionne par rapport aux sources de preuve d'exécution voisines. Pour la couverture des outils d'analyse, voir le guide complet d'AmcacheParser ; pour l'introduction courte d'origine, voir Comprendre Amcache pour l'analyse forensique Windows.


Amcache en un coup d'œil face aux artefacts voisins#

La question la plus fréquente des nouveaux analystes Amcache est « en quoi est-ce différent de ShimCache / Prefetch / SRUM ? » Référence rapide :

Artefact Ce qu'il prouve Hash ? Chemin ? Capacité Source
Amcache.hve Binaire présent sur l'hôte ✅ SHA-1 (31 premiers MiB) ✅ Complet Milliers d'entrées Compatibility Appraiser
ShimCache (AppCompatCache) Binaire vu par le loader ✅ Complet ~1 024 entrées (LRU) Loader Application Compatibility
Prefetch Binaire exécuté ✅ Complet ~1 024 fichiers .pf Prefetcher Windows (service Pf)
SRUM Binaire consomme des ressources sur 30+ jours ✅ Complet Agrégats par app System Resource Usage Monitor
Security 4688 Processus créé (temps réel) ✅ Complet Borné par la rotation du journal Sous-système d'audit

Règle de pivot : Amcache pour la présence et le hash ; ShimCache pour la liste vue par le loader ; Prefetch pour l'exécution ; SRUM pour l'usage sur le temps ; 4688 pour l'événement temps-réel. Détails sur chaque pairage : Amcache vs ShimCache, Amcache vs Prefetch, Amcache vs SRUM, Amcache vs AppCompatCache.


Ce qu'est réellement Amcache#

Amcache est une ruche du registre — le même format binaire que SYSTEM, SOFTWARE, SAM, SECURITY et NTUSER.DAT. Ce n'est ni un fichier journal, ni une base de données, ni une liste à plat. C'est un arbre clés/valeurs avec des valeurs typées, et c'est cette structure qui le rend à la fois riche et un peu pénible à lire à la main.

La ruche est alimentée par le Microsoft Compatibility Appraiser, une tâche planifiée livrée avec Windows sous \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser. L'appraiser scanne le système à la recherche de logiciels installés et présents, collecte les métadonnées d'en-tête PE pour chaque fichier et écrit des enregistrements d'inventaire structurés dans la ruche. Sur les builds Windows 10 et 11 récents, l'appraiser s'exécute environ une fois par jour ; sur les builds Windows Server, la cadence varie mais est généralement de plusieurs fois par semaine.

L'appraiser faisait à l'origine partie de l'infrastructure du Customer Experience Improvement Program (CEIP) — le mécanisme de Microsoft pour envoyer de la télémétrie de compatibilité vers ses serveurs avant les mises à niveau majeures de Windows. La valeur forensique d'Amcache est, en un sens, un accident de ce pipeline de télémétrie : l'appraiser devait tenir un inventaire local pour savoir quoi envoyer, et c'est cet inventaire local que les analystes exploitent désormais.

Pourquoi les analystes s'y intéressent#

Amcache répond à une question qu'aucun autre artefact Windows ne résout aussi proprement :

« Cet exécutable a-t-il déjà été présent sur cet hôte, et si oui, avec quel SHA-1, à quel chemin et à peu près quand ? »

Trois éléments rendent cette question précieuse en DFIR :

  1. Elle survit à la suppression. Un wiper peut effacer le binaire du disque ; le snapshot d'inventaire dans la ruche persiste jusqu'au prochain passage de l'appraiser — et même alors, le run précédent reste souvent dans les journaux de transactions.
  2. Elle pré-hashe le binaire. Amcache stocke le SHA-1 des ~31 premiers Mio du fichier au moment de l'inventaire. Même si vous n'avez plus le binaire, vous pouvez soumettre ce hash à VirusTotal, à des flux de threat intel, ou à votre base d'allowlist interne.
  3. Elle enregistre le chemin. L'endroit où vivait le binaire sur disque est souvent toute l'histoire — \Users\<name>\AppData\Local\Temp\svchost.exe est sa propre accusation.

Où se trouve Amcache#

Sur un système Windows actif :

C:\Windows\AppCompat\Programs\Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve.LOG1
C:\Windows\AppCompat\Programs\Amcache.hve.LOG2

Les fichiers .LOG1 et .LOG2 sont les journaux de transactions de la ruche — le même mécanisme de write-ahead log qu'utilise toute ruche du registre. Collectez toujours les trois ensemble. Si vous ne récupérez qu'Amcache.hve, vous pouvez silencieusement manquer les écritures les plus récentes, car les derniers changements peuvent encore se trouver dans les journaux en attente de flush.

Pour l'ensemble complet des questions liées à l'emplacement (chemins Windows plus anciens, où il se trouve dans une image forensique, comment KAPE / Velociraptor le collectent), voir Où se trouve Amcache.hve sur disque.

Historique entre versions Windows#

La ruche a une histoire courte mais brouillonne :

  • Windows 7 / Server 2008 R2 a introduit l'artefact sous le nom RecentFileCache.bcf — un fichier binaire à plat, pas une ruche, et bien plus pauvre en métadonnées. Il n'est pas directement comparable à l'Amcache moderne.
  • Windows 8 / 8.1 a introduit Amcache.hve sous sa forme de ruche avec les clés Root\File et Root\Programs (le schéma « legacy »).
  • Windows 10 build 1709 (Fall Creators Update) a ajouté Root\InventoryApplicationFile et les clés Inventory* apparentées — le schéma moderne. Les clés legacy sont restées pour la compatibilité sur certains builds mais sont devenues plus éparses avec le temps.
  • Windows 11 poursuit le schéma de Windows 10 avec des ajouts mineurs, notamment des enregistrements de pilotes et de device-containers plus granulaires.

Quand vous analysez une ruche, vous travaillez généralement avec le schéma moderne Inventory*. Les clés legacy Root\Programs et Root\File méritent encore d'être vérifiées sur les anciens systèmes et sur les builds où l'appraiser a été désactivé — elles capturent parfois des données que les clés modernes manquent. Nous couvrons les spécificités par version Windows dans Amcache sur Windows 11 et 10 et Amcache sur Windows Server.


La structure de la ruche#

Au niveau supérieur, la ruche possède une unique clé Root avec ces sous-clés notables (sur un système Windows 11 moderne) :

Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File             (legacy)
└── Programs         (legacy)

Les cinq que les analystes DFIR touchent sur pratiquement chaque cas :

Clé Enregistre
InventoryApplicationFile Chaque fichier PE que l'appraiser a inventorié, avec chemin complet, SHA-1, date de link, éditeur, version. La source unique la plus riche.
InventoryApplication Applications installées (entrées MSI / Ajout-Suppression de programmes). Parents des enregistrements de fichiers via ProgramId.
InventoryDriverBinary Chaque binaire de pilote chargé par le système, avec drapeaux signé/kernel-mode. Critique pour les enquêtes BYOVD.
InventoryDeviceContainer Enregistrements de périphériques avec nom convivial : imprimantes, écrans, contrôleurs amovibles.
InventoryDevicePnp Enregistrements d'énumération PnP, un par interface de périphérique. Se joint à InventoryDeviceContainer via InstanceId.

Pour une décomposition clé par clé — chaque sous-clé, chaque valeur notable et sa signification — voir Structure du registre Amcache et clés.

Versionnage de schéma#

Le schéma d'Amcache a évolué plusieurs fois au cours de la vie de Windows 10. De nouveaux noms de valeurs apparaissent ; d'anciens disparaissent ou changent de type. C'est pourquoi un visualiseur de registre générique est un mauvais outil pour Amcache — les valeurs qu'il montre sont correctes mais non étiquetées, et vous passez plus de temps à corréler contre des billets de blog qu'à analyser. Utilisez un analyseur dédié (AmcacheParser, l'analyseur dans le navigateur de ce site, ou le plugin amcache de RegRipper) et laissez l'outil suivre le schéma pour vous.


Les champs que les analystes utilisent réellement#

Une poignée de valeurs par entrée d'inventaire porte 90 % du poids investigatif :

FileId#

La chaîne de 41 caractères "0000" + sha1_hex qui identifie de manière unique un fichier par son contenu. Le 0000 initial est une étiquette de type historique ; les 40 caractères hexadécimaux restants sont le SHA-1 des 31 premiers Mio du fichier. Retirez le préfixe et vous avez un hash que vous pouvez soumettre directement à VirusTotal, à des flux IOC ou à votre base de hash-allowlist.

Quelques pièges :

  • Le hash couvre uniquement les 31 premiers Mio, pas le fichier entier. Pour les installeurs et les gros binaires, il reste distinctif, mais c'est techniquement un prefix hash, pas un hash de contenu complet.
  • Les fichiers de moins de 31 Mio sont entièrement hashés, donc le résultat correspond à un SHA-1 standard.

Couverture complète : FileId Amcache expliqué.

ProgramId#

Un hash d'identité de 44 caractères que Windows attribue à une application logique — une combinaison de nom, éditeur, version et langue. Le même ProgramId lie un fichier dans InventoryApplicationFile à l'enregistrement applicatif parent dans InventoryApplication. Il est également stable entre hôtes : deux machines avec la même application installée partagent généralement le même ProgramId pour celle-ci, ce qui en fait un pivot utile pour des hunts cross-hôtes.

Couverture complète : ProgramId Amcache expliqué.

Horodatages#

Amcache expose plusieurs horodatages différents, et les confondre est l'erreur n°1 des nouveaux analystes Amcache :

Champ Ce qu'il représente
KeyLastWriteTimestamp Last-write registre de la clé contenant cette entrée. Ce qui ressemble le plus à « quand Amcache a enregistré ce fichier ».
LinkDate TimeDateStamp de l'en-tête PE — quand le binaire a été compilé / lié. Contrôlable par l'attaquant ; ne pas traiter comme preuve d'heure de présence.
LastModified (quand présent) Marqueur de dernière modification côté inventaire ; pas présent dans chaque version de schéma.
MsiInstallDate Quand le MSI parent a été installé (si le fichier en provient).

Le bon pivot pour « quand ce binaire est-il apparu sur cet hôte ? » est KeyLastWriteTimestamp. Couverture complète : Horodatages Amcache expliqués.

Path, publisher, IsPeFile#

Le filtre de triage « est-ce suspect ? » sur lequel la plupart des analystes se standardisent :

IsPeFile = True ET Publisher est vide ET FullPath est sous \Users\, \AppData\, \ProgramData\ ou \Temp\.

Ce seul filtre, appliqué à InventoryApplicationFile, fait remonter la grande majorité des artefacts de malware grand public sur un hôte typiquement infecté. Il génère également beaucoup de faux positifs — logiciels piratés, scripts développeur personnalisés, applications portables — c'est pourquoi c'est un filtre de triage, pas une règle de détection.


Ce qu'Amcache n'est pas#

Trois idées reçues persistantes méritent d'être corrigées d'emblée, car elles produisent régulièrement des conclusions fausses :

Amcache n'est pas « une preuve d'exécution »#

Un binaire apparaissant dans Amcache signifie que l'appraiser a vu le fichier sur disque au moment de l'inventaire. L'appraiser inventorie les fichiers en fonction de leur emplacement (Program Files, ProgramData, le menu Démarrer, les chemins récemment touchés) — pas selon qu'ils se soient exécutés ou non. Un binaire peut apparaître dans Amcache sans avoir jamais été exécuté.

Pour l'exécution, vous avez besoin de Prefetch (le signal le plus fort), des événements de création de processus (4688 / Sysmon 1), de ShimCache comme signal corroborant, ou de SRUM pour une corrélation sur une fenêtre plus longue. Voir Amcache vs Prefetch et Amcache vs ShimCache pour les distinctions canoniques, et Amcache vs SRUM pour l'appariement sur fenêtre plus longue.

Amcache n'est pas exhaustif#

L'appraiser manque des choses :

  • Les fichiers hors des chemins qu'il scanne.
  • Les fichiers qui sont apparus et disparus entre deux passages de l'appraiser.
  • Les fichiers sur un hôte où l'appraiser a été désactivé (certains endpoints durcis).
  • Sur les anciens builds Windows, les fichiers hors du périmètre legacy Programs / File.

L'absence dans Amcache n'est pas la preuve qu'un binaire n'a jamais été présent. C'est seulement la preuve que l'appraiser ne l'a pas vu.

Amcache n'est pas inviolable#

La ruche vit sur disque à un emplacement connu. Un attaquant avec des privilèges admin peut la modifier, la supprimer, ou — plus subtilement — modifier la planification de l'appraiser pour qu'il arrête d'enregistrer. Rien de tout cela n'est courant dans les intrusions grand public (la valeur de nettoyer Amcache vaut rarement le bruit que cela génère) mais c'est possible, et vous devriez traiter Amcache comme un signal parmi d'autres, pas comme une vérité absolue.


Utiliser Amcache dans une enquête#

La boucle d'investigation standard sur une intrusion Windows-only :

  1. Collecter. Récupérer Amcache.hve + Amcache.hve.LOG1 + Amcache.hve.LOG2. Le target Amcache de KAPE fait cela en une commande ; l'artefact Windows.Forensics.Amcache de Velociraptor le fait à distance.
  2. Analyser. Exécuter AmcacheParser avec --mp pour récupérer les entrées orphelines. Vous obtiendrez un CSV par catégorie.
  3. Filtre de triage. Appliquer le filtre « PE non signé dans chemin utilisateur inscriptible » à *_UnassociatedFileEntries.csv. Cela produit une liste gérable — typiquement quelques dizaines de lignes sur un hôte typiquement infecté.
  4. Pivoter. Pour chaque ligne survivante, prendre le hash SHA-1 et le vérifier contre VirusTotal, votre flux TI et vos détections historiques. Pour chaque ligne, vérifier aussi le FullPath contre votre timeline système de fichiers et votre CSV Prefetch — Prefetch montre-t-il le même binaire en exécution ? Le fichier existe-t-il encore sur disque ?
  5. Corroborer l'exécution. Croiser les correspondances avec Prefetch (exécution définitive), Sysmon 1 / 7 (processus et chargement d'image) et Security 4688 (création de processus) si activé.
  6. Borner dans le temps. Prendre KeyLastWriteTimestamp des lignes suspectes et construire une fenêtre temporelle serrée autour. Récupérer tous les événements, changements système de fichiers et écritures registre de cette fenêtre pour le tableau complet.

Pour des scénarios spécifiques, les billets cas d'usage couvrent le playbook en détail :


Paysage des outils#

Vous avez plusieurs choix raisonnables pour analyser réellement la ruche :

Outil Idéal pour
AmcacheParser d'Eric Zimmerman DFIR de production sur un poste analyste Windows. L'implémentation canonique.
Analyseur dans le navigateur (ce site) Triage, formation, analystes non Windows, hôtes verrouillés. S'exécute en WebAssembly, le fichier ne quitte jamais le navigateur.
Plugin amcache de RegRipper Analyse interactive rapide dans le cadre d'un balayage RegRipper plus large.
Plugins Volatility Extraire la ruche d'une image mémoire, puis la passer à AmcacheParser.

Pour la question pratique « lequel utiliser maintenant », la réponse est presque toujours : AmcacheParser.exe d'Eric pour l'enquête, l'analyseur navigateur de ce site pour le triage ou un coup d'œil rapide sans rien installer. Les chemins RegRipper et Volatility existent pour des contextes spécifiques — balayages RegRipper interactifs et acquisitions uniquement mémoire, respectivement.


Questions fréquentes#

Quelle est la taille typique d'Amcache.hve ?#

Sur un poste de travail Windows 11 typique, Amcache.hve varie de 2 Mo à 25 Mo. Les postes de développeurs très utilisés et les serveurs avec beaucoup de binaires éphémères peuvent dépasser 50 Mo. Les journaux de transactions sont petits (généralement <1 Mo chacun).

Jusqu'où Amcache remonte-t-il ?#

La ruche n'est pas bornée par le temps mais par le comportement de rétention propre à Windows. Sur un poste de travail de longue durée, vous pouvez voir des entrées d'inventaire vieilles de mois ou d'années, surtout pour les enregistrements Inventory* où le binaire est encore présent sur disque. Une fois qu'un binaire est supprimé et que l'appraiser a eu plusieurs passages pour s'en apercevoir, l'entrée correspondante vieillit généralement (mais pas toujours).

Amcache enregistre-t-il les DLLs ?#

Oui, dans les schémas modernes. InventoryApplicationFile enregistre à la fois les EXEs et les DLLs (filtré aux fichiers PE en général). Les ruches antérieures à Windows 10 1709 peuvent ne pas le faire, selon le build.

Amcache enregistre-t-il les scripts ?#

En général non pour .ps1, .bat, .vbs, .js, etc. — Amcache se concentre sur les binaires PE. La preuve d'exécution de scripts vient des journaux opérationnels PowerShell, d'AMSI, de Sysmon, ou de Prefetch (pour les invocations de cscript.exe / wscript.exe elles-mêmes).

Quelle est la relation entre Amcache et ShimCache ?#

Ce sont des artefacts différents bien que tous deux impliquent la compatibilité applicative. ShimCache (AppCompatCache dans la ruche SYSTEM) est maintenu par le loader à des fins de compatibilité applicative et enregistre jusqu'à 1024 entrées par hôte avec des métadonnées limitées. Amcache est maintenu par l'appraiser à des fins de télémétrie de compatibilité et enregistre des milliers d'entrées avec des métadonnées riches. Voir Amcache vs ShimCache pour la comparaison complète.

Puis-je lire Amcache.hve sur Linux ou macOS ?#

Oui. Utilisez dotnet AmcacheParser.dll sur un hôte avec le runtime .NET, ou utilisez l'analyseur dans le navigateur de ce site qui s'exécute en WebAssembly et fonctionne dans tout navigateur moderne quel que soit l'OS hôte. Le format de ruche est portable.

Amcache est-il une preuve recevable en justice ?#

Cela dépend de la juridiction et de la façon dont la preuve a été collectée. Amcache lui-même est bien documenté et largement utilisé en DFIR, ce qui aide. Les règles habituelles s'appliquent : préserver la ruche (et ses journaux de transactions) avec une chaîne de custody documentée, la hasher avant et après, et utiliser un analyseur documenté dont vous pouvez défendre le comportement.


Où aller ensuite#

Si vous êtes arrivé ici en cherchant…

Articles liés

Retour à tous les articles