GNU/Linux >> Tutoriales Linux >  >> Linux

Encuentra archivos perdidos con Scalpel

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 o n ).
  • 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.

Nota: La entrada Ogg en 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: 

  1. Obtenga los valores hexadecimales de los primeros bytes de un tipo de archivo usando el head --bytes n comando.
  2. Obtenga los últimos bytes usando tail --bytes -n comando.
  3. 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.
  4. 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

Nota: No cree este directorio en el mismo volumen que contiene los datos perdidos.

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.


Linux
  1. Cómo encontrar todos los archivos con tamaño de archivo cero (0) bytes en un directorio recursivamente

  2. Encuentre archivos y péguelos (con espacios)

  3. Iterar sobre una lista de archivos con espacios

  4. Listar todos los archivos de imágenes gráficas con find?

  5. encontrar archivos con ACL establecidas

Comando Find de Linux con ejemplos prácticos

Cómo encontrar archivos en Debian 10

Cómo encontrar archivos basados ​​en la marca de tiempo en Linux

Cómo encontrar archivos con el comando fd en Linux

Tutorial de comando de búsqueda de Linux (con ejemplos)

Cómo encontrar archivos con docenas de criterios con el comando Bash Find