Como administrador del sistema, parte de su responsabilidad es ayudar a los usuarios a administrar sus datos. Uno de los aspectos vitales para hacerlo es asegurarse de que su organización tenga un buen plan de copias de seguridad y que sus usuarios hagan sus copias de seguridad regularmente o no tengan que hacerlo porque ha automatizado el proceso.
Sin embargo, a veces sucede lo peor. Un archivo se elimina por error, un sistema de archivos se corrompe o una partición se pierde y, por el motivo que sea, las copias de seguridad no contienen lo que necesita.
Como discutimos en Cómo prevenir y recuperarse de la eliminación accidental de archivos en Linux, antes de intentar recuperar datos perdidos, debe averiguar por qué faltan los datos en primer lugar. Es posible que un usuario simplemente haya extraviado el archivo o que haya una copia de seguridad que el usuario no conozca. Pero si un usuario eliminó un archivo sin copias de seguridad, entonces sabe que necesita recuperar un archivo eliminado. Sin embargo, si una tabla de particiones se ha codificado, entonces los archivos no se pierden en absoluto y es posible que desee considerar usar TestDisk para recuperar la tabla de particiones o la partición misma.
¿Qué sucede si la recuperación de su archivo o partición no es exitosa o solo es parcial? Entonces es el momento de Bisturí. Scalpel realiza operaciones de tallado de archivos basadas en patrones que describen tipos de archivos únicos. Busca estos patrones basándose en cadenas binarias y expresiones regulares, y luego extrae el archivo en consecuencia.
Esta herramienta no se mantiene actualmente, pero siempre es confiable, se compila y se ejecuta exactamente como se esperaba. Si está ejecutando Red Hat Enterprise Linux (RHEL) 7, RHEL 8 o Fedora, puede descargar los instaladores RPM de Scalpel, junto con su dependencia, libtre
. , de klaatu.fedorapeople.org.
Empezando con Bisturí
Scalpel viene con una lista completa de tipos de archivos y sus características de identificación más exclusivas. A veces, un archivo se puede identificar por un texto predecible en su cabeza y cola:
htm n 50000 <html </html>
Mientras que en otras ocasiones, los códigos hexadecimales de aspecto críptico son necesarios:
jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
Scalpel espera que dupliques /etc/scalpel.conf
edite su copia para incluir los tipos de archivos que espera recuperar y para excluir los tipos de archivos que sabe que no necesita. Por ejemplo, si sabe que no tiene o no le importa .fws
archivos, luego comente esa línea fuera del archivo. Hacer esto puede acelerar el proceso de recuperación y reducir los falsos positivos.
En el archivo de configuración, el formato de una definición de archivo es, de izquierda a derecha:
- La extensión del archivo.
- Si el encabezado y el pie de página distinguen entre mayúsculas y minúsculas (
y
on
). - El tamaño de archivo mínimo y máximo que desea que Scalpel encuentre.
- Un encabezado estándar que identifica el comienzo del archivo.
- Un pie de página estándar que identifica el final del archivo.
El footer
campo es opcional. Si no se proporciona un pie de página, Scalpel extrae la cantidad de bytes que estableció como el valor máximo del tipo de archivo.
Es posible que un esfuerzo de recuperación solo rescate parte de un archivo, como este JPG recuperado en su mayoría:
Este resultado significa que probablemente necesite aumentar el valor máximo de los límites del archivo y luego volver a escanear, para que también se pueda recuperar el final del archivo:
Definiendo nuevos tipos de archivos
Primero, haga una copia del archivo de configuración de Scalpel. Si todos sus usuarios generan datos similares, es posible que solo necesite un archivo de configuración para toda su organización. O quizás le resulte mejor tener un archivo de configuración por departamento.
Para agregar sus propios tipos de archivos a una configuración de Scalpel, comience con algunas investigaciones forenses.
Para los archivos de texto, lo ideal es tener una estructura predecible que pueda anticipar. Por ejemplo, un archivo XML probablemente comience con <xml
y termina con </xml
. Los archivos binarios son igualmente predecibles. Usando el hexdump
comando, puede ver un encabezado típico del tipo de archivo que desea definir. Estos son los resultados de un XCF, el archivo gráfico en capas predeterminado de GIMP:
$ head --bytes 8 example.xcf | hexdump --canonical
00000000 67 69 6d 70 20 78 63 66 |gimp xcf|
00000008
Esta salida es de un sistema Red Hat Enterprise Linux 8. En sistemas más antiguos, puede ser necesaria una sintaxis más antigua:
$ head --bytes 8 example.xcf | hexdump -C
00000000 67 69 6d 70 20 78 63 66 |gimp xcf|
00000008
La salida canónica de hexdump
muestra la dirección en la columna del extremo izquierdo y los valores decodificados en el extremo derecho. En la columna central están los bytes hexadecimales de los primeros 8 bytes de la primera línea del archivo XCF.
La mayoría de los archivos binarios en /etc/scalpel.conf
se ven bastante similares a esa salida, excepto que estos valores están precedidos por \x
secuencia de escape para indicar que los números son en realidad dígitos hexadecimales. Por ejemplo, un archivo JPG se ve así en el archivo de configuración:
jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
Compare ese valor con un volcado hexadecimal de prueba de los primeros 6 bytes (porque esa es la cantidad de bytes scalpel.conf
contiene en su definición JPG) de cualquier archivo JPG en su sistema:
$ head --bytes 6 example.jpg | | hexdump --canonical
00000000 ff d8 ff e0 00 10 |......|
00000006
Compare el pie de página con los últimos 2 bytes para que coincida con lo que muestra el archivo de configuración:
$ tail --bytes -2 example.jpg | hexdump --canonical
00000000 ff d9 |..|
00000002
Estos valores coinciden, por lo que puede estar seguro de que los archivos JPG válidos probablemente comiencen y terminen en una secuencia predecible.
scalpel.conf
archivo es engañoso, ya que carece de \x
secuencia de escape. Si necesita recuperar un archivo Ogg, corrija esto o reemplace su definición.
Poner manos a la obra
Ahora, para obtener el mismo nivel de confianza para todos los archivos que necesita recuperar (como XCF, en el ejemplo anterior). Para reiterar, este es su flujo de trabajo para definir los tipos de archivos binarios comunes a la unidad de la víctima:
- Obtenga los valores hexadecimales de los primeros bytes de un tipo de archivo usando el
head --bytes n
comando. - Obtenga los últimos bytes usando
tail --bytes -n
comando. - Repita este proceso en varios archivos diferentes del mismo tipo para confirmar la consistencia de este patrón, ajustando la longitud de sus patrones de encabezado y pie de página según sea necesario.
- Ingrese los valores de encabezado y pie de página en su configuración personalizada de Scalpel, usando el
\x
notación para identificar cada byte como un carácter hexadecimal.
Siga esta secuencia para cada tipo de archivo binario importante que necesite recuperar.
Si un archivo es texto sin formato, proporcione un encabezado y un pie de página comunes, como #!/bin/sh
para scripts de shell, #
(el espacio después del #
es importante) para archivos de rebajas con un título de nivel h1, <xml
para archivos XML, etc.
Cuando esté listo para ejecutar Scalpel, cree un directorio donde pueda colocar sus archivos rescatados:
$ mkdir /run/media/seth/rescuer/scalped
Si la unidad víctima aún no está montada, móntela y luego ejecute Scalpel:
$ scalpel -c my-scalpel.conf \
-o /run/media/seth/rescuer/scalped \
/run/media/seth/victim
También puede ejecutar Scalpel en una imagen de disco:
$ scalpel -c my-scalpel.conf \
-o ~/scalped ~/victim.img
Cuando termine Scalpel, revise los archivos en su directorio de rescate designado.
En general, es mejor hacer copias de seguridad para evitar la recuperación de archivos. Pero, si ocurriera lo peor, prueba Scalpel y talla con cuidado.