Récupérer la preuve de binaires supprimés depuis Amcache
La fonctionnalité la plus sous-estimée de Amcache.hve est qu'il
survit aux binaires qu'il enregistre. Un attaquant peut supprimer
un outil dès qu'il n'en a plus besoin ; le snapshot d'Amcache du
chemin, hash, éditeur, version et heure d'inventaire de ce binaire
persiste typiquement dans la ruche pendant des semaines ou des mois
après.
Cette page est le workflow pratique pour utiliser Amcache quand le binaire lui-même est parti.
Pour la référence plus large sur l'artefact, voir la référence complète Amcache ; pour la comparaison canonique, voir Amcache vs Prefetch et Amcache vs ShimCache.
Pourquoi Amcache survit au binaire#
Le Compatibility Appraiser, la tâche planifiée qui alimente Amcache,
écrit le snapshot d'inventaire une fois par scan. Une fois qu'une
entrée est dans Root\InventoryApplicationFile, elle reste dans la
ruche jusqu'à ce que :
- Un passage ultérieur de l'appraiser la supprime activement (ce qui est l'exception, pas la règle), ou
- La ruche elle-même soit supprimée ou vieillie.
En pratique, sur un poste de travail Windows 11 typique, les entrées persistent pendant des mois même après que le binaire sous-jacent est parti. Sur un poste de travail de longue durée, des entrées de plusieurs années sont courantes.
Cela fait d'Amcache l'artefact post-suppression le plus fiable pour les fichiers PE sur Windows.
Ce que vous récupérez#
Quand un binaire est supprimé, vous perdez typiquement :
- Le binaire lui-même.
- Les horodatages système de fichiers (l'entrée MFT peut aussi être effacée ou écrasée).
- La capacité de vérifier directement le hash du binaire.
Ce que vous conservez dans Amcache :
| Récupéré | Depuis le champ Amcache |
|---|---|
| Chemin complet au moment de l'inventaire | FullPath / LowerCaseLongPath |
| SHA-1 des 31 premiers Mio | Hash (retirer le préfixe 0000 de FileId) |
| Taille du fichier | Size |
| Date de link PE | LinkDate |
| Éditeur | Publisher / PublisherName |
| Chaînes de version | Version, BinFileVersion, ProductVersion |
| Nom de produit | ProductName |
| Identité applicative | ProgramId |
| Quand l'appraiser l'a vu | KeyLastWriteTimestamp |
Cet ensemble de champs récupérés est suffisant pour :
- Soumettre le hash à VirusTotal / flux TI — voir FileId Amcache expliqué.
- Pivoter sur
ProgramIdsur d'autres hôtes — voir Mouvement latéral et pivot avec leProgramIdAmcache. - Borner dans le temps l'événement de dépôt en utilisant
KeyLastWriteTimestamp— voir Horodatages Amcache expliqués. - Reconstruire l'identité du binaire même si ses octets sont partis.
Le workflow post-suppression#
Un workflow reproductible pour « nous pensons qu'ils ont déposé un outil ici, puis l'ont effacé » :
1. Collecter la ruche plus les journaux de transactions#
Copy-Item 'C:\Windows\AppCompat\Programs\Amcache.hve' 'C:\Triage\' -Force
Copy-Item 'C:\Windows\AppCompat\Programs\Amcache.hve.LOG1' 'C:\Triage\' -Force
Copy-Item 'C:\Windows\AppCompat\Programs\Amcache.hve.LOG2' 'C:\Triage\' -ForceSi vous soupçonnez que l'attaquant a également supprimé ou modifié la ruche active, énumérez les Volume Shadow Copies et récupérez la copie de la ruche de chaque shadow également — voir Où se trouve Amcache.hve sur disque. Sur un poste de travail, deux ou trois shadow copies couvrent typiquement la dernière semaine ou les deux dernières ; chacune est une cible d'analyse séparée.
2. Analyser en multi-pass#
AmcacheParser.exe `
-f 'C:\Triage\Amcache.hve' `
--csv 'C:\Triage\Parsed' `
--csvf 'HOST01_amcache.csv' `
--mpLe drapeau --mp est critique ici : il récupère les entrées
orphelines que l'appraiser a désassociées mais pas entièrement
supprimées. Certaines sont exactement le genre de lignes « juste
supprimées » que vous cherchez.
3. Filtrer les PE non signés suspects dans les chemins inscriptibles par l'utilisateur#
C'est le filtre de triage standard, avec une modification : retirer
tout filtre sur FullPath existant sur disque car le fichier
n'existe plus.
Import-Csv 'C:\Triage\Parsed\HOST01_amcache_UnassociatedFileEntries.csv' |
Where-Object {
$_.IsPeFile -eq 'True' -and
-not $_.Publisher -and
$_.FullPath -match '\\Users\\|\\ProgramData\\|\\AppData\\|\\Temp\\'
} |
Select-Object KeyLastWriteTimestamp, FullPath, Hash, Size, LinkDate |
Sort-Object KeyLastWriteTimestampCette liste est ce que l'attaquant a déposé (et probablement supprimé), tel que l'appraiser l'a vu.
4. Recroiser contre le système de fichiers#
Pour chaque ligne, vérifier si le fichier existe encore sur disque :
$rows = Import-Csv ... | Where-Object { ... }
$rows | ForEach-Object {
$exists = Test-Path -LiteralPath $_.FullPath
[pscustomobject]@{
Path = $_.FullPath
Hash = $_.Hash
SeenAt = $_.KeyLastWriteTimestamp
OnDisk = $exists
}
} | Where-Object { -not $_.OnDisk }Les lignes où OnDisk = False sont les candidats binaires
supprimés.
5. Enrichir avec VirusTotal#
Hashez tout, soumettez, capturez les résultats. Même une recherche à faible volume contre l'API publique fait remonter des correspondances known-malicious sur un hôte typiquement infecté.
import csv, requests, time
API = 'https://www.virustotal.com/api/v3/files/'
HEADERS = {'x-apikey': '<your-key>'}
with open('deleted_candidates.csv', newline='') as f:
for row in csv.DictReader(f):
h = row['Hash']
if not h:
continue
r = requests.get(API + h, headers=HEADERS)
if r.status_code == 200:
stats = r.json()['data']['attributes']['last_analysis_stats']
if stats.get('malicious', 0) > 0:
print(h, row['Path'], stats)
time.sleep(15)Pour les fichiers plus grands que 31 Mio, rappelez-vous que le hash Amcache est un prefix hash, pas un hash de fichier complet — voir FileId Amcache expliqué pour la nuance.
6. Borner dans le temps l'événement de dépôt#
Pour chaque binaire supprimé confirmé malveillant, prenez son
KeyLastWriteTimestamp ± 1 heure et tirez de cette fenêtre :
- Toutes les autres lignes Amcache (pilote + périphérique + autres fichiers inventoriés dans la même fenêtre — souvent le reste de la boîte à outils de l'attaquant).
- Prefetch (sortie
PECmd) — confirme l'exécution. - Security 4688 / Sysmon 1 — création de processus avec ligne de commande.
- Sysmon 11 (file create) — confirme quand le fichier a été écrit.
- Entrées MFT pour
\Users\bob\...\— corroboration au niveau système de fichiers.
Vous reconstruisez typiquement toute la séquence dépôt + exécution + nettoyage à partir de ces jointures, même si le binaire lui-même est parti.
Contre-mesures anti-forensiques#
Quelques techniques spécifiques que les attaquants utilisent pour cacher des binaires d'Amcache, et comment les détecter :
Déposer et supprimer dans un cycle d'appraiser#
Si l'attaquant dépose un binaire, l'exécute et le supprime tout dans un seul intervalle d'appraiser (typiquement <24 h sur les postes de travail), le binaire peut n'apparaître jamais dans Amcache.
Détection : recroiser Prefetch (qui enregistre l'exécution en temps réel, survivant à la suppression du binaire) et Sysmon 1 / 11 (création de processus et fichier en temps réel) contre Amcache. Les binaires présents dans Prefetch / Sysmon mais absents d'Amcache sont des dépôts « intra-appraiser ».
Modification directe de la ruche#
Un attaquant capable avec des droits admin peut éditer Amcache.hve
pour retirer des entrées spécifiques. C'est peu courant (surtout
parce que c'est fastidieux et que la plupart des attaquants ne s'en
embêtent pas) mais possible.
Détection : analyser la ruche active ET les versions de la ruche de toutes les Volume Shadow Copies. Les differ. Les entrées présentes dans les shadows mais absentes du live sont la preuve d'un nettoyage délibéré. Les entrées présentes dans la ruche active mais à des offsets inattendus sont la preuve d'une restructuration.
Sabotage de l'appraiser#
Désactiver ou paralyser la tâche planifiée Compatibility Appraiser arrête entièrement les nouvelles écritures Amcache. Les anciennes entrées restent (jusqu'à ce qu'elles vieillissent), mais la ruche se « fige » au moment du sabotage.
Détection : vérifiez l'historique de tâche de l'appraiser dans le
journal d'événements Task Scheduler
(Microsoft-Windows-TaskScheduler/Operational). Regardez la
distribution des KeyLastWriteTimestamp de la ruche — si elle
s'arrête brusquement à une date donnée et que vous attendez des
entrées plus récentes, suspectez un sabotage. Vérifiez aussi
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
pour DisableInventory ou des valeurs de désactivation similaires.
Suppression de la ruche#
La suppression pure et simple d'Amcache.hve est l'option la plus
brutale. Windows recrée la ruche au prochain passage de l'appraiser,
mais le contenu précédent est perdu du système actif.
Détection : le KeyLastWriteTimestamp le plus ancien de la ruche
recréée sera bien plus récent qu'attendu. Comparez aux Volume Shadow
Copies et aux sauvegardes forensiques ; récupérez la ruche précédente
depuis les shadows.
Ce qu'Amcache ne peut pas récupérer#
Malgré ses forces comme artefact post-suppression, Amcache ne récupère pas :
- Le binaire lui-même (vous avez un hash et des métadonnées, pas des octets).
- La ligne de commande du binaire à l'exécution (utilisez la liste de fichiers de Prefetch et 4688 / Sysmon 1 à la place).
- Les destinations réseau que le binaire a contactées (utilisez SRUM, les journaux firewall, la télémétrie réseau EDR).
- Le contexte utilisateur sous lequel le binaire a tourné (utilisez 4688 / Sysmon 1).
Amcache est un artefact dans la trousse à outils post-suppression. Couplez avec les autres sources de preuve d'exécution Windows pour une reconstruction complète.
Voir aussi#
- Référence complète Amcache — l'artefact en intégralité.
- Amcache vs Prefetch — la comparaison canonique présence-vs-exécution.
- Amcache vs ShimCache — l'autre artefact post-suppression pour les fichiers PE.
- FileId Amcache expliqué — le hash que vous récupérez des binaires supprimés.
- Amcache pour l'investigation de malware — le playbook d'enquête d'intrusion plus large.
Pour explorer votre ruche à la recherche de candidats binaires supprimés sans rien installer, déposez un fichier sur la page d'accueil de l'analyseur — il s'analyse entièrement dans votre navigateur.
Articles liés
- Volatility et Amcache : extraire la ruche depuis des images mémoire
Un guide pratique pour récupérer Amcache depuis une image mémoire Windows en utilisant Volatility — quand la récupération côté mémoire est la seule option, quels plugins utiliser, et comment passer le relais à AmcacheParser.
- Plugin amcache de RegRipper : ce qu'il fait et quand l'utiliser
Un guide pratique sur le plugin amcache de RegRipper — ce qu'il analyse, comment sa sortie texte diffère du CSV d'AmcacheParser, et quand l'utiliser à la place (ou en complément) de l'outil Zimmerman.
- Amcache peut-il être effacé par des attaquants ?
Oui — un attaquant avec des droits admin peut éditer ou supprimer Amcache.hve, mais le nettoyage est détectable : les Volume Shadow Copies, les journaux de transactions et le propre log de l'appraiser préservent généralement l'état antérieur.
- Les colonnes de sortie d'AmcacheParser expliquées : chaque champ CSV décodé
Référence champ par champ pour la sortie CSV d'AmcacheParser — FileId, PathHash, ProgramId, LinkDate, BinFileVersion, IsPeFile et toutes les autres colonnes, avec les pivots qui comptent en DFIR.