Adquisición de Imagen de Disco con dd y dcfldd
Cuándo Usarlo
- Cuando necesite crear una copia forense de un disco sospechoso para investigación
- Durante la respuesta a incidentes, antes de analizar evidencia de disco volátil
- Cuando procedimientos legales o de aplicación de la ley requieran una copia verificada bit a bit
- Antes de realizar cualquier análisis destructivo en un dispositivo de almacenamiento
- Al adquirir imágenes de discos físicos, dispositivos USB o tarjetas de memoria
Prerrequisitos
- Estación de trabajo forense Linux (SIFT, Kali, o cualquier distribución Linux)
dd(preinstalado en todos los sistemas Linux) odcfldd(versión forense mejorada)- Bloqueador de escritura por hardware o software configurado
- Disco de destino con suficiente almacenamiento (mayor que la fuente)
- Privilegios root/sudo en la estación de trabajo forense
- Utilidades de hashing SHA-256 o MD5 (
sha256sum,md5sum)
Flujo de Trabajo
Paso 1: Identificar el Dispositivo de Destino y Activar Protección contra Escritura
# Listar todos los dispositivos de bloque conectados para identificar el destino
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL
# Verificar los detalles del dispositivo
fdisk -l /dev/sdb
# Activar bloqueo de escritura por software (si no hay bloqueador por hardware)
blockdev --setro /dev/sdb
# Verificar estado de solo lectura
blockdev --getro /dev/sdb
# Salida: 1 (significa que solo lectura está activado)
# Alternativamente, usar reglas udev para bloqueo de escritura persistente
echo 'SUBSYSTEM=="block", ATTRS{serial}=="WD-WCAV5H861234", ATTR{ro}="1"' > /etc/udev/rules.d/99-writeblock.rules
udevadm control --reload-rules
Paso 2: Preparar el Destino y Documentar la Fuente
# Crear estructura de directorios del caso
mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}
# Documentar información de la unidad fuente
hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt
# Registrar el número de serie y modelo
smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt
# Hash previo del dispositivo fuente
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_before.txt
Paso 3: Adquirir la Imagen Usando dd
# Adquisición básica con dd, progreso y manejo de errores
dd if=/dev/sdb of=/cases/case-2024-001/images/evidence.dd \
bs=4096 \
conv=noerror,sync \
status=progress 2>&1 | tee /cases/case-2024-001/logs/dd_acquisition.log
# Para imágenes comprimidas y ahorrar espacio
dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | \
gzip -c > /cases/case-2024-001/images/evidence.dd.gz
# Usando dd con un recuento específico para adquisición parcial
dd if=/dev/sdb of=/cases/case-2024-001/images/first_1gb.dd \
bs=1M count=1024 status=progress
Paso 4: Adquirir Usando dcfldd (Método Forense Preferido)
# Instalar dcfldd si no está presente
apt-get install dcfldd
# Adquirir imagen con hashing integrado y salida dividida
dcfldd if=/dev/sdb \
of=/cases/case-2024-001/images/evidence.dd \
hash=sha256,md5 \
hashwindow=1G \
hashlog=/cases/case-2024-001/hashes/acquisition_hashes.txt \
bs=4096 \
conv=noerror,sync \
errlog=/cases/case-2024-001/logs/dcfldd_errors.log
# Dividir imágenes grandes en segmentos manejables
dcfldd if=/dev/sdb \
of=/cases/case-2024-001/images/evidence.dd \
hash=sha256 \
hashlog=/cases/case-2024-001/hashes/split_hashes.txt \
bs=4096 \
split=2G \
splitformat=aa
# Adquirir con pase de verificación
dcfldd if=/dev/sdb \
of=/cases/case-2024-001/images/evidence.dd \
hash=sha256 \
hashlog=/cases/case-2024-001/hashes/verification.txt \
vf=/cases/case-2024-001/images/evidence.dd \
verifylog=/cases/case-2024-001/logs/verify.log
Paso 5: Verificar la Integridad de la Imagen
# Hash de la imagen adquirida
sha256sum /cases/case-2024-001/images/evidence.dd | \
tee /cases/case-2024-001/hashes/image_hash.txt
# Comparar hashes de fuente e imagen
diff <(sha256sum /dev/sdb | awk '{print $1}') \
<(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}')
# Si se usan imágenes divididas, verificar cada segmento
sha256sum /cases/case-2024-001/images/evidence.dd.* | \
tee /cases/case-2024-001/hashes/split_image_hashes.txt
# Re-hash de la fuente para confirmar que no ocurrieron cambios
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_after.txt
diff /cases/case-2024-001/hashes/source_hash_before.txt \
/cases/case-2024-001/hashes/source_hash_after.txt
Paso 6: Documentar el Proceso de Adquisición
# Generar reporte de adquisición
cat << 'EOF' > /cases/case-2024-001/notes/acquisition_report.txt
REPORTE DE ADQUISICIÓN DE IMAGEN DE DISCO
==========================================
Número de Caso: 2024-001
Fecha/Hora: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
Examinador(a): [Nombre]
Dispositivo Fuente: /dev/sdb
Modelo: [de salida de hdparm]
Serial: [de salida de hdparm]
Tamaño: [de salida de fdisk]
Herramienta de Adquisición: dcfldd v1.9.1
Tamaño de Bloque: 4096
Bloqueador de Escritura: [Modelo de hardware/software]
Archivo de Imagen: evidence.dd
Hash de Imagen (SHA-256): [del archivo hash]
Hash de Fuente (SHA-256): [del archivo hash]
Coincidencia de Hash: SÍ/NO
Errores Durante la Adquisición: [del registro de errores]
EOF
# Comprimir logs para archivo
tar -czf /cases/case-2024-001/acquisition_package.tar.gz \
/cases/case-2024-001/hashes/ \
/cases/case-2024-001/logs/ \
/cases/case-2024-001/notes/
Conceptos Clave
| Concepto | Descripción |
|---|---|
| Copia bit a bit | Réplica exacta de la fuente incluyendo espacio no asignado y slack space |
| Bloqueador de escritura | Mecanismo por hardware o software que impide escrituras en el medio de evidencia |
| Verificación hash | Hash criptográfico que compara fuente e imagen para probar integridad |
| Tamaño de bloque (bs) | Tamaño de fragmento de transferencia que afecta velocidad; 4096 o 64K típico en forense |
| conv=noerror,sync | Continuar en errores de lectura y rellenar con ceros para mantener alineación de offset |
| Cadena de custodia | Rastro documentado que prueba que la evidencia no ha sido manipulada |
| Imágenes divididas | Fragmentar imágenes grandes en archivos más pequeños para almacenamiento y transporte |
| Formato raw/dd | Formato de imagen bit a bit sin sobrecarga de contenedor de metadatos |
Herramientas y Sistemas
| Herramienta | Propósito |
|---|---|
| dd | Utilidad estándar de duplicación de discos Unix para imágenes raw |
| dcfldd | Versión mejorada de dd del DoD Computer Forensics Laboratory con hashing |
| dc3dd | Otra variante forense de dd del DoD Cyber Crime Center |
| sha256sum | Cálculo de hash SHA-256 para verificación de integridad |
| blockdev | Comando Linux para configurar modo de solo lectura en dispositivos de bloque |
| hdparm | Identificación de unidades y reporte de parámetros |
| smartctl | Obtención de datos S.M.A.R.T. para salud e identificación de la unidad |
| lsblk | Enumeración e identificación de dispositivos de bloque |
Escenarios Comunes
Escenario 1: Adquirir un Disco Duro de una Laptop Sospechosa
Conecte el disco mediante un bloqueador de escritura por hardware Tableau T35u, identifíquelo como /dev/sdb, use dcfldd con hashing SHA-256, divida en segmentos de 4GB para archivo en DVD, verifique que los hashes coincidan, documente en las notas del caso.
Escenario 2: Obtener Imagen de una Unidad Flash USB desde una Estación de Trabajo Comprometida
Use bloqueo de escritura por software con blockdev --setro, adquiera con dcfldd incluyendo hashing dual MD5 y SHA-256, la imagen es lo suficientemente pequeña para un solo archivo, verifique y almacene en un disco de caso cifrado.
Escenario 3: Adquisición Remota a Través de Red
Use dd canalizado a través de netcat o ssh para adquisición remota: ssh root@remote "dd if=/dev/sda bs=4096" | dd of=remote_image.dd bs=4096, haga hash en ambos extremos de forma independiente para verificar la integridad de la transferencia.
Escenario 4: Adquirir desde un Disco en Fallo
Use ddrescue primero para recuperar sectores legibles, luego use dd con conv=noerror,sync para rellenar huecos con ceros, documente qué sectores no fueron legibles en el registro de errores.
Formato de Salida
Resumen de Adquisición:
Fuente: /dev/sdb (500GB Western Digital WD5000AAKX)
Destino: /cases/case-2024-001/images/evidence.dd
Herramienta: dcfldd 1.9.1
Tamaño de Bloque: 4096 bytes
Duración: 2h 15m 32s
Bytes Copiados: 500.107.862.016
Errores: 0 sectores defectuosos
SHA-256 Fuente: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
SHA-256 Imagen: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
Verificación: PASÓ - Los hashes coinciden