Análisis del Registro de Windows para Artefactos
Cuándo Usarlo
- Al investigar la actividad de un usuario en un sistema Windows durante un incidente
- Para identificar mecanismos de autorun/persistencia utilizados por malware
- Al rastrear software instalado, dispositivos USB y conexiones de red
- Durante investigaciones de amenazas internas para reconstruir acciones de usuario
- Para correlacionar marcas de tiempo del registro con otros artefactos forenses
Prerrequisitos
- Imagen forense o archivos de hive del registro extraídos
- RegRipper, Registry Explorer (Eric Zimmerman) o python-registry
- Acceso a las ubicaciones de los hives del registro (SAM, SYSTEM, SOFTWARE, NTUSER.DAT, UsrClass.dat)
- Comprensión de la estructura del Registro de Windows (hives, claves, valores)
- SIFT Workstation o entorno de análisis forense
Flujo de Trabajo
Paso 1: Extraer Hives del Registro de la Imagen Forense
# Montar la imagen forense en modo solo lectura
mkdir /mnt/evidence
mount -o ro,loop,offset=$((2048*512)) /cases/case-2024-001/images/evidence.dd /mnt/evidence
# Copiar hives del sistema
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/
# Copiar hives específicos de usuario
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/
# Copiar registros de transacciones (para recuperación de hives sucios)
cp /mnt/evidence/Windows/System32/config/*.LOG* /cases/case-2024-001/registry/logs/
# Generar hash de todos los hives extraídos
sha256sum /cases/case-2024-001/registry/* > /cases/case-2024-001/registry/hive_hashes.txt
Paso 2: Analizar con RegRipper para Extracción Automatizada de Artefactos
# Instalar RegRipper
git clone https://github.com/keydet89/RegRipper3.0.git /opt/regripper
# Ejecutar RegRipper contra NTUSER.DAT (perfil de usuario)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-f ntuser > /cases/case-2024-001/analysis/ntuser_report.txt
# Ejecutar contra el hive SYSTEM
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-f system > /cases/case-2024-001/analysis/system_report.txt
# Ejecutar contra el hive SOFTWARE
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-f software > /cases/case-2024-001/analysis/software_report.txt
# Ejecutar contra el hive SAM (cuentas de usuario)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SAM \
-f sam > /cases/case-2024-001/analysis/sam_report.txt
# Ejecutar plugins específicos
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
Paso 3: Extraer Entradas de Persistencia y Autorun
# Usando python-registry para extracción dirigida
pip install python-registry
python3 << 'PYEOF'
from Registry import Registry
# Abrir hive SOFTWARE
reg = Registry.Registry("/cases/case-2024-001/registry/SOFTWARE")
# Comprobar claves Run (inicio automático)
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} (Última modificación: {key.timestamp()}) ===")
for value in key.values():
print(f" {value.name()}: {value.value()}")
except Registry.RegistryKeyNotFoundException:
pass
# Comprobar servicios instalados
key = reg.open("Microsoft\\Windows NT\\CurrentVersion\\Svchost")
print(f"\n=== Grupos de Svchost ===")
for value in key.values():
print(f" {value.name()}: {value.value()}")
PYEOF
# Comprobar NTUSER.DAT para autorun específico de usuario
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} (Última modificación: {key.timestamp()}) ===")
for value in key.values():
print(f" {value.name()}: {value.value()}")
except Registry.RegistryKeyNotFoundException:
pass
PYEOF
Paso 4: Analizar Artefactos de Actividad del Usuario
# Extraer datos de UserAssist (historial de ejecución de programas con codificación 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}: Ejecuciones={run_count}, Foco={focus_count}, Último={ts}")
else:
print(f" {decoded_name}: Ejecuciones={run_count}, Foco={focus_count}")
PYEOF
# Extraer Documentos Recientes (listas MRU)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p recentdocs > /cases/case-2024-001/analysis/recentdocs.txt
# Extraer URLs escritas (navegador)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p typedurls > /cases/case-2024-001/analysis/typedurls.txt
# Extraer rutas escritas en el Explorador
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p typedpaths > /cases/case-2024-001/analysis/typedpaths.txt
Paso 5: Extraer Información del Sistema y Red
# Nombre del equipo y versión del SO desde el hive SYSTEM
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p compname > /cases/case-2024-001/analysis/system_info.txt
# Interfaces de red y configuración
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p nic2 >> /cases/case-2024-001/analysis/system_info.txt
# Historial de redes inalámbricas
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-p networklist > /cases/case-2024-001/analysis/network_history.txt
# Configuración de zona horaria
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p timezone > /cases/case-2024-001/analysis/timezone.txt
# Hora de apagado
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p shutdown > /cases/case-2024-001/analysis/shutdown.txt
# Software instalado desde claves Uninstall
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-p uninstall > /cases/case-2024-001/analysis/installed_software.txt
Conceptos Clave
| Concepto | Descripción |
|---|---|
| Hive del registro | Archivo binario que almacena una sección del registro (SAM, SYSTEM, SOFTWARE, NTUSER.DAT) |
| MRU (Recientemente Usado) | Listas que rastrean archivos, comandos y términos de búsqueda accedidos recientemente |
| UserAssist | Entradas del registro codificadas en ROT13 que rastrean la ejecución de programas con marcas de tiempo |
| ShimCache | Caché de compatibilidad de aplicaciones que registra programas ejecutados |
| AmCache | Historial detallado de ejecución que incluye hashes SHA-1 de ejecutables |
| BAM/DAM | Moderador de actividad en segundo plano/escritorio que rastrea ejecución de programas en Win10+ |
| Hora de última escritura | Marca de tiempo en las claves del registro que indica cuándo se modificaron por última vez |
| Registros de transacciones | Archivos de diario que permiten recuperar el estado del registro después de un apagado incorrecto |
Herramientas y Sistemas
| Herramienta | Propósito |
|---|---|
| RegRipper | Extracción automatizada de artefactos del registro con arquitectura de plugins |
| Registry Explorer | Herramienta GUI de Eric Zimmerman para análisis interactivo del registro |
| python-registry | Biblioteca Python para análisis programático de hives del registro |
| RECmd | Herramienta de línea de comandos de Eric Zimmerman para análisis del registro |
| yarp | Yet Another Registry Parser para análisis basado en Python |
| AppCompatCacheParser | Analizador dedicado de ShimCache/AppCompatCache |
| AmcacheParser | Herramienta dedicada de análisis de AmCache.hve |
| ShellBags Explorer | Herramienta especializada para analizar artefactos de ShellBag |
Escenarios Comunes
Escenario 1: Investigación de Persistencia de Malware Extraer hives SOFTWARE y NTUSER.DAT, revisar todas las claves Run/RunOnce en busca de entradas no autorizadas, examinar servicios en busca de adiciones sospechosas, verificar claves de registro de tareas programadas, correlacionar marcas de tiempo de autorun con la línea de tiempo de ejecución del malware.
Escenario 2: Reconstrucción de Actividad del Usuario Analizar UserAssist para historial de ejecución de programas, examinar RecentDocs para archivos accedidos, verificar TypedPaths para navegación en el Explorador, extraer ShellBags para patrones de acceso a carpetas, construir una línea de tiempo de actividad del usuario alrededor de la ventana del incidente.
Escenario 3: Detección de Software No Autorizado Analizar claves Uninstall para todas las aplicaciones instaladas, comparar con la línea base de software aprobado, verificar BAM/DAM para programas ejecutados recientemente no en la lista aprobada, examinar AppCompatCache para evidencia de ejecución incluso después de la desinstalación.
Escenario 4: Investigación de Exfiltración de Datos por USB Extraer entradas USBSTOR del hive SYSTEM para dispositivos conectados, correlacionar números de serie de dispositivos con MountedDevices, verificar NTUSER.DAT MountPoints2 para acceso del usuario a medios extraíbles, examinar registros SetupAPI para marcas de tiempo de primera conexión.
Formato de Salida
Resumen de Análisis del Registro:
Sistema: DESKTOP-ABC123 (Windows 10 Pro Build 19041)
Zona Horaria: Hora Estándar del Este (UTC-5)
Último Apagado: 2024-01-18 23:45:12 UTC
Entradas de Autorun:
HKLM Run: 5 entradas (1 sospechosa: "updater.exe" -> C:\ProgramData\svc\updater.exe)
HKCU Run: 3 entradas (todas legítimas)
Servicios: 142 entradas (2 desconocidas: "WinDefSvc", "SysMonAgent")
Actividad del Usuario (NTUSER.DAT):
Programas UserAssist: 234 entradas
Documentos Recientes: 89 entradas
URLs Escritas: 45 entradas
Rutas Escritas: 12 entradas
Dispositivos USB Conectados:
- Kingston DataTraveler (Serial: 0019E06B4521) - Primero: 2024-01-10, Último: 2024-01-18
- WD My Passport (Serial: 575834314131) - Primero: 2024-01-15, Último: 2024-01-15
Software Instalado: 127 aplicaciones
Hallazgos Sospechosos: 3 elementos marcados para revisión