Amcache : la référence forensique complète de la ruche Windows .hve
TL;DR. Amcache est la ruche de registre Windows (
Amcache.hve) que le Microsoft Compatibility Appraiser écrit. Elle consigne chaque PE que l'appraiser a vu sur disque, avec SHA-1, chemin complet, éditeur, link date PE, et l'horodatage d'écriture de l'appraiser. Les analystes l'utilisent pour prouver qu'un binaire était présent (pas nécessairement exécuté), pivoter sur le hash entre hôtes, et récupérer la preuve d'outils d'attaquant supprimés.
Amcache.hve est la ruche qui répond à une question à laquelle aucun autre artefact Windows ne répond proprement : "cet exécutable a-t-il déjà été présent sur cet hôte, avec quel SHA-1, à quel chemin, vers quand ?"
Cette page est la référence sur l'artefact lui-même : ce qu'il est, où il vit, comment Windows le produit, ce que contient chaque clé de premier niveau, comment l'utiliser dans une enquête, et comment il se positionne par rapport aux artefacts voisins. Pour la couverture des outils de parsing, voir le guide complet d'AmcacheParser. Pour la version courte, voir Comprendre Amcache.
D'un coup d'oeil face aux voisins#
| 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 | Compatibility Appraiser |
| Shimcache | Vu par le loader | Aucun | Complet | ~1024 (LRU) | Loader d'Application Compatibility |
| Prefetch | Exécuté | Aucun | Complet | ~1024 fichiers .pf |
Windows Prefetcher |
| SRUM | Ressources consommées, 30-60 jours | Aucun | Complet | Agrégats par app | System Resource Usage Monitor |
| Security 4688 (EVTX) | Processus créé (temps réel) | Aucun | Complet | Borné par la rotation du log | Sous-système d'audit |
Règle pratique : Amcache pour la présence et le hash. Shimcache pour l'attention récente du loader. Prefetch pour l'exécution. SRUM pour l'usage dans le temps. 4688 pour l'événement en temps réel. Détail par paire : Amcache vs Shimcache, Amcache vs Prefetch, Amcache vs SRUM, Amcache vs AppCompatCache.
Ce qu'est vraiment Amcache#
Une ruche de registre. Même format binaire que SYSTEM, SOFTWARE, SAM, SECURITY et NTUSER.DAT. Pas un journal, pas une base de données, pas une liste plate. Un arbre clé/valeur avec des valeurs typées. C'est cette structure qui la rend à la fois riche et un peu pénible à lire à la main.
La ruche est remplie par le Microsoft Compatibility Appraiser, une tâche planifiée sous \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser. L'appraiser scanne le système à la recherche des logiciels installés et présents, collecte les métadonnées d'en-tête PE et écrit des enregistrements d'inventaire structurés dans la ruche. À peu près quotidiennement sur les stations Windows 10 / 11, tous les quelques jours sur Server, hebdomadairement ou moins sur Server Core.
L'appraiser faisait à l'origine partie du Customer Experience Improvement Program (CEIP). La valeur forensique d'Amcache est, en quelque sorte, un accident : l'appraiser avait besoin d'un inventaire local pour savoir quoi envoyer à Microsoft, et c'est cet inventaire local que les analystes utilisent comme pivot.
Pourquoi les analystes y tiennent#
Trois propriétés rendent Amcache extraordinaire :
- Elle survit à la suppression. Un wiper retire le fichier du disque ; le snapshot d'inventaire reste dans la ruche. Souvent des mois. Les journaux de transactions préservent souvent aussi des entrées que la ruche vivante a perdues.
- Elle pré-hashe le binaire. SHA-1 des 31 premiers MiB au moment de l'inventaire. Même si vous n'avez plus le binaire, vous avez un hash à soumettre à VirusTotal, à des feeds TI, à des allowlists internes.
- Elle enregistre le chemin. L'endroit où vivait le binaire sur le disque est souvent toute l'histoire.
\Users\<name>\AppData\Local\Temp\svchost.exeest sa propre mise en accusation.
Où vit Amcache#
C:\Windows\AppCompat\Programs\Amcache.hve
C:\Windows\AppCompat\Programs\Amcache.hve.LOG1
C:\Windows\AppCompat\Programs\Amcache.hve.LOG2
.LOG1 et .LOG2 sont les journaux de transactions de la ruche. Récupérez toujours les trois. Ne prendre que la ruche, c'est manquer en silence les écritures les plus récentes encore bufferisées dans les journaux.
Pour la référence longue de l'emplacement et de la collecte, voir Où se trouve Amcache.hve sur le disque.
Historique du schéma#
Une histoire courte mais désordonnée :
- Windows 7 / Server 2008 R2 :
RecentFileCache.bcf, un binaire plat, bien plus pauvre. Pas Amcache. - Windows 8 / 8.1 :
Amcache.hvearrive sous forme de ruche avec les clésRoot\FileetRoot\Programs(schéma legacy). - Windows 10 build 1709 (Fall Creators Update, 2017) :
Root\InventoryApplicationFileet la famille élargieInventory*arrivent (schéma moderne). - Windows 11 : Poursuit le schéma Windows 10, avec des ajouts mineurs, des enregistrements driver / périphérique plus granulaires.
L'analyse moderne travaille contre le schéma moderne Inventory*. Les clés legacy restent sur certaines builds et méritent d'être vérifiées sur les vieux systèmes et sur les hôtes où l'appraiser a été désactivé. Spécificités par version : Amcache sur Windows 11 et 10, Amcache sur Windows Server.
Structure de la ruche#
Sur une ruche Windows 11 moderne, Root contient :
Root\
├── InventoryApplication
├── InventoryApplicationDriver
├── InventoryApplicationFile
├── InventoryApplicationFramework
├── InventoryApplicationShortcut
├── InventoryDeviceContainer
├── InventoryDeviceInterface
├── InventoryDevicePnp
├── InventoryDriverBinary
├── InventoryDriverPackage
├── InventoryMiscellaneousUUPInfo
├── File (legacy)
└── Programs (legacy)
Les cinq clés que vous touchez sur la plupart des cas :
| Clé | Ce qu'elle enregistre |
|---|---|
InventoryApplicationFile |
Chaque PE que l'appraiser a inventorié. Chemin complet, SHA-1, link date, éditeur, version. La source unique la plus riche. |
InventoryApplication |
Applications installées. Parent des enregistrements fichier via ProgramId. |
InventoryDriverBinary |
Chaque binaire de pilote chargé, avec les flags signed/kernel-mode. Critique pour BYOVD. |
InventoryDeviceContainer |
Enregistrements de périphérique à friendly name : imprimantes, écrans, supports amovibles. |
InventoryDevicePnp |
Enregistrements d'énumération PnP, un par interface de périphérique. Jonction avec DeviceContainer via InstanceId. |
Pour le tour clé par clé complet, voir Structure du registre Amcache.
Versionnement du schéma#
Le schéma a bougé plusieurs fois au cours de la vie de Windows 10. De nouveaux noms de valeurs apparaissent, les anciens changent de type ou disparaissent. C'est pourquoi un visualiseur de registre générique convient mal : les valeurs sont correctes mais sans étiquette, et vous passez plus de temps à croiser des billets de blog qu'à analyser. Utilisez un parseur dédié (AmcacheParser, le parseur navigateur de ce site ou le plugin amcache de RegRipper) et laissez l'outil suivre le schéma à votre place.
Les champs qui méritent leur place#
Une poignée de valeurs par entrée porte 90 % du poids investigatif.
FileId#
La chaîne de 41 caractères "0000" + sha1_hex. Les "0000" initiaux sont un tag de type historique. Les 40 caractères hex suivants sont le SHA-1 des 31 premiers MiB. Enlevez le préfixe avant de soumettre à VirusTotal. AmcacheParser le fait pour vous dans la colonne Hash.
Deux pièges :
- Le hash ne couvre que les 31 premiers MiB. Pour les installeurs et les gros binaires, c'est un hash de préfixe, pas un hash de contenu complet. En dessous de 31 MiB, le hash de préfixe est égal au SHA-1 standard.
- VirusTotal renvoie un résultat vide si vous incluez le préfixe
"0000", et le résultat vide ressemble à "hash inconnu". Trompeur.
Couverture complète : FileId Amcache expliqué.
ProgramId#
Un hash d'identité de 44 caractères que Windows assigne à une application logique, dérivé du nom, de l'éditeur, de la version et de la langue. Relie un fichier dans InventoryApplicationFile à son application parente dans InventoryApplication. Stable entre hôtes pour la même installation. Utile pour les pivots inter-hôtes.
Couverture complète : ProgramId Amcache expliqué.
Horodatages#
Amcache expose plusieurs horodatages distincts. Les confondre est l'erreur n°1 des nouveaux analystes :
| Champ | Ce qu'il représente |
|---|---|
KeyLastWriteTimestamp |
Dernière écriture registre de la clé conteneur. Ce qui se rapproche le plus de "quand Amcache l'a enregistré". |
LinkDate |
TimeDateStamp PE. Quand le binaire a été compilé. Contrôlable par l'attaquant. À ne pas traiter comme un temps de présence. |
LastModified (quand présent) |
Marqueur de dernier-modifié côté inventaire. Pas dans tous les schémas. |
MsiInstallDate |
Quand le MSI parent a été installé (s'il y en a un). |
Le bon pivot pour "quand ce binaire est-il apparu sur cet hôte ?" est KeyLastWriteTimestamp. Voir Horodatages Amcache expliqués.
Path, publisher, IsPeFile#
Le filtre de triage qui fait l'essentiel du travail :
IsPeFile = TrueETPublishervide ETFullPathsous\Users\,\AppData\,\ProgramData\ou\Temp\.
Appliqué à InventoryApplicationFile, ça remonte la grande majorité des artefacts de malware commodity sur un hôte infecté typique. Beaucoup de faux positifs (applis portables, outils de dev, scripts personnalisés) mais c'est un filtre de triage, pas une règle de détection.
Ce qu'Amcache n'est pas#
Trois idées reçues tenaces qui produisent des conclusions erronées :
Pas "preuve d'exécution"#
Un binaire dans Amcache signifie que l'appraiser a vu le fichier au moment de l'inventaire. L'appraiser inventorie sur la base du chemin, pas sur la base de l'exécution. Un binaire peut apparaître dans Amcache sans avoir jamais été exécuté.
Pour l'exécution : Prefetch (le plus fort), Sysmon 1, Security 4688, Shimcache pour corroborer, SRUM pour la corrélation sur fenêtre plus large. Voir Amcache vs Prefetch et Amcache vs Shimcache.
Pas exhaustive#
L'appraiser rate des choses :
- Fichiers hors des chemins qu'il scanne.
- Fichiers apparus puis disparus entre passes de l'appraiser (drops transitoires).
- Fichiers sur des hôtes durcis où l'appraiser est désactivé.
- Sur les vieux builds Windows, fichiers hors du scope legacy
Programs/File.
L'absence dans Amcache n'est pas la preuve que le binaire n'a jamais été présent. C'est la preuve que l'appraiser ne l'a pas vu.
Pas inviolable#
La ruche est sur le disque à un emplacement connu. Un admin peut l'éditer, la supprimer ou arrêter le planificateur de l'appraiser. Inhabituel dans les intrusions commodity (le bruit dépasse rarement le gain) mais possible. Traitez Amcache comme un signal parmi d'autres, pas comme une vérité de terrain. Voir Peut-on effacer Amcache ?.
Utiliser Amcache dans une enquête#
La boucle standard sur une intrusion Windows :
- Collecter :
Amcache.hve+Amcache.hve.LOG1+Amcache.hve.LOG2. La cibleAmcachede KAPE le fait en une commande.Windows.Forensics.Amcachede Velociraptor le fait à distance. - Parser : AmcacheParser avec
--mppour récupérer les entrées orphelines. - Filtre de triage : PE non signés dans un chemin inscriptible par l'utilisateur, contre
*_UnassociatedFileEntries.csv. Typiquement quelques dizaines de lignes sur un hôte infecté. - Pivoter : SHA-1 contre VirusTotal, feed TI, détections historiques.
FullPathcontre la timeline du système de fichiers et Prefetch. - Corroborer l'exécution : Prefetch (définitif), Sysmon
1/7(création de processus et chargement d'image), Security 4688. - Borner dans le temps :
KeyLastWriteTimestamp± 1h. Tirer tous les événements, entrées MFT / USN, et écritures registre de cette fenêtre.
La dernière étape est celle que la plupart des analystes sautent et celle dont la plupart des rapports ont besoin. Un constat issu d'Amcache plus Prefetch plus un 4688 est rapportable. Un constat issu d'Amcache seul est assorti du bémol "preuve de présence de fichier, exécution non corroborée".
Pour des scénarios précis :
- Récupérer la preuve de binaires supprimés depuis Amcache
- Chasser les malwares commodity avec Amcache
- Historique de périphériques USB et amovibles
- Pivot de mouvement latéral
Outillage#
| Outil | Le mieux pour |
|---|---|
| AmcacheParser d'Eric Zimmerman | DFIR de production sur une station Windows. L'implémentation canonique. |
| Parseur navigateur | Triage, formation, analystes non-Windows, hôtes verrouillés. WebAssembly, sans upload. |
| Plugin amcache de RegRipper | Analyse interactive rapide dans un sweep RegRipper plus large. |
| Plugins Volatility | Extraire la ruche d'une image mémoire, puis passer à AmcacheParser. |
Pour la question pratique "lequel maintenant" : AmcacheParser pour l'enquête, le parseur navigateur pour le triage ou un coup d'oeil rapide sans rien installer.
FAQ#
Quelle est la taille typique d'Amcache.hve ?#
2-25 Mo sur une station Windows 11. 50+ Mo sur les machines de dev ou serveurs chargés. Les journaux de transactions sont petits, généralement sous 1 Mo chacun.
Jusqu'où en arrière ?#
Mois à années sur des stations qui tournent longtemps. La ruche ne purge pas activement les entrées tant que le binaire est encore reconnaissable. Une fois le binaire retiré et que l'appraiser a eu plusieurs passes pour le remarquer, l'entrée vieillit en général jusqu'à disparaître (mais pas toujours).
Amcache enregistre-t-elle les DLLs ?#
Oui, à partir de Windows 10 build 1709. EXE et DLL classés comme PE.
Amcache enregistre-t-elle les scripts ?#
Non pour .ps1, .bat, .vbs, .js. Amcache, c'est PE uniquement. Les preuves d'exécution de scripts viennent des journaux opérationnels PowerShell, d'AMSI, de Sysmon ou des entrées Prefetch pour cscript.exe / wscript.exe.
Amcache vs Shimcache ?#
Artefacts différents, bien que tous deux dans l'infrastructure Application Compatibility. Shimcache (AppCompatCache dans SYSTEM) est maintenu par le loader, plafonné à 1024 entrées, sans hash. Amcache est maintenue par l'appraiser, effectivement illimitée, avec SHA-1 et des métadonnées plus riches. Voir Amcache vs Shimcache.
Linux / macOS ?#
dotnet AmcacheParser.dll avec le runtime .NET, ou le parseur navigateur qui tourne partout où il y a un navigateur moderne. Voir Comment lire Amcache.hve sous Linux.
Recevabilité au tribunal ?#
Dépend de la juridiction et de la collecte. Amcache est bien documentée et largement utilisée. Documentez la chaîne de garde, hashez avant et après le parsing, et utilisez un parseur dont vous pouvez défendre le comportement au contre-interrogatoire.
Pour aller plus loin#
- Yogesh Khatri, Amcache.hve in Windows 8. Le reverse engineering public original.
- Eric Zimmerman, AmcacheParser. Outil offline de référence.
- Willi Ballenthin et l'équipe Mandiant pour le mapping original des champs du schéma legacy.
- Les recherches d'internals du registre de Maxim Suhanov, qui ont tué le mythe "Amcache = exécution".
Si vous ne retenez qu'une chose : hash d'abord, chemin ensuite, temps en troisième. Amcache donne le meilleur d'elle comme index de hash qui se trouve aussi connaître les fichiers vus par Windows, et le pire quand ses horodatages sont traités comme une vérité de terrain.
Articles liés
- Qu'est-ce que Root\InventoryApplicationFile ? (glossaire)
La clé principale d'Amcache. Une sous-clé par PE inventorié par l'appraiser, avec hash, chemin, éditeur, date de lien et un horodatage d'écriture du registre. Là où passent 90 % du temps d'analyste.
- Où se trouve Amcache.hve sur le disque (et comment le collecter)
Chemin : C:\Windows\AppCompat\Programs\Amcache.hve plus les fichiers .LOG. Toujours les trois. Et la bonne façon de collecter depuis un hôte vivant et depuis des clichés.
- Récupérer la preuve de binaires supprimés depuis Amcache
Amcache survit aux binaires qu'elle enregistre. Chemin, SHA-1, éditeur, link date et moment d'inventaire persistent des mois après que l'attaquant a effacé le fichier. Le workflow pratique.
- FileId Amcache expliqué : le format de hash SHA-1 que Windows stocke
FileId est '0000' plus le SHA-1 des 31 premiers MiB. Retirez le préfixe ou vos lookups VirusTotal ne renvoient silencieusement rien. La référence complète, avec les pièges.