Volatility et Amcache : extraire la ruche depuis des images mémoire

AmcacheParser.exe lit le fichier Amcache.hve sur disque. Mais que faire si vous n'avez qu'une image mémoire — un dump RAM compatible Volatility d'un hôte Windows, sans acquisition disque ?

La réponse est Volatility, avec ses plugins de ruches de registre, utilisé pour extraire la copie en mémoire vive de la ruche Amcache et la dumper sur disque où AmcacheParser peut la lire. Cette page est le guide pratique.

Pour la référence Amcache plus large, voir la référence complète Amcache ; pour le côté analyseur, voir le guide complet d'AmcacheParser.


Quand vous en avez besoin#

La ruche côté disque est généralement la bonne source pour l'analyse Amcache. Le workflow côté mémoire est pour les cas où vous ne pouvez pas obtenir le disque :

  • Acquisition mémoire-uniquement. Une capture en live-response a tiré un dump RAM et le triage a sélectionné des artefacts, mais aucune image disque complète n'est disponible.
  • Protocoles preuves-volatiles-d'abord. Certaines procédures de réponse à incident dictent la capture RAM avant le disque, et la capture disque est retardée de plusieurs heures ou jours.
  • La ruche côté disque a été manipulée et vous suspectez que la copie en mémoire a des données plus fraîches / différentes.
  • Disque chiffré, mémoire déchiffrée. Scénarios Bitlocker / full-disk-encryption où l'image disque n'est pas encore déchiffrable mais le dump RAM contient le contenu déchiffré de la ruche.

Pour la forensique ordinaire en live-host ou post-incident sur disque, préférez le workflow côté disque décrit dans Où se trouve Amcache.hve sur disque.


Ce que Volatility extrait#

Windows garde chaque ruche du registre chargée — SYSTEM, SOFTWARE, SAM, NTUSER.DAT par utilisateur, et Amcache.hve si chargé — en mémoire kernel dans une structure appelée la hive list. L'appraiser charge typiquement Amcache.hve pendant les passages d'inventaire et la garde chargée pendant un certain temps après ; une image mémoire capturée pendant ou peu après un passage d'inventaire contient la ruche complète en mémoire.

Les plugins registre de Volatility savent comment parcourir la hive list et extraire des ruches individuelles. Les plugins pertinents :

Version Volatility Plugin
Volatility 2 hivelist, hivedump, printkey, dumpregistry
Volatility 3 windows.registry.hivelist, windows.registry.printkey, windows.registry.hivedump, windows.registry.dumphive

Le workflow de base est identique entre versions, avec des différences de syntaxe de commande.


Étape 1 : énumérer les ruches chargées#

D'abord, voyez quelles ruches sont chargées en mémoire. Volatility 3 :

vol -f memory.dmp windows.registry.hivelist

Volatility 2 :

vol.py -f memory.dmp --profile=Win10x64_19041 hivelist

Vous devriez voir une ligne pour chaque ruche chargée avec une adresse virtuelle et le chemin de fichier de la ruche. Si Amcache était chargée, vous voyez :

Offset (V)        FileFullPath
0xfffff8a0...     \??\C:\Windows\AppCompat\Programs\Amcache.hve

Si Amcache n'est pas dans la hive list, l'appraiser ne la tenait pas ouverte au moment de la capture. Passez à l'acquisition ou à la récupération côté disque ; Amcache mémoire-uniquement n'est pas disponible pour cette image.


Étape 2 : dumper la ruche sur disque#

Une fois que vous avez l'adresse virtuelle, dumpez la ruche :

# Volatility 3 — replace 0xfffff8a0... with the real offset from hivelist
vol -f memory.dmp windows.registry.dumphive --offset 0xfffff8a0... > Amcache.hve

Volatility 2 :

vol.py -f memory.dmp --profile=Win10x64_19041 dumpregistry \
       --offset 0xfffff8a0... --dump-dir ./dumped

La sortie est un blob binaire qu'AmcacheParser peut lire. Note :

  • Il n'y a pas de journaux de transactions. La représentation en mémoire de la ruche ne porte pas .LOG1 / .LOG2. AmcacheParser émettra un avertissement sur les journaux manquants ; c'est attendu.
  • La ruche est un snapshot ponctuel de ce qui était en mémoire à l'acquisition. Elle reflète ce que l'appraiser avait écrit dans la structure de ruche en mémoire.

Étape 3 : analyser avec AmcacheParser#

Passez la ruche dumpée à AmcacheParser comme d'habitude :

AmcacheParser.exe `
  -f .\Amcache.hve `
  --csv .\out `
  --csvf MEMORY_amcache.csv `
  --mp

La sortie est le même ensemble de CSVs par catégorie que vous obtiendriez d'une analyse côté disque — AssociatedFileEntries.csv, UnassociatedFileEntries.csv, et ainsi de suite. Triez et pivotez comme dans le playbook d'investigation de malware.


Particularités spécifiques à la récupération côté mémoire#

Une poignée de choses à savoir lors du travail à partir d'une ruche dumpée depuis la mémoire :

Les données des journaux de transactions sont perdues#

La représentation en mémoire n'inclut pas les écritures non committées qui étaient encore dans les journaux de transactions au moment de la capture. Pour une ruche qui était activement en cours d'écriture lorsque la mémoire a été acquise, il vous manque peut-être les toutes dernières entrées. Une récupération côté disque de .LOG1 et .LOG2 les attraperait.

La couverture dépend de ce qui était chargé#

Certains builds Windows et configurations déchargent Amcache après chaque passage de l'appraiser ; d'autres la gardent chargée. Si vous ne trouvez aucun Amcache dans la hive list, cela ne signifie pas qu'Amcache est absent sur l'hôte — cela signifie qu'il n'était pas chargé au moment de la capture.

L'interprétation du schéma peut nécessiter le bon profil Volatility#

Le profil de Volatility 2 doit correspondre à l'OS capturé pour que le code de parcours du registre fonctionne proprement. Avec un mauvais profil, la ruche dumpée peut être incomplète ou corrompue. Volatility 3 est bien plus permissif ici (il auto-détecte), mais un dump avec mauvais profil reste possible.

La ruche dumpée peut s'analyser avec des avertissements#

AmcacheParser peut émettre des avertissements sur des journaux de transactions manquants, des cellules tronquées ou un schéma inattendu. Ces avertissements sont attendus lors d'un dump depuis la mémoire et ne signifient pas nécessairement que les données sont mauvaises — mais traitez les anomalies avec un soin particulier et recroisez avec le disque si possible.


Comparer les ruches mémoire et disque#

Si vous avez à la fois un dump mémoire et une image disque du même hôte (pris à des moments proches), analysez les deux copies Amcache et diffez-les :

$disk   = Import-Csv .\HOST01_disk_amcache_UnassociatedFileEntries.csv |
            Select-Object Hash, FullPath, KeyLastWriteTimestamp
$memory = Import-Csv .\HOST01_memory_amcache_UnassociatedFileEntries.csv |
            Select-Object Hash, FullPath, KeyLastWriteTimestamp
 
# Rows in memory but not on disk
$memory | Where-Object { $h = $_.Hash; -not ($disk | Where-Object { $_.Hash -eq $h }) }
 
# Rows on disk but not in memory
$disk | Where-Object { $h = $_.Hash; -not ($memory | Where-Object { $_.Hash -eq $h }) }

Ce que chaque delta signifie :

  • En mémoire uniquement : l'appraiser l'a écrit dans la ruche en mémoire mais le changement n'avait pas été flushé sur disque (et l'aurait été à un arrêt propre). Souvent le signal le plus frais que vous avez.
  • Sur disque uniquement : l'entrée était dans la ruche disque mais la ruche en mémoire l'avait déchargée / vieillie au moment de la capture. Moins intéressant — le disque fait autorité pour celles-ci.

Si la ruche disque a été manipulée, la ruche mémoire préserve souvent les entrées originales — ce qui rend le workflow côté mémoire également utile comme contre-mesure anti-forensique.


Quand c'est le mauvais workflow#

Trois cas où vous ne devriez pas vous embêter avec la récupération Amcache côté mémoire :

Vous avez le disque#

Le workflow côté disque vous donne la ruche plus les journaux de transactions plus les Volume Shadow Copies. Le côté mémoire vous donne un seul snapshot. Préférez toujours le disque si disponible.

L'acquisition est trop ancienne#

Si le dump mémoire date de plusieurs jours et que vous cherchez l'état actuel, la ruche sur disque (qui a été mise à jour depuis le dump) est plus utile. Les dumps mémoire sont ponctuels.

La ruche n'était pas chargée à la capture#

Si hivelist ne montre pas Amcache, aucun plugin ne la fera apparaître par magie. Passez au disque ou à la récupération par entrée depuis la mémoire de processus de l'appraiser (rare, avancé).


Voir aussi#

Si vous avez une ruche (dumpée depuis la mémoire ou autrement) et voulez juste un coup d'œil rapide, déposez-la sur la page d'accueil de l'analyseur — elle s'exécute entièrement dans votre navigateur.

Articles liés

Retour à tous les articles