Adquisición de Imagen de Disco con dd y dcfldd
Cuándo Usarlo
- Cuando necesites crear una copia forense de un disco sospechoso para investigación
- Durante la respuesta a incidentes, antes de analizar evidencia volátil en disco
- Cuando procedimientos legales o de aplicación de la ley requieran una copia bit a bit verificada
- 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 configuración de bloqueo por software
- Disco de destino con suficiente almacenamiento (mayor que el origen)
- Privilegios root/sudo en la estación de trabajo forense
- Utilidades de hash 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 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 el Origen
# Crear estructura de directorios del caso
mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}
# Documentar información del disco origen
hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt
# Registrar número de serie y modelo
smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt
# Hash previo del dispositivo origen
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 conteo 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
echo "Instalando dcfldd..."
# apt-get install dcfldd # Comando para distribuciones Debian/Ubuntu
# Adquirir imagen con hash 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 pasada 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 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 origen e imagen
diff <(sha256sum /dev/sdb | awk '{print $1}') \
<(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}')
# Si se usaron 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 del origen para confirmar que no hubo 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 informe de adquisición
cat << 'EOF' > /cases/case-2024-001/notes/acquisition_report.txt
INFORME 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: [Nombre]
Dispositivo Origen: /dev/sdb
Modelo: [de salida hdparm]
Serie: [de salida hdparm]
Tamaño: [de salida fdisk]
Herramienta de Adquisición: dcfldd v1.9.1
Tamaño de Bloque: 4096
Bloqueador de Escritura: [Modelo Hardware/Software]
Archivo de Imagen: evidence.dd
Hash de Imagen (SHA-256): [del archivo de hash]
Hash de Origen (SHA-256): [del archivo de hash]
Coincidencia de Hash: SÍ/NO
Errores Durante la Adquisición: [del log 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 del origen incluyendo espacio no asignado y espacio slack |
| Bloqueador de escritura | Mecanismo de hardware o software que previene escrituras al medio de evidencia |
| Verificación de hash | Hash criptográfico que compara origen e imagen para probar integridad |
| Tamaño de bloque (bs) | Tamaño del chunk de transferencia que afecta la velocidad; típicamente 4096 o 64K en forense |
| conv=noerror,sync | Continuar en caso de errores de lectura y rellenar con ceros para mantener alineación de desplazamiento |
| Cadena de custodia | Registro documentado que demuestra que la evidencia no ha sido manipulada |
| Imagen dividida | Dividir 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 metadatos de contenedor |
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 Laboratorio Forense de Computadoras del DoD con hash integrado |
| dc3dd | Otra variante forense de dd del Centro de Delitos Cibernéticos del DoD |
| sha256sum | Cálculo de hash SHA-256 para verificación de integridad |
| blockdev | Comando Linux para establecer modo de solo lectura en dispositivos de bloque |
| hdparm | Identificación de discos y reporte de parámetros |
| smartctl | Recuperación de datos S.M.A.R.T. para salud e identificación del disco |
| lsblk | Enumeración e identificación de dispositivos de bloque |
Escenarios Comunes
Escenario 1: Adquirir un Disco Duro de una Laptop Sospechosa
Conectar el disco mediante un bloqueador de escritura por hardware Tableau T35u, identificar como /dev/sdb, usar dcfldd con hash SHA-256, dividir en segmentos de 4GB para archivo en DVD, verificar que los hashes coincidan, documentar en notas del caso.
Escenario 2: Imaginar una Unidad Flash USB de una Estación de Trabajo Comprometida
Usar bloqueo de escritura por software con blockdev --setro, adquirir con dcfldd incluyendo hash dual MD5 y SHA-256, la imagen es lo suficientemente pequeña para un archivo único, verificar y almacenar en un disco de caso cifrado.
Escenario 3: Adquisición Remota a Través de Red
Usar dd canalizado a través de netcat o SSH para adquisición remota: ssh root@remoto "dd if=/dev/sda bs=4096" | dd of=imagen_remota.dd bs=4096, hacer hash en ambos extremos de forma independiente para verificar la integridad de la transferencia.
Escenario 4: Adquirir desde un Disco Defectuoso
Usar ddrescue primero para recuperar sectores legibles, luego usar dd con conv=noerror,sync para llenar huecos con ceros, documentar qué sectores fueron ilegibles en el log de errores.
Formato de Salida
Resumen de Adquisición:
Origen: /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 Origen: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
SHA-256 Imagen: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
Verificación: EXITOSA - Los hashes coinciden