Analyse de la base de registre Windows pour la recherche d'artéfacts
Quand l'utiliser
- Lors de l'investigation de l'activité utilisateur sur un système Windows lors d'un incident
- Pour identifier les mécanismes d'autorun/persistance utilisés par des malwares
- Lors de la recherche de logiciels installés, de périphériques USB et de connexions réseau
- Lors d'enquêtes sur des menaces internes pour reconstruire les actions des utilisateurs
- Pour corréler les horodatages de la base de registre avec d'autres artéfacts forensiques
Prérequis
- Image forensique ou fichiers de ruches de registre extraits
- RegRipper, Registry Explorer (Eric Zimmerman) ou python-registry
- Accès aux emplacements des ruches de registre (SAM, SYSTEM, SOFTWARE, NTUSER.DAT, UsrClass.dat)
- Compréhension de la structure de la base de registre Windows (ruches, clés, valeurs)
- SIFT Workstation ou environnement d'analyse forensique
Workflow
Étape 1 : Extraire les ruches de registre de l'image forensique
# Monter l'image forensique en lecture seule
mkdir /mnt/evidence
mount -o ro,loop,offset=$((2048*512)) /cases/case-2024-001/images/evidence.dd /mnt/evidence
# Copier les ruches système
cp /mnt/evidence/Windows/System32/config/SAM /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/SYSTEM /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/SOFTWARE /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/SECURITY /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/DEFAULT /cases/case-2024-001/registry/
# Copier les ruches spécifiques aux utilisateurs
cp /mnt/evidence/Users/*/NTUSER.DAT /cases/case-2024-001/registry/
cp /mnt/evidence/Users/*/AppData/Local/Microsoft/Windows/UsrClass.dat /cases/case-2024-001/registry/
# Copier les journaux de transactions (pour la récupération de ruches sales)
cp /mnt/evidence/Windows/System32/config/*.LOG* /cases/case-2024-001/registry/logs/
# Hacher toutes les ruches extraites
sha256sum /cases/case-2024-001/registry/* > /cases/case-2024-001/registry/hive_hashes.txt
Étape 2 : Analyser avec RegRipper pour l'extraction automatisée d'artéfacts
# Installer RegRipper
git clone https://github.com/keydet89/RegRipper3.0.git /opt/regripper
# Exécuter RegRipper sur NTUSER.DAT (profil utilisateur)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-f ntuser > /cases/case-2024-001/analysis/ntuser_report.txt
# Exécuter sur la ruche SYSTEM
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-f system > /cases/case-2024-001/analysis/system_report.txt
# Exécuter sur la ruche SOFTWARE
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-f software > /cases/case-2024-001/analysis/software_report.txt
# Exécuter sur la ruche SAM (comptes utilisateurs)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SAM \
-f sam > /cases/case-2024-001/analysis/sam_report.txt
# Exécuter des plugins spécifiques
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p userassist > /cases/case-2024-001/analysis/userassist.txt
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p usbstor > /cases/case-2024-001/analysis/usbstor.txt
Étape 3 : Extraire les entrées de persistance et d'autorun
# Utiliser python-registry pour une extraction ciblée
pip install python-registry
python3 << 'PYEOF'
from Registry import Registry
# Ouvrir la ruche SOFTWARE
reg = Registry.Registry("/cases/case-2024-001/registry/SOFTWARE")
# Vérifier les clés Run (démarrage automatique)
autorun_paths = [
"Microsoft\\Windows\\CurrentVersion\\Run",
"Microsoft\\Windows\\CurrentVersion\\RunOnce",
"Microsoft\\Windows\\CurrentVersion\\RunServices",
"Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run",
"Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run"
]
for path in autorun_paths:
try:
key = reg.open(path)
print(f"\n=== {path} (Dernière modification : {key.timestamp()}) ===")
for value in key.values():
print(f" {value.name()} : {value.value()}")
except Registry.RegistryKeyNotFoundException:
pass
# Vérifier les services installés
key = reg.open("Microsoft\\Windows NT\\CurrentVersion\\Svchost")
print(f"\n=== Groupes Svchost ===")
for value in key.values():
print(f" {value.name()} : {value.value()}")
PYEOF
# Vérifier NTUSER.DAT pour les autorun spécifiques à l'utilisateur
python3 << 'PYEOF'
from Registry import Registry
reg = Registry.Registry("/cases/case-2024-001/registry/NTUSER.DAT")
user_autorun = [
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce",
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\Run"
]
for path in user_autorun:
try:
key = reg.open(path)
print(f"\n=== {path} (Dernière modification : {key.timestamp()}) ===")
for value in key.values():
print(f" {value.name()} : {value.value()}")
except Registry.RegistryKeyNotFoundException:
pass
PYEOF
Étape 4 : Analyser les artéfacts d'activité utilisateur
# Extraire les données UserAssist (historique d'exécution des programmes avec encodage ROT13)
python3 << 'PYEOF'
from Registry import Registry
import codecs, struct, datetime
reg = Registry.Registry("/cases/case-2024-001/registry/NTUSER.DAT")
ua_path = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\UserAssist"
key = reg.open(ua_path)
for guid_key in key.subkeys():
count_key = guid_key.subkey("Count")
print(f"\n=== {guid_key.name()} ===")
for value in count_key.values():
decoded_name = codecs.decode(value.name(), 'rot_13')
data = value.value()
if len(data) >= 16:
run_count = struct.unpack('<I', data[4:8])[0]
focus_count = struct.unpack('<I', data[8:12])[0]
timestamp = struct.unpack('<Q', data[60:68])[0] if len(data) >= 68 else 0
if timestamp > 0:
ts = datetime.datetime(1601,1,1) + datetime.timedelta(microseconds=timestamp//10)
print(f" {decoded_name} : Exécutions={run_count}, Focus={focus_count}, Dernière={ts}")
else:
print(f" {decoded_name} : Exécutions={run_count}, Focus={focus_count}")
PYEOF
# Extraire les documents récents (listes MRU)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p recentdocs > /cases/case-2024-001/analysis/recentdocs.txt
# Extraire les URLs tapées (navigateur)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p typedurls > /cases/case-2024-001/analysis/typedurls.txt
# Extraire les chemins tapés dans l'Explorateur
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p typedpaths > /cases/case-2024-001/analysis/typedpaths.txt
Étape 5 : Extraire les informations système et réseau
# Nom d'ordinateur et version OS depuis la ruche SYSTEM
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p compname > /cases/case-2024-001/analysis/system_info.txt
# Interfaces réseau et configuration
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p nic2 >> /cases/case-2024-001/analysis/system_info.txt
# Historique des réseaux sans fil
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-p networklist > /cases/case-2024-001/analysis/network_history.txt
# Configuration du fuseau horaire
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p timezone > /cases/case-2024-001/analysis/timezone.txt
# Heure d'arrêt
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p shutdown > /cases/case-2024-001/analysis/shutdown.txt
# Logiciels installés depuis les clés Uninstall
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-p uninstall > /cases/case-2024-001/analysis/installed_software.txt
Concepts clés
| Concept | Description |
|---|---|
| Ruche de registre | Fichier binaire stockant une section de la base de registre (SAM, SYSTEM, SOFTWARE, NTUSER.DAT) |
| MRU (les plus récemment utilisés) | Listes qui suivent les fichiers, commandes et termes de recherche récemment accédés |
| UserAssist | Entrées de registre encodées en ROT13 qui tracent l'exécution des programmes avec horodatage |
| ShimCache | Cache de compatibilité d'applications enregistrant les programmes exécutés |
| AmCache | Historique d'exécution détaillé incluant les hachages SHA-1 des exécutables |
| BAM/DAM | Moderateurs d'activité en arrière-plan/de bureau traçant l'exécution de programmes sous Win10+ |
| Dernière écriture (Last Write Time) | Horodatage sur les clés de registre indiquant leur dernière modification |
| Journaux de transactions | Fichiers journaux permettant de récupérer l'état du registre après un arrêt incorrect |
Outils et systèmes
| Outil | Objectif |
|---|---|
| RegRipper | Extraction automatisée d'artéfacts de registre avec architecture de plugins |
| Registry Explorer | Outil GUI d'Eric Zimmerman pour l'analyse interactive du registre |
| python-registry | Bibliothèque Python pour l'analyse programmatique des ruches de registre |
| RECmd | Outil en ligne de commande d'Eric Zimmerman pour l'analyse du registre |
| yarp | Yet Another Registry Parser pour l'analyse basée sur Python |
| AppCompatCacheParser | Analyseur dédié à ShimCache/AppCompatCache |
| AmcacheParser | Outil d'analyse dédié à AmCache.hve |
| ShellBags Explorer | Outil spécialisé pour l'analyse des artéfacts ShellBag |
Scénarios courants
Scénario 1 : Investigation de persistance de malware Extraire les ruches SOFTWARE et NTUSER.DAT, vérifier toutes les clés Run/RunOnce pour des entrées non autorisées, examiner les services pour des ajouts suspects, vérifier les clés de registre des tâches planifiées, corréler les horodatages d'autorun avec la chronologie d'exécution du malware.
Scénario 2 : Reconstruction d'activité utilisateur Analyser UserAssist pour l'historique d'exécution des programmes, examiner RecentDocs pour les fichiers accédés, vérifier TypedPaths pour la navigation dans l'Explorateur, extraire ShellBags pour les motifs d'accès aux dossiers, construire une chronologie de l'activité utilisateur autour de la fenêtre de l'incident.
Scénario 3 : Détection de logiciels non autorisés Analyser les clés Uninstall pour toutes les applications installées, comparer avec la base de référence des logiciels approuvés, vérifier BAM/DAM pour les programmes récemment exécutés ne figurant pas dans la liste approuvée, examiner AppCompatCache pour les preuves d'exécution même après désinstallation.
Scénario 4 : Investigation d'exfiltration de données via USB Extraire les entrées USBSTOR de la ruche SYSTEM pour les périphériques connectés, corréler les numéros de série des appareils avec MountedDevices, vérifier MountPoints2 dans NTUSER.DAT pour l'accès utilisateur aux supports amovibles, examiner les journaux SetupAPI pour les horodatages de première connexion.
Format de sortie
Résumé de l'analyse de la base de registre :
Système : DESKTOP-ABC123 (Windows 10 Pro Build 19041)
Fuseau horaire : Heure normale de l'Est (UTC-5)
Dernier arrêt : 2024-01-18 23:45:12 UTC
Entrées Autorun :
HKLM Run : 5 entrées (1 suspecte : "updater.exe" -> C:\ProgramData\svc\updater.exe)
HKCU Run : 3 entrées (toutes légitimes)
Services : 142 entrées (2 inconnues : "WinDefSvc", "SysMonAgent")
Activité utilisateur (NTUSER.DAT) :
Programmes UserAssist : 234 entrées
Documents récents : 89 entrées
URLs tapées : 45 entrées
Chemins tapés : 12 entrées
Périphériques USB connectés :
- Kingston DataTraveler (Série : 0019E06B4521) - Première : 2024-01-10, Dernière : 2024-01-18
- WD My Passport (Série : 575834314131) - Première : 2024-01-15, Dernière : 2024-01-15
Logiciels installés : 127 applications
Résultats suspects : 3 éléments signalés pour examen