Si estas interesad@ en cursos de seguridad informática del SANS Institute en el formato de "Local Mentor", dictados en español y para la región de latinoamerica, revisa el siguiente link:
Cursos de Seguridad Informática del SANS Institute
La lista de cursos ha sido actualizada para incluir capacitación adicional. Si tienes alguna duda, no dejes de escribir tus comentarios a través del enlace de contacto.
domingo, 20 de febrero de 2011
lunes, 7 de febrero de 2011
Recuperando Archivos Borrados. Parte I.


Supongamos el siguiente escenario: Escribimos el archivo con la respuesta a la vida, el universo y a todo:
$ cat > respuesta_absoluta.txt
La respuesta a la vida, el universo y a todo es: cuarenta-y-dos.
^D
$ ls respuesta_absoluta.txt
respuesta_absoluta.txt
$
Perfecto, ahi esta nuestro archivo con la respuesta a la pregunta sobre la vida, el universo y absolutamente todo. Definitivamente un archivo muy importante. Sin embargo:
$ rm resp*
$

Para comenzar a recuperar archivos en Linux, el primer requisito es el fabuloso paquete de utilidades "The Sleuth Kit". Existen diversos paquetes de instalación para distintas distribuciones de Linux. Por ejemplo:
En Fedora:
yum install sleuthkitEn Debian:
apt-get install sleuthkitEtc.
Específicamente, estaremos usando principalmente las utilidades icat y ifind del sleuthkit y la utilidad strings de casi todas las distribuciones de linux.
El primer paso es localizar la unidad de datos que almacenaba nuestro archivo. Como ya no existe la estructura de nombre del archivo eliminado, es necesario buscar algo distintivo en el contenido de mi archivo. En ese caso ejecutamos el comando:
$ strings -a -n 13 -t d /dev/sda1 | grep 'cuarenta-y-dos'

Afortunadamente, la respuesta a la vida, el universo y a todo es muy particular, de lo contrario estariamos revisando cadenas de caracteres por 7.5 millones de años y los ratones se comerían nuestros datos. Este comando, sin embargo, puede demorarse un buen tiempo dependiendo del tamaño de nuestro disco duro. Pero en todo caso, mucho menos que 7.5 millones de años.
...
125829120 La respuesta a la vida, el universo y a todo es: cuarenta-y-dos.
^C
$
El numero que arroja el programa strings es la posicion en bytes en el disco en donde se encuentra nuestra cadena de caracteres. El siguiente paso es determinar la unidad de almacenamiento que corresponde a esa posición. Como usualmente el tamaño de los bloques/clusters es de 4KB,simplemente necesitamos dividir 125829120 entre 4096. Sin embargo, podemos el verificar el tamaño de los bloques con este comando:
$ fsstat /dev/sdb1 | grep -i block\ size
Block Size: 4096
$
Ahora, podemos usar una calculadora para hacer la división como han malacostumbrado a los niños de hoy en día, o podemos hacerlo usando la linea de comando como "la escuela vieja":

30720
$
Este número (30720) nos dice en qué bloque se encuentra la información que deseamos. En el peor de los casos con esta información podemos recuperar por lo menos parcialmente nuestra información:
$ blkcat /dev/sdb1 30720
La respuesta a la vida, el universo y a todo es: cuarenta-y-dos.
$
Esta solución puede no ser suficiente si el archivo que recuperamos es mayor a 4096 bytes y si existe mucha fragmentación en el disco. En esos casos, y si hay suerte, sólo nos hace falta encontrar el inodo al cual pertenece este bloque y asi conseguir toda nuestra información:
$ ifind -d 30720 /dev/sdb1
12
$
Eureka! Este es el número (12) que necesitabamos. Ahora simplemente, si nuestro disco tiene suficiente espacio en blanco, y el archivo que vamos a recuperar es lo suficientemente pequeño, podemos simplemente:
$ icat /dev/sdb1 12 > resucitada_respuesta_absoluta.txt
$ cat resucitada_respuesta_absoluta.txt
La respuesta a la vida, el universo y a todo es: cuarenta-y-dos.
$
E

Lamentablemente, en casi cualquier distribución de Linux moderna, el penúltimo paso no será existoso porque la información del inodo será eliminada al borrar el archivo. En estos casos es necesario utilizar técnicas más avanzadas de forensica digital que serán el tema de futuros artículos.
Suscribirse a:
Entradas (Atom)