Aquisição de Imagem de Disco com dd e dcfldd
Quando Usar
- Quando você precisa criar uma cópia forense de um drive suspeito para investigação
- Durante resposta a incidentes, ao preservar evidências voláteis de disco antes da análise
- Quando procedimentos legais ou de aplicação da lei exigem uma cópia bit a bit verificada
- Antes de realizar qualquer análise destrutiva em um dispositivo de armazenamento
- Ao adquirir imagens de unidades físicas, dispositivos USB ou cartões de memória
Pré-requisitos
- Estação de trabalho forense Linux (SIFT, Kali ou qualquer distribuição Linux)
dd(pré-instalado em todos os sistemas Linux) oudcfldd(versão forense aprimorada)- Bloqueador de escrita (hardware) ou proteção contra gravação via software configurada
- Drive de destino com armazenamento suficiente (maior que a origem)
- Privilégios root/sudo na estação de trabalho forense
- Utilitários de hash SHA-256 ou MD5 (
sha256sum,md5sum)
Fluxo de Trabalho
Passo 1: Identificar o Dispositivo Alvo e Ativar a Proteção contra Gravação
# Listar todos os dispositivos de bloco conectados para identificar o alvo
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL
# Verificar os detalhes do dispositivo
fdisk -l /dev/sdb
# Ativar bloqueio de escrita por software (se não houver bloqueador de hardware)
blockdev --setro /dev/sdb
# Verificar o status de somente leitura
blockdev --getro /dev/sdb
# Saída: 1 (significa que somente leitura está ativado)
# Alternativamente, usar regras udev para bloqueio de escrita persistente
echo 'SUBSYSTEM=="block", ATTRS{serial}=="WD-WCAV5H861234", ATTR{ro}="1"' > /etc/udev/rules.d/99-writeblock.rules
udevadm control --reload-rules
Passo 2: Preparar o Destino e Documentar a Origem
# Criar estrutura de diretórios do caso
mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}
# Documentar informações do drive de origem
hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt
# Registrar o número de série e o modelo
smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt
# Calcular hash pré-aquisição do dispositivo de origem
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_before.txt
Passo 3: Adquirir a Imagem Usando dd
# Aquisição básica com dd, com progresso e tratamento de erros
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 imagens comprimidas, economizando espaço
dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | \
gzip -c > /cases/case-2024-001/images/evidence.dd.gz
# Usando dd com um contagem específica para aquisição parcial
dd if=/dev/sdb of=/cases/case-2024-001/images/first_1gb.dd \
bs=1M count=1024 status=progress
Passo 4: Adquirir Usando dcfldd (Método Forense Preferido)
# Instalar dcfldd se não estiver presente
apt-get install dcfldd
# Adquirir imagem com hashing embutido e saída 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 imagens grandes em segmentos gerenciáveis
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 com verificação adicional
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
Passo 5: Verificar a Integridade da Imagem
# Calcular hash da imagem adquirida
sha256sum /cases/case-2024-001/images/evidence.dd | \
tee /cases/case-2024-001/hashes/image_hash.txt
# Comparar hashes da origem e da imagem
diff <(sha256sum /dev/sdb | awk '{print $1}') \
<(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}')
# Se usar imagens divididas, verificar cada segmento
sha256sum /cases/case-2024-001/images/evidence.dd.* | \
tee /cases/case-2024-001/hashes/split_image_hashes.txt
# Recalcular hash da origem para confirmar que não houve alterações
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
Passo 6: Documentar o Processo de Aquisição
# Gerar relatório de aquisição
cat << 'EOF' > /cases/case-2024-001/notes/acquisition_report.txt
RELATÓRIO DE AQUISIÇÃO DE IMAGEM DE DISCO
==========================================
Número do Caso: 2024-001
Data/Hora: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
Examinador: [Nome]
Dispositivo de Origem: /dev/sdb
Modelo: [da saída do hdparm]
Serial: [da saída do hdparm]
Tamanho: [da saída do fdisk]
Ferramenta de Aquisição: dcfldd v1.9.1
Tamanho do Bloco: 4096
Bloqueador de Gravação: [Modelo Hardware/Software]
Arquivo de Imagem: evidence.dd
Hash da Imagem (SHA-256): [do arquivo de hash]
Hash da Origem (SHA-256): [do arquivo de hash]
Correspondência de Hash: SIM/NÃO
Erros Durante a Aquisição: [do log de erros]
EOF
# Comprimir logs para arquivamento
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/
Conceitos Chave
| Conceito | Descrição |
|---|---|
| Cópia bit a bit | Réplica exata da origem, incluindo espaço não alocado e slack space |
| Bloqueador de gravação | Mecanismo de hardware ou software que impede gravações na mídia de evidência |
| Verificação de hash | Hash criptográfico que compara origem e imagem para provar integridade |
| Tamanho do bloco (bs) | Tamanho do bloco de transferência, afeta velocidade; 4096 ou 64K são típicos em forense |
| conv=noerror,sync | Continuar em erros de leitura e preencher com zeros para manter alinhamento de offset |
| Cadeia de custódia | Trilha documentada que prova que a evidência não foi adulterada |
| Imagem dividida | Divisão de imagens grandes em arquivos menores para armazenamento e transporte |
| Formato raw/dd | Formato de imagem bit a bit sem overhead de metadados de container |
Ferramentas e Sistemas
| Ferramenta | Propósito |
|---|---|
| dd | Utilitário padrão Unix de duplicação de disco para imagens raw |
| dcfldd | Versão aprimorada do dd pelo Laboratório de Informática Forense do DoD, com hashing |
| dc3dd | Outra variante forense do dd do Centro de Crimes Cibernéticos do DoD |
| sha256sum | Cálculo de hash SHA-256 para verificação de integridade |
| blockdev | Comando Linux para definir modo somente leitura de dispositivos de bloco |
| hdparm | Identificação de unidades e relatório de parâmetros |
| smartctl | Recuperação de dados S.M.A.R.T. para saúde e identificação do drive |
| lsblk | Enumeração e identificação de dispositivos de bloco |
Cenários Comuns
Cenário 1: Aquisição de Disco Rígido de Laptop Suspeito
Conecte o drive via um bloqueador de escrita de hardware Tableau T35u, identifique como /dev/sdb, use dcfldd com hashing SHA-256, divida em segmentos de 4GB para arquivamento em DVD, verifique se os hashes coincidem, documente nas notas do caso.
Cenário 2: Imagem de um Pen Drive USB de uma Estação de Trabalho Comprometida
Use bloqueio de escrita por software com blockdev --setro, adquira com dcfldd incluindo hashing duplo MD5 e SHA-256, a imagem é pequena o suficiente para um único arquivo, verifique e armazene em um drive de caso criptografado.
Cenário 3: Aquisição Remota Através da Rede
Use dd canalizado via netcat ou ssh para aquisição remota: ssh root@remote "dd if=/dev/sda bs=4096" | dd of=remote_image.dd bs=4096, calcule hash em ambas as extremidades de forma independente para verificar a integridade da transferência.
Cenário 4: Aquisição de um Drive com Falha
Use ddrescue primeiro para recuperar setores legíveis, depois use dd com conv=noerror,sync para preencher lacunas com zeros, documente quais setores ficaram ilegíveis no log de erros.
Formato de Saída
Resumo da Aquisição:
Origem: /dev/sdb (500GB Western Digital WD5000AAKX)
Destino: /cases/case-2024-001/images/evidence.dd
Ferramenta: dcfldd 1.9.1
Tamanho do Bloco: 4096 bytes
Duração: 2h 15m 32s
Bytes Copiados: 500.107.862.016
Erros: 0 setores ruins
SHA-256 da Origem: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
SHA-256 da Imagem: a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
Verificação: APROVADO - Hashes coincidem