Acquisition d'image disque avec dd et dcfldd
Quand l'utiliser
- Lorsque vous devez créer une copie médico-légale d'un disque suspect pour enquête
- Lors d'une réponse à incident avant d'analyser des preuves volatiles sur disque
- Lorsque des procédures judiciaires exigent une copie bit-à-bit vérifiée
- Avant d'effectuer une analyse destructive sur un périphérique de stockage
- Lors de l'acquisition d'images depuis des disques physiques, clés USB ou cartes mémoire
Prérequis
- Poste de travail médico-légal Linux (SIFT, Kali ou toute distribution Linux)
dd(préinstallé sur tous les systèmes Linux) oudcfldd(version médico-légale améliorée)- Bloqueur d'écriture matériel ou blocage en écriture logiciel configuré
- Disque de destination avec suffisamment d'espace (plus grand que la source)
- Privilèges root/sudo sur le poste de travail
- Utilitaires de hachage SHA-256 ou MD5 (
sha256sum,md5sum)
Flux de travail
Étape 1 : Identifier le périphérique cible et activer la protection en écriture
# Lister tous les périphériques de blocs connectés pour identifier la cible
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL
# Vérifier les détails du périphérique
fdisk -l /dev/sdb
# Activer le blocage en écriture logiciel (si aucun bloqueur matériel)
blockdev --setro /dev/sdb
# Vérifier le statut lecture seule
blockdev --getro /dev/sdb
# Sortie : 1 (lecture seule activée)
# Alternative : utiliser les règles udev pour un blocage en écriture permanent
echo 'SUBSYSTEM=="block", ATTRS{serial}=="WD-WCAV5H861234", ATTR{ro}="1"' > /etc/udev/rules.d/99-writeblock.rules
udevadm control --reload-rules
Étape 2 : Préparer la destination et documenter la source
# Créer la structure de répertoires du dossier
mkdir -p /cases/case-2024-001/{images,hashes,logs,notes}
# Documenter les informations du disque source
hdparm -I /dev/sdb > /cases/case-2024-001/notes/source_drive_info.txt
# Enregistrer le numéro de série et le modèle
smartctl -i /dev/sdb >> /cases/case-2024-001/notes/source_drive_info.txt
# Pré-hacher le périphérique source
sha256sum /dev/sdb | tee /cases/case-2024-001/hashes/source_hash_before.txt
Étape 3 : Acquérir l'image avec dd
# Acquisition de base dd avec progression et gestion des erreurs
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
# Pour des images compressées afin d'économiser de l'espace
dd if=/dev/sdb bs=4096 conv=noerror,sync status=progress | \
gzip -c > /cases/case-2024-001/images/evidence.dd.gz
# Utiliser dd avec un compteur spécifique pour une acquisition partielle
dd if=/dev/sdb of=/cases/case-2024-001/images/first_1gb.dd \
bs=1M count=1024 status=progress
Étape 4 : Acquérir avec dcfldd (méthode médico-légale privilégiée)
# Installer dcfldd s'il n'est pas présent
apt-get install dcfldd
# Acquérir l'image avec hachage intégré et sortie segmentée
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
# Segmenter les grandes images en parties gérables
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
# Acquérir avec passe de vérification
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
Étape 5 : Vérifier l'intégrité de l'image
# Hacher l'image acquise
sha256sum /cases/case-2024-001/images/evidence.dd | \
tee /cases/case-2024-001/hashes/image_hash.txt
# Comparer les hachages source et image
diff <(sha256sum /dev/sdb | awk '{print $1}') \
<(sha256sum /cases/case-2024-001/images/evidence.dd | awk '{print $1}')
# Si des images segmentées sont utilisées, vérifier chaque segment
sha256sum /cases/case-2024-001/images/evidence.dd.* | \
tee /cases/case-2024-001/hashes/split_image_hashes.txt
# Re-hacher la source pour confirmer qu'aucun changement n'est survenu
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
Étape 6 : Documenter le processus d'acquisition
# Générer le rapport d'acquisition
cat << 'EOF' > /cases/case-2024-001/notes/acquisition_report.txt
RAPPORT D'ACQUISITION D'IMAGE DISQUE
======================================
Numéro de dossier : 2024-001
Date/Heure : $(date -u +"%Y-%m-%d %H:%M:%S UTC")
Examinateur : [Nom]
Périphérique source : /dev/sdb
Modèle : [depuis la sortie hdparm]
Série : [depuis la sortie hdparm]
Taille : [depuis la sortie fdisk]
Outil d'acquisition : dcfldd v1.9.1
Taille de bloc : 4096
Bloqueur d'écriture : [Modèle matériel/logiciel]
Fichier image : evidence.dd
Hachage image (SHA-256) : [depuis le fichier de hachage]
Hachage source (SHA-256) : [depuis le fichier de hachage]
Correspondance des hachages : OUI/NON
Erreurs lors de l'acquisition : [depuis le journal d'erreurs]
EOF
# Compresser les journaux pour archivage
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/
Concepts clés
| Concept | Description |
|---|---|
| Copie bit-à-bit | Réplique exacte de la source incluant l'espace non alloué et l'espace résiduel |
| Bloqueur d'écriture | Mécanisme matériel ou logiciel empêchant l'écriture sur le support de preuve |
| Vérification par hachage | Hachage cryptographique comparant la source et l'image pour prouver l'intégrité |
| Taille de bloc (bs) | Taille de transfert influençant la vitesse ; 4096 ou 64K typique en forensique |
| conv=noerror,sync | Continuer en cas d'erreurs de lecture et remplir de zéros pour maintenir l'alignement des offsets |
| Chaîne de contrôle | Traçabilité documentée prouvant que les preuves n'ont pas été altérées |
| Imagerie segmentée | Division des grandes images en fichiers plus petits pour le stockage et le transport |
| Format brû/dd | Format d'image bit-à-bit sans surcharge de métadonnées de conteneur |
Outils & systèmes
| Outil | Objectif |
|---|---|
| dd | Utilitaire standard de duplication de disque Unix pour l'imagerie brute |
| dcfldd | Version améliorée de dd par le DoD Computer Forensics Laboratory avec hachage |
| dc3dd | Autre variante forensique de dd du DoD Cyber Crime Center |
| sha256sum | Calcul du hachage SHA-256 pour la vérification d'intégrité |
| blockdev | Commande Linux pour définir le mode lecture seule d'un périphérique de blocs |
| hdparm | Identification du disque et rapport de paramètres |
| smartctl | Récupération des données S.M.A.R.T. pour l'état et l'identification du disque |
| lsblk | Énumération et identification des périphériques de blocs |
Scénarios courants
Scénario 1 : Acquisition du disque dur d'un ordinateur portable suspect
Connectez le disque via un bloqueur d'écriture matériel Tableau T35u, identifiez-le comme /dev/sdb, utilisez dcfldd avec hachage SHA-256, segmentez en morceaux de 4 Go pour archivage sur DVD, vérifiez la correspondance des hachages, documentez dans les notes du dossier.
Scénario 2 : Imagerie d'une clé USB provenant d'un poste de travail compromis
Utilisez un blocage en écriture logiciel avec blockdev --setro, acquérez avec dcfldd incluant double hachage MD5 et SHA-256, l'image est assez petite pour un seul fichier, vérifiez et stockez sur un disque de dossier chiffré.
Scénario 3 : Acquisition à distance via réseau
Utilisez dd en pipe via netcat ou ssh pour une acquisition à distance : ssh root@remote "dd if=/dev/sda bs=4096" | dd of=remote_image.dd bs=4096, hachez les deux extrémités indépendamment pour vérifier l'intégrité du transfert.
Scénario 4 : Acquisition depuis un disque défaillant
Utilisez d'abord ddrescue pour récupérer les secteurs lisibles, puis utilisez dd avec conv=noerror,sync pour combler les trous avec des zéros, documentez les secteurs illisibles dans le journal d'erreurs.
Format de sortie
Résumé de l'acquisition :
Source : /dev/sdb (500 Go Western Digital WD5000AAKX)
Destination : /cases/case-2024-001/images/evidence.dd
Outil : dcfldd 1.9.1
Taille de bloc : 4096 octets
Durée : 2h 15m 32s
Octets copiés : 500 107 862 016
Erreurs : 0 secteurs défectueux
SHA-256 source : a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
SHA-256 image : a3f2b8c9d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
Vérification : RÉUSSIE - Les hachages correspondent