Haciendo
análisis forense en
GNU/Linux son variadas las herramientas con las que podemos contar, y al no estar en una
"caja negra", como con las de
M$-Windows, sabemos que dificilmente no nos estan falseando la evidencia.
Foremost permite la recuperación de archivos borrados de un dispositivo/partición (no de forma totalmente segura), y es el elegido de hoy para hacer una breve intro a la recuperacion forense de datos.
Es una utileria muy sencilla, al punto que mucha
"gente comun" lo termino conociendo para recuperar "esas fotos de las vacaciones que la SD de la camara no permitia" y cosas asi...
Instalación
Foremost esta para muchos sabores de
Linux, en este caso muestro como instalarlo completamente en un
Slackware, desde los venerables
SlackBuilds, esto es, bajar los fuentes, compilarlos y generar el paquete de instalacion, e instalarlo, pero si usas RPM o DEB, el proceso incluso es mucho mas simple:
root@gostir:[~]
# slapt-src --search foremost
foremost:1.5.7 - foremost (recover files based on their headers and footers)
root@gostir:~# slapt-src --install foremost
Los siguientes paquetes serán instalado:
foremost
¿Desea continuar? [y/N] y
Recuperando README...Hecho
Recuperando doinst.sh...Hecho
Recuperando foremost-broken-jpeg.patch...Hecho
Recuperando foremost.SlackBuild...Hecho
Recuperando foremost.info...Hecho
Recuperando slack-desc...Hecho
Recuperando http://foremost.sourceforge.net/pkg/foremost-1.5.7.tar.gz...Hecho
foremost-1.5.7/
foremost-1.5.7/engine.c
foremost-1.5.7/main.h
foremost-1.5.7/main.c
foremost-1.5.7/helpers.c
foremost-1.5.7/config.c
foremost-1.5.7/README
foremost-1.5.7/foremost.conf
foremost-1.5.7/foremost.8.gz
foremost-1.5.7/extract.c
foremost-1.5.7/ole.h
foremost-1.5.7/CHANGES
foremost-1.5.7/cli.c
foremost-1.5.7/dir.c
foremost-1.5.7/extract.h
foremost-1.5.7/api.c
foremost-1.5.7/state.c
foremost-1.5.7/Makefile
patching file extract.c
Hunk #1 succeeded at 1868 (offset 74 lines).
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c main.c
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c state.c
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c helpers.c
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c config.c
config.c: En la función ‘translate’:
config.c:27:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
config.c:32:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
config.c:37:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
config.c:42:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
config.c:47:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
config.c:52:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
config.c:57:6: aviso: no se usa el valor calculado [-Wunused-value]
*rd++;
^
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c cli.c
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c engine.c
engine.c: En la función ‘search_chunk’:
engine.c:319:17: aviso: se define la variable ‘current_pos’ pero no se usa [-Wunused-but-set-variable]
unsigned char *current_pos = NULL;
^
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c dir.c
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c extract.c
extract.c: En la función ‘extract_htm’:
extract.c:556:17: aviso: se define la variable ‘currentpos’ pero no se usa [-Wunused-but-set-variable]
unsigned char *currentpos = NULL;
^
extract.c: En la función ‘extract_wmv’:
extract.c:1157:14: aviso: se define la variable ‘fileObjHeaderSize’ pero no se usa [-Wunused-but-set-variable]
u_int64_t fileObjHeaderSize = 0;
^
extract.c:1150:17: aviso: se define la variable ‘currentpos’ pero no se usa [-Wunused-but-set-variable]
unsigned char *currentpos = NULL;
^
extract.c: En la función ‘extract_gif’:
extract.c:1404:17: aviso: se define la variable ‘currentpos’ pero no se usa [-Wunused-but-set-variable]
unsigned char *currentpos = foundat;
^
extract.c: En la función ‘extract_jpeg’:
extract.c:1824:17: aviso: se define la variable ‘currentpos’ pero no se usa [-Wunused-but-set-variable]
unsigned char *currentpos = NULL;
^
extract.c: En la función ‘extract_exe’:
extract.c:2114:15: aviso: se define la variable ‘align’ pero no se usa [-Wunused-but-set-variable]
unsigned int align = 0;
^
extract.c:2110:15: aviso: se define la variable ‘size_of_headers’ pero no se usa [-Wunused-but-set-variable]
unsigned int size_of_headers = 0;
^
extract.c:2108:15: aviso: se define la variable ‘sizeofimage’ pero no se usa [-Wunused-but-set-variable]
unsigned int sizeofimage = 0;
^
extract.c:2105:15: aviso: se define la variable ‘rva’ pero no se usa [-Wunused-but-set-variable]
unsigned int rva = 0;
^
extract.c:2104:15: aviso: se define la variable ‘SizeOfUninitializedData’ pero no se usa [-Wunused-but-set-variable]
unsigned int SizeOfUninitializedData = 0;
^
extract.c:2103:15: aviso: se define la variable ‘SizeOfInitializedData’ pero no se usa [-Wunused-but-set-variable]
unsigned int SizeOfInitializedData = 0;
^
extract.c:2102:15: aviso: se define la variable ‘SizeOfCode’ pero no se usa [-Wunused-but-set-variable]
unsigned int SizeOfCode = 0;
^
extract.c: En la función ‘extract_rar’:
extract.c:2277:13: aviso: se define la variable ‘file_size’ pero no se usa [-Wunused-but-set-variable]
u_int64_t file_size = 0;
^
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -c api.c
api.c: En la función ‘dump_dirent’:
api.c:481:10: aviso: se define la variable ‘unknown’ pero no se usa [-Wunused-but-set-variable]
short unknown;
^
gcc -Wall -O2 -fPIC -DVERSION=\"1.5.7\" -D__UNIX -D__LINUX -DLARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 main.o state.o helpers.o config.o cli.o engine.o dir.o extract.o api.o -o foremost
install -m 755 foremost /usr/src/slapt-src/system/foremost/package-foremost/usr/bin
install -m 444 foremost.8.gz /usr/src/slapt-src/system/foremost/package-foremost/usr/man/man8
install -m 444 foremost.conf /usr/src/slapt-src/system/foremost/package-foremost/etc
Slackware package maker, version 3.141593.
Searching for symbolic links:
No symbolic links were found, so we won't make an installation script.
You can make your own later in ./install/doinst.sh and rebuild the
package if you like.
This next step is optional - you can set the directories in your package
to some sane permissions. If any of the directories in your package have
special permissions, then DO NOT reset them here!
Would you like to reset all directory permissions to 755 (drwxr-xr-x) and
directory ownerships to root.root ([y]es, [n]o)? n
Creating Slackware package: /usr/src/slapt-src/system/foremost/foremost-1.5.7-x86_64-1_SBo.txz
./
usr/
usr/bin/
usr/bin/foremost
usr/doc/
usr/doc/foremost-1.5.7/
usr/doc/foremost-1.5.7/README
usr/doc/foremost-1.5.7/CHANGES
usr/doc/foremost-1.5.7/foremost.SlackBuild
usr/man/
usr/man/man8/
usr/man/man8/foremost.8.gz
install/
install/doinst.sh
install/slack-desc
etc/
etc/foremost.conf.new
Slackware package /usr/src/slapt-src/system/foremost/foremost-1.5.7-x86_64-1_SBo.txz created.
Installing package foremost-1.5.7-x86_64-1_SBo...
| foremost (recover files based on their headers and footers)
|
| Foremost is a Linux program to recover files based on their headers
| and footers. Foremost can work on image files, such as those
| generated by dd, Safeback, Encase, etc, or directly on a drive. The
| headers and footers are specified by a configuration file, so you can
| pick and choose which headers you want to look for.
|
| Homepage: http://foremost.sourceforge.net/
|
|
|
|
root@gostir:[~]
#
Ah, si, era una simple linea de comando, me olvide de aclararlo,
Slackware esta diseñada para gente perezosa como yo, que queremos todo excelente pero sin tener que teclear mil lineas de comandos... Sonara extraño pero es asi, todo automagico, se bajan los fuentes, se verifican, se compilan
OPTIMIZADOS para nuestro sistema en particular, se genera el paquete .TXZ y se instala solo, y en el caso de necesitar dependencias, por su puesto que se resuelven de la misma manera...
Ahora si, como el movimiento se demuestra andando...
Recuperar todos los archivos JPG y copiarlos en /tmp/recovery (o donde dispongamos):
root@gostir:[~]
# foremost -t jpg -i /dev/sde1 -o /tmp/recovery
Pero
siendo forenses, generalmente trabajamos sobre imagenes de dispositivos, asi que vamos a tomar una imagen RAW realizada con
el poderoso comando DD y recuperar todo lo que podamos de ahi:
root@gostir:[~]
# foremost -t all -i imagen.dd -o /tmp/recovery
Va a demorar dependiendo del equipo que tengamos, y del tamaño de la imagen. Y como una mañana de Navidad, todos los archivos van a estar ahi...
Que te diviertas!