Skip to content

Obtención de imágenes forenses mediante derivados mejorados de dd: dcfldd y dc3dd

Publicado por Sergio Hernando el 25 septiembre 2010

Hola,

Cualquier persona que haya utilizado algún derivado Unix en alguna ocasión probablemente haya empleado la utilidad dd de las herramientas GNU. Esta sencilla herramienta permite, entre otras cosas, la creación de imágenes crudas (bit a bit) de medios que luego pueden ser empleadas en análisis forense. Aunque el mercado está repleto de soluciones con funcionalidad smart copying, la captura de imágenes crudas sigue siendo lo más recomendable cuando se analiza un medio, ya que el espacio no asignado puede contener trazas útiles para la investigación que serí­an obviadas si empleamos utilidades de copia inteligente.

El escenario común para el uso de dd es la generación de una imagen forense. Por ejemplo:

dcfldd

Hasta la aparición de dc3dd, una de mis variantes favoritas de dd fue dcfldd, que está ligeramente más enfocada al análisis forense y a la seguridad. Además de compartir la misma funcionalidad básica, dcfldd tiene algunas caracterí­sticas adicionales, como por ejemplo, la posibilidad de realizar hashing de los contenidos al vuelo, tiene una salida más práctica, informando sobre la tasa de transferencia de la operación, permite escribir distintos logs en fichero (hash, verificación, errores), incorpora funcionalidad de particionado y posibilita la escritura de la imagen a múltiples medios simultáneamente. Veamos algunos ejemplos:

Obtención de imagen y grabación de hash SHA-256 del medio en fichero:

root@hpsergio-linux:/home/shernando# dcfldd if=/dev/sdb of=/imagen2.img hash=sha256 hashlog=dcfldd.log

root@hpsergio-linux:/home/shernando# cat dcfldd.log
Total (sha256): 88c5c432ee81014ad0a0fc0b6524d47a021150c56894ed25633fdb062df38224

Obtención de imagen, grabación múltiples hashes y escritura de log de errores:

root@hpsergio-linux:/home/shernando# dcfldd if=/dev/sdb of=/imagen3.img hash=md5,sha256 hashlog=dcfldd.log errlog=error.log

root@hpsergio-linux:/# cat dcfldd.log
Total (md5): fa169590f4028ba6e8e1e46511db4bac
Total (sha256): 88c5c432ee81014ad0a0fc0b6524d47a021150c56894ed25633fdb062df38224

Variaciones de dcfldd. dc3dd

Como es habitual en el mundo del software libre, la disponibilidad del código anima a muchos desarrolladores a realizar cambios y adaptaciones. Basado en dcfldd, dc3dd incorpora algunas pequeñas variaciones que también lo hacen interesante. Veamos unos ejemplos:

Obtención de imagen, cálculo MD5, verificación y escritura de log con indicador de progreso:

root@hpsergio-linux:/# dc3dd if=/dev/sdb of=/imagen4.img hash=md5 log=dc3dd.log vf=/dev/sdb verifylog=verifylog.log progress=on
warning: sector size not probed, assuming 512
dc3dd 6.12.4 started at 2010-09-25 22:39:33 +0200
command line: dc3dd if=/dev/sdb of=/imagen4.img hash=md5 log=dc3dd.log vf=/dev/sdb verifylog=verifylog.log progress=on
compiled options: DEFAULT_BLOCKSIZE=32768
sector size: 512 (assumed)
md5 TOTAL: fa169590f4028ba6e8e1e46511db4bac
519700480 bytes (496 M) compared (??%), 4.55223 s, 109 M/s
dc3dd: Verify PASSED
dc3dd completed at 2010-09-25 22:39:37 +0200

Obtención de imagen, cálculo MD5 y SHA-256 fragmentado en bloques, verificación y escritura de log con indicador de progreso:

root@hpsergio-linux:/# dc3dd if=/dev/sdb of=/imagen5.img hash=md5,sha256 log=dc3dd.log hashwindow=100M vf=/dev/sdb verifylog=verifylog.log progress=on
warning: sector size not probed, assuming 512
dc3dd 6.12.4 started at 2010-09-25 22:49:29 +0200
command line: dc3dd if=/dev/sdb of=/imagen5.img hash=md5,sha256 log=dc3dd.log hashwindow=100M vf=/dev/sdb verifylog=verifylog.log progress=on
compiled options: DEFAULT_BLOCKSIZE=32768
sector size: 512 (assumed)
md5 0- 104857600: 42bbf19ad43e700b7d6ce03fd37e9d86
sha256 0- 104857600: 33339d75d04d25c6138ad88c9ea19132872d2ec60696689015f867c4b23f167f
md5 104857600- 209715200: d22dc0b1e8a7ca9e229b6f1d6a21100d
sha256 104857600- 209715200: d7b3046d7b343c2106b11d908e53ee8a57448782818f2f72b5ed988de55ffcc2
md5 209715200- 314572800: 07c9a77c3478bbbbea5f71e914c80f81
sha256 209715200- 314572800: 54947c480890f6acc57038ebc2fc4f364cb6ae62b1a9781b92fcacd647ddbec0
md5 314572800- 419430400: 67ad41e5eaad136d43e08386fdc6f9c2
sha256 314572800- 419430400: b6cf5657dbe25def6f66f2ef8a6313b6acd871495f8facebc256c1c778537dec
md5 419430400- 519700480: ccf6f958cdcd169757343f3c576eb449
sha256 419430400- 519700480: e9314e5975c93501ae192d0e01f00c7806b1245f82f9b53b20e1e554c072c2aa
md5 TOTAL: fa169590f4028ba6e8e1e46511db4bac
sha256 TOTAL: 88c5c432ee81014ad0a0fc0b6524d47a021150c56894ed25633fdb062df38224
519700480 bytes (496 M) compared (??%), 18.4117 s, 27 M/s
dc3dd: Verify PASSED
dc3dd completed at 2010-09-25 22:49:48 +0200

Una de las funcionalidades de dc3dd que más me gusta es la posibilidad de efectuar recuperación dinámica de errores. Esto implica que en caso de encontrarse un error, en vez de descartarse el bloque, se regresa a dicho sector con la finalidad de recuperar datos. Esta funcionalidad debe invocarse de modo explícito en la consola mediante "conv=noerror,sync" impidiendo el cache de lectura del sistema "iflag=direct"

root@hpsergio-linux:/# dc3dd if=/dev/sdb of=/imagen6.img conv=sync,noerror iflag=direct log=dc3dd.log
warning: sector size not probed, assuming 512
dc3dd 6.12.4 started at 2010-09-25 23:04:42 +0200
command line: dc3dd if=/dev/sdb of=/imagen6.img conv=sync,noerror iflag=direct log=dc3dd.log
compiled options: DEFAULT_BLOCKSIZE=32768
sector size: 512 (assumed)
1015040+0 sectors in
1015040+0 sectors out
519700480 bytes (496 M) copied (??%), 153.927 s, 3.2 M/s
dc3dd completed at 2010-09-25 23:07:16 +0200

Casi siempre que se habla de la adquisición de imágenes dd es la referencia, si bien, como habéis podido comprobar, las mejoras que introducen dcfldd y dc3dd hacen que estas variantes sean especialmente atractivas cuando se quiere enfocar el trabajo a tareas forenses.

Un saludo,

Be Sociable, Share!

Categoría/s → Forensics, Seguridad

Un comentario
  1. 18 febrero 2016
    fernando permalink

    el parametro hashwindow en dc3dd no existe, es un parámetro de dcfldd. En uno de los ejemplos aparece en la línea de comandos de dc3dd. Para obtener varios hashes de una imagen con dc3dd hay que usar la opcion hofs pero tiene la desventaja que divide la imagen en tantas veces que queramos, no deja el archivo .dd como uno una unidad. Por otro lado dcfldd sí lo hace pero la mayor desventaja que es sumamente mas lento que dc3dd.

Escribir un comentario

Note: XHTML permitido. Tu email nunca será publicado.

Suscribirse a los comentarios via RSS