Mi nombre es #Foremost: Yo… he visto cosas que vosotros no creeríais

Hola secuaces:

En la entrada anterior, descubrimos quién era es Señor ‘X’, haciendo uso de BulkExtractor. Va siendo hora de saber qué es lo que ha ‘visto’. Por ello, hoy quiero hablaros de Foremost. Bajo mi punto de vista, la herramienta de carving por excelencia.

Foremost es un programa forense, que trabaja bajo la consola de Linux, diseñado para la recuperación de datos borrados, o no borrados, y que fue desarrollado por Jesse Kornblum y Kris Kendall cuando sirvieron en la Oficina de Investigaciones Especiales de la Fuerza Aérea. Es la base de Scalpel, su evolución, aunque su funcionamiento es, exactamente, el mismo.

Para realizar la recuperación de ficheros, utiliza un archivo de configuración, (foremost.conf), que veremos más abajo, en el que se especifican unos encabezados y unos pies, de estructura de archivos, como patrones de búsqueda, conocidos como números mágicos. Busca un encabezado especificado en foremost.conf y, cuando lo encuentra, lo escribe a un fichero, junto con los datos que le siguen, hasta que encuentra el pie especificado, o llega al límite de tamaño indicado en el fichero de configuración. Y este fichero, foremost.conf, es muy importante, pues de él depende la fiabilidad de la recuperación.

Originalmente fue diseñado para trabajar sobre imágenes de disco, pero puede ser ejecutado bajo cualquier fichero, sin importar su formato, o incluso directamente bajo una unidad.

Vamos a verlo en funcionamiento, para explicarlo lo mejor posible.

Para no perder las buenas prácticas, (recordad que el hábito hace al monje)…

Tenemos, de nuevo, las evidencias del caso anterior: Un volcado de memoria RAM, que pertenece al Señor ‘X’, y que listamos mediante ‘ls

ls PC*

Procedemos a identificarlas, mediante ‘file

file PC*

Y calculamos su huella digital, su algoritmo hash, en formato SHA1, con ‘sha1sum

sha1sum PC*

Instalar Foremost es muy sencillo

sudo apt-get install foremost

Y lo primero que debemos hacer es preguntarle cómo funciona. Para ello le pasamos el parámetro ‘-h’

foremost -h

-V: Muestra la información de copyright y sale
-t: Especifica el tipo de archivo, (-t jpeg, pdf …)
-d: Activar la detección indirecta de bloque, (para sistemas de archivos UNIX)
-i: Especifica el archivo de entrada (por defecto es ‘stdin‘)
-a: Escribir todos los encabezados. No realizar detección de errores, (archivos dañados)
-w: Sólo escribe el archivo de auditoría. No escribe ningún archivo detectado en el disco
-o: Establece el directorio de salida, (por defecto en ‘output’)
-c: Establece el archivo de configuración a utilizar, (por defecto a foremost.conf)
-q: Activa el modo rápido. La búsqueda se realiza en los límites de 512 bytes.
-Q: Habilita el modo silencioso. Suprimir mensajes de salida.
-v: Modo detallado. Registra todos los mensajes a la pantalla

¿Cuál es su funcionamiento básico? La invocación de foremost con el parámetro ‘-i’ para indicarle el objetivo de recuperación.

foremost -i PC-20170427.dmp

Muy fácil, ¿Verdad? Nos ha extraído algunos resultados al directorio ‘output’. Y nos ha generado también un fichero ‘audit.txt’, que es el reporte con el resultado.

ls -s output/

Pero fijaros en qué tipo de ficheros ha recuperado.

cat -n output/audit.txt | grep -i -A 20 «Files Extracted»

Nos ha extraído únicamente ficheros en formato ‘doc’, ‘ost’, ‘exe’ y ‘pf’. No lo considero suficiente. Tenemos muchas opciones para jugar con este estupendo programa. Y, una de ellas, es que podemos especificar tipos de archivo, o indicarle que recupere todo lo que pueda ser capaz de reconocer, (lo que tenga escrito en su ‘foremost.conf’).

Vamos a decirle que nos recupere todo lo que sea capaz de identificar, y le vamos a especificar también un directorio de salida.

foremost -t all -i PC-20170427.dmp -o Foremost_All

Pero qué demonios veo en mi pantalla!! ¿Qué es eso que se ha visto? Simplemente, los datos que se han ido recuperando.

Vamos a ver qué nos ha recuperado esta vez, en el directorio que le hemos indicado.

ls -s Foremost_All

Fijaros en la cantidad de extensiones de ficheros que ha conseguido recuperar, a diferencia de la ejecución anterior.

cat -n Foremost_All/audit.txt | grep -i -A 20 «Files Extracted»

En la ejecución básica nos había recuperado un total de cuatro extensiones, cuatro tipos de ficheros. En esta ocasión ha conseguido extraer un total de quince.

Vamos a ver las carpetas…

Y un mínimo de su contenido. Ficheros de imagen ‘jpg’…

Ficheros de imagen ‘bmp’…

Por razones obvias no voy a mostrar el contenido que estuvo viendo el señor ‘X’.

Si afináis un poco la vista, podréis ver que existen ficheros que no se pueden visualizar y otros que parecen incompletos. Esto significa que están incompletos, dañados, o que foremost ha encontrado una coincidencia en los números mágicos establecidos, pero no se corresponden realmente con el tipo de fichero.

Por ejemplo, tenemos también ficheros en formato ‘zip’. Y aquí os muestro uno de ellos.

ls -s /home/marcos/Evidencias/Foremost_All/zip/05062944.zip

Incluso lo podemos extraer, sin ningún tipo de problema.

extract /home/marcos/Evidencias/Foremost_All/zip/05062944.zip

Efectivamente. No suelo ir por ahí con todos mis discos duros y herramientas Forenses. Sólo suelo llevar algunos pendrives, pero tampoco quería introducirlo en ese equipo y llevarme algún regalo, por lo que descargué la utilidad DumpIt para realizar la captura de la memoria RAM.

Ahora bien. Le hemos indicado un directorio de salida. Pero, ¿Y si queremos volver a ejecutar foremost, sobre ese mismo directorio? ¿Lo borramos? ¿Lo sobreescribimos? Yo suelo usar foremost de esta manera, (cuando no le especifico mi propio fichero ‘foremost.conf’).

foremost -t all -Tvi PC-20170427.dmp -o Foremost_Dump >> ForemostVolcado.txt

¿Qué le he dicho exactamente?

-t all: Que me recupere todos los ficheros que conozca, (que tenga en su propio ‘foremost.conf’).

-T: Que me escriba una marca de tiempo junto al nombre del directorio, para no tener que eliminarlo si lo ejecuto varias veces.

-v: Que me habilite el modo verbose para que escriba toda la información que procese.

-i: El fichero de imagen objeto de la recuperación.

Pero, ¿De dónde me he sacado la opción ‘-T’? Porque no venía explicada en su ayuda, con su parámetro ‘-h’. Pues de algo que siempre tenemos que leer. De su ‘man foremost

Y, con esto, podemos ejecutar cuantas veces queramos la herramienta, sin necesidad de eliminar el resultado anterior

ls -s Foremost_Dump_Thu_Jul_20_10_16_43_2017/

Y repasamos los ficheros que ha podido extraer, y que deberán ser los mismos que en el caso anterior, puesto que no hemos variado su archivo de configuración.

cat -n Foremost_Dump_Thu_Jul_20_10_16_43_2017/audit.txt | grep -i -A 20 «Files Extracted»

Hasta ahora, sólo hemos visto en el fichero ‘audit.txt’, la información relativa a los ficheros extraídos. Pero contiene mucha más.

cat -n Foremost_Dump_Thu_Jul_20_10_16_43_2017/audit.txt | head -n 50

¿Qué podemos ver en este informe de auditoría? Cuándo comenzó la ejecución, qué invocación se hizo, el directorio de salida especificado, el fichero de configuración utilizado. Y en lo referente al material recuperado, el número de recuperación, el nombre del fichero, el tamaño, el ‘offset’ del fichero y un apartado de comentarios, donde puede haber algún tipo de metadato.

Podríamos dejarlo aquí, pero…

Si no rompemos, si no tocamos, si no somos curiosos, no sabremos cómo funcionan las cosas. Así no soy yo. Seamos curiosos. Hemos dicho al principio que trabaja sobre un fichero de configuración. Pues vamos a ver qué nos dice.

cat -n /etc/foremost.conf | head -n 50

¿Mucho para leer? En resumen, que el archivo de configuración se utiliza para controlar qué tipos de archivos buscar. Que para cada tipo de archivo, se describe, la extensión, el encabezado y/o el pie, si es o no es sensible a mayúsculas y a minúsculas y el tamaño máximo del archivo. Que se pueden comentar líneas con ‘#’, por lo que serán ignoradas. Que trabaja con valores hexadecimales y octales. Que se puede usar un carácter comodín, con ‘?’. Que si queremos realizar la extracción, sin que escriba ninguna extensión pongamos el valor ‘NONE’ en el campo del nombre de la extensión…

Vamos a verlo con un ejemplo simple.

cat /etc/foremost.conf | grep -i jpg

Estamos viendo qué configuración tiene la extensión de ficheros ‘jpg’, en el archivo ‘foremost.conf’. Podemos ver que, en el nombre de la extensión, se establece ‘jpg’. Vemos que hay un ‘y’, que indica que sea sensible entre mayúsculas y minúsculas. Vemos un valor ‘20000000’, que indica el tamaño máximo del archivo, establecido en bytes. Podemos ver también los diferentes encabezados y pies que existen para este tipo de archivos, en un valor hexadecimal.

Vamos a verlo…

xxd /home/marcos/Imágenes/WallPaper.jpg | head -n 5

xxd /home/marcos/Imágenes/WallPaper.jpg | tail -n 5

¿No lo vemos nada claro? Vamos a usar GHex, que es un editor hexadecimal de ficheros.

Mejor así, ¿Verdad? Fijaros en el encabezado y el pie de los ficheros ‘jpg’ que tenemos en el archivo ‘foremost.conf’ y compararlos con este de la imagen superior. ¿Coinciden? Pues así se establecen los parámetros de las extensiones.

Vamos a verlo con unas pruebas.

cat -n /home/marcos/MyForemost.conf

Tenemos esta descripción para este tipo de fichero ‘jpg’, con un nombre de extensión ‘jpg, con un valor ‘y’ para que sea sensible entre mayúsculas y minúsculas, con una cabecera y un pie en formato hexadecimal.

Vamos a cambiar el nombre de la extensión y el tamaño.

cat -n /home/marcos/MyForemost.conf

Si os fijáis, he cambiado el nombre de la extensión ‘jpg’ a ‘fwhibbit’, y el tamaño asignado como máximo lo he establecido en ‘4194304’, (4 MB). En esta captura existe una errata porque el tamaño asignado a la siguiente ejecución corresponde, realmente, a 1024 bytes. Procedo, nuevamente, a su ejecución…

foremost -c /home/marcos/MyForemost.conf -Tvi PC-20170427.dmp -o ForemostDump >> ForemostVolcado.txt

Antes de nada, atención, que en este caso, el orden de los factores sí altera el producto. Lo primero de debemos indicar, después de invocar a foremost, y en el caso de que queramos usar nuestro propio fichero ‘foremost.conf’, es dónde se encuentra, con el parámetro ‘-c’.

Ahora sí, podemos ver que ha trabajado sin ningún problema, ‘real’. Porque ese valor del nombre de la extensión que le hemos modificado, es sólo para que podamos identificarlo, un nombre de referencia. No afecta en nada a la estructura de los datos que queremos recuperar. Fijaros en el tamaño de los datos extraídos.

ls -l ForemostDump_Mon_Jul_24_10_55_34_2017/fwhibbit????D? | head -n 10

Podemos ver cómo escribe la extensión de los ficheros.

cat -n ForemostDump_Mon_Jul_24_10_55_34_2017/audit.txt | head

Podemos ver la información sobre la ejecución que se ha llevado a cabo con la herramienta.

cat -n ForemostDump_Mon_Jul_24_10_55_34_2017/audit.txt | grep -i -A 20 «Files Extracted»

Y podemos ver que ha extraído un total de 976 ficheros. Si comparáis estos resultados, podréis comprobar que en esta ocasión se han extraído más archivos que en el otro caso.

Vamos a ver otro ejemplo.

cat /home/marcos/MyForesmot.conf

nano /home/marcos/MyForesmot.conf

cat /home/marcos/MyForesmot.conf

En este caso, he cambiado de nuevo el nombre de la extensión que quiero identificar, a ‘jpg’, además del tamaño, que lo he establecido en 4096 bytes. La ejecutamos de nuevo.

foremost -c /home/marcos/MyForemost.conf -Tvi PC-20170427.dmp -o ForemostDump >> ForemostVolcado.txt

Y listamos lo que nos ha extraído.

ls -s ForemostDump_Mon_Jul_24_11_04_48_2017/

ls -l ForemostDump_Mon_Jul_24_11_04_48_2017/ | head -n 20

Nuevamente, fijaros en los resultados. Observad el tamaño de los ficheros extraídos. Mirad los nombres de los ficheros, obviando su extensión, y veréis que coinciden con el caso anterior.

Vamos a ver de una última forma cómo trabaja foremost.

cat /home/marcos/MyForemost-1.conf

cat /home/marcos/MyForemost-2.conf

Como podéis observar, tengo dos ficheros de configuración de foremost, idénticos, a excepción del tamaño. En el primero he establecido un valor de 1024 bytes y en el segundo he establecido un tamaño de 4194304 bytes, (4 MB). Procedemos a su ejecución, otra vez. Primero con uno…

foremost -c /home/marcos/MyForemost-1.conf -Tvi PC-20170427.dmp -o ForemostDump >> ForemostVolcado1.txt

Y luego con el otro…

foremost -c /home/marcos/MyForemost-2.conf -Tvi PC-20170427.dmp -o ForemostDump >> ForemostVolcado2.txt

Vamos a ver lo que ha extraído en ambos casos. Primero uno…

cat -n ForemostVolcado1.txt | tail

Y luego otro…

cat -n ForemostVolcado2.txt | tail

En ambos casos se han extraído 976 ficheros.

Vamos a listar la cabecera de los directorios y veremos que no coinciden ni los nombres de los ficheros, ni su tamaño.

ls -lS ForemostDump_Mon_Jul_24_11_22_41_2017/jpg/ | head

ls -lS ForemostDump_Mon_Jul_24_11_23_29_2017/jpg/ | head

Y podríamos dejarlo aquí. Pero… ¿Qué pasa cuando nos encontramos con que queremos recuperar un tipo de fichero que no se encuentra en el archivo ‘foremost.conf’? Pues es fácil de responder. Tenemos dos opciones. Buscarlo en bases de datos online, que hay disponibles unas cuantas. Por ejemplo, https://www.filesignatures.net/, o http://www.garykessler.net/library/file_sigs.html, y fiarnos de ellos. O podemos descargar ese tipo de fichero, buscar nosotros mismos sus números mágicos y usar las bases disponibles para comparar los resultados.

Por ejemplo, un fichero que no está disponible en el fichero de configuración de foremost, es ‘flv’. Pues, si no tenemos disponible en nuestro equipo ese tipo de fichero, lo buscamos y lo descargamos.

Lo estudiamos, con la herramienta con la que nos sintamos más cómodos, y buscamos su encabezado.

Y podemos comparar nuestros datos con otros.

Y con estos datos, nos creamos o modificamos nuestro fichero ‘foremost.conf’

cat -n /home/marcos/MyForemost.conf

Y volvemos a ejecutar la herramienta. Si algún dato fuera erróneo, nos lo diría.

foremost -c /home/marcos/MyForemost.conf -Tvi PC-20170427.dmp -o ForemostDump >> ForemostVolcado.txt

Ahora sí que sí. Con esto que hemos visto, y para el caso que me ocupa me preparo este fichero de configuración, que me es más que suficiente.

cat /home/marcos/MyForesmot.conf

Me interesa recuperar los ficheros ‘jpg’, ‘png’, ‘bmp’ y ‘tif’. Podríamos, tranquilamente, hacer insensibles a mayúsculas y minúsculas a todas las extensiones.

Lo ejecuto por última vez

foremost -c /home/marcos/MyForemost.conf -Tvi PC-20170427.dmp -o ForemostDump >> ForemostVolcado.txt

Listo los resultados

ls -s ForemostDump_Mon_Jul_24_11_49_15_2017/

Compruebo el reporte de auditoría, ‘audit.txt’

cat -n ForemostDump_Mon_Jul_24_11_49_15_2017/audit.txt | head -n 20

Y podemos ver qué tipos de ficheros ha conseguido extraer.

cat -n ForemostDump_Mon_Jul_24_11_49_15_2017/audit.txt | grep -i -A 20 «Files Extracted»

Tened en cuenta que, para que esta herramienta trabaje de la forma más fiable posible, debemos saber qué es lo que buscamos. Y, en este caso, se trata de saber qué tipo de ficheros queremos encontrar, usando sus encabezados, sus pies, (su estructura de datos), y su tamaño máximo.

Esto es todo, por ahora. Nos leemos en la siguiente entrada. Se despide este minion, entregado y leal, de vosotros… por ahora.

Marcos @_N4rr34n6_

Un comentario en «Mi nombre es #Foremost: Yo… he visto cosas que vosotros no creeríais»

  1. excelente, se podria obtener el detalle del archivo me refiero al propietario del archivo como tal.

Los comentarios están cerrados.