13 abril 2011

Crear y montar imágenes raw (2ª parte)


Continuando el post que inició Alejandro Ramos sobre imágenes raw, voy a ampliar alguno de los puntos que se tocaron.

En el post se comentan comandos que derivan del original dd para realizar un clonado de discos. En caso de encontrarnos un disco con sectores defectuosos, el trabajo con ellos se puede convertir una auténtica pesadilla si no utilizamos las herramientas correctas. Si realizamos un clonado de disco con dd, si existe algún error en el disco origen el comando intenta una y otra vez leer el sector defectuoso, quedando atascado el proceso. Para evitarlo se puede realizar el clonado de la siguiente forma:

# dd if=/dev/sda of=/dev/sdb conv=noerror,sync

entonces no se detendrá ante sectores defectuosos y escribirá ceros, de forma que se mantiene el mismo tamaño en el disco destino que en el origen.

Para clonar discos con errores es mejor utilizar ddrescue del paquete gddrescue en Debian/Ubuntu.

La diferencia entre dd y ddrescue es que el primero con las opciones conv=noerror,sync se escriben ceros al encontrarse con un bloque con sectores dañados. Es decir, se escriben tantos ceros como tamaño de bloque se haya indicado con la opción bs. ddrescue en cambio opera a nivel de sector cuando trabaja con bloques dañados, por lo tanto recupera la máxima información posible.

Tal y como se comenta en el manual de ddrescue, la diferencia respecto a otros software como dd_rescue de Garloff, estriba en que este software trabaja de forma intensiva cuando se encuentra errores. En cambio ddrescue se preocupa primero por recuperar la máxima cantidad de datos posible, volviendo después a los bloques que contienen sectores erróneos para recuperar tanto como sea posible. En resumen dd_rescue de primeras trabaja con las zonas erróneas que se va encontrando, pudiendo repercutir esto de forma negativa en el disco. ddrescue en cambio salva todo lo posible antes, y luego se centra en las zonas dañadas.

Para trabajar con discos defectuosos es conveniente seguir los siguientes pasos:
  1. Desmontar los sistemas de ficheros que contengan las particiones/discos que se vayan a copiar. Sino se podrían escribir datos mientras se realiza el clonado, de forma que la copia contenga un sistema de ficheros corrupto (por ejemplo, una parte de un fichero es la original y otra contiene datos modificados).
  2. Ejecutar ddrescue en dos pasadas, de forma que la primera sólo recupera los bloques que no contenga sectores defectuosos y el segundo se centre en recuperar el máximo de los defectuosos. Esto permite que cuando acabe el primer comando (primera pasada) tengamos buena parte de los datos recuperados. En el primer comando se reliza copia de gran cantidad de datos, pero el segundo resulta también costoso al trabajar con sectores dañados:
  3. # ddrescue -v -n /dev/sda /dev/sdb log_ddrescue.txt
    NOTA: con -b se puede indicar el tamaño de bloque para acelerar el clonado de datos. Según www.cgsecurity.org es adecuado trabajar con bloques de 256k-500k:
    # ddrescue -v -r2 -d /dev/sda /dev/sdb log_ddrescue.txt
    NOTA: en este comando no tendría sentido indicar un tamaño de bloque, ya que ddrescue cuando trabaja con bloques que contienen sectores dañados lo hace sector a sector.
  4. Finalmente se intentan solventar incoherencias en los sistemas de ficheros recuperados mediante fsck
Las herramientas anteriormente comentadas son útiles, pero poco eficientes antes discos de gran tamaño como los actuales. Para realizar un clonado eficiente de particiones (no de discos enteros), disponemos de varias herramientas:
  1. partimage: hace una copia a nivel de bloque, y por tanto no es capaz de reestablecer un sistema de fichero a una partición de menor tamaño. No tiene soporte para ext4/btrfs, y con ntfs trabaja en caso de no estar muy fragmentado y no hacer uso de compresión.
  2. partclone: trabaja a nivel de bloque. Tiene soporte para ext4/btrfs/ntfs.
  3. ntfsclone: trabaja a nivel de bloque con el sistema de ficheros NTFS.
  4. IMPORTANTE: partimage/partclone/ntfsclone copian una partición a otra del mismo tamaño; nunca a una de menor tamaño. Y en caso de ser mayor, hay que redimensionar el sistema de ficheros a mano.
  5. fsarchiver: a diferencia de partimage, trabaja a nivel de fichero.
    Tiene soporte para ext4/btrfs/ntfs y también otras características como checksum, compresión multihilo, cifrado y flexibilidad en el tamaño de la partición. Se puede restaurar una copia a una partición de menor o mayor tamaño, sin tener que redimensionar el sistema de ficheros de forma manual.
Por último es importante tener en cuenta que no existe una única tabla de particiones en caso de que una de las particiones primarias sea extendida. Tendremos tantas tablas como particiones lógicas existan más la del MBR. Cada una de estas tablas se almacena en el primer sector de cada partición lógica formando una lista enlazada; de forma que la entrada de la partición extendida del MBR apunta a la tabla de la primera partición lógica, ésta a la segunda, y así hasta llegar a la última.

-----------------------------------
Artículo cortesía de David Montero http://damontero.wordpress.com

2 comments :

ForFor dijo...

Duda de novato forense interesado: ¿es correcto aplicar fsck a una imagen de un disco de un servidor comprometido? ¿seguiría sirviendo como prueba en un juicio? Gracias!

damontero dijo...

Hola ForFor,

considero que aunque las modificaciones que realice fsck sean con la finalidad de obtener un sistema de ficheros consistente, ya no serviría como prueba en un juicio. Justamente por eso, porque se han realizado modificaciones y ya no estaría intacto.

De todas maneras no soy un experto en el tema, ni he participado en peritajes, ni es mi campo :). A ver si alguien con mayores conocimientos nos da su opinión.

Saludos