Filesystem Sandbox for Linux – FSSB

Iniciado por r32, 12 Julio 2018, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

r32

En muchas ocasiones, necesitamos un sandbox (caja de arena) de nuestro sistema de ficheros, para poder analizar qué ficheros crea, lee o modifica una determinada aplicación o herramienta.

Esto es muy útil para poder realizar diferentes pruebas, en un entorno seguro. De esta manera, podemos analizar desde aplicaciones en las que estemos trabajando, hasta herramientas que hayamos descargado, siendo muy amplio el abanico de posibilidades que nos ofrece.

En Linux, tenemos multitud de formas de hacer esto. Una herramieta, que aún estando en estado Alpha, promete bastante, es FSSB (https://github.com/adtac/fssb). Utiliza un mecanismo bastante curioso:

Primero, intercepta las llamadas al sistema para la apertura, creación, modificación, renombrado, y borrado de ficheros.
Detiene la ejecución del binario en cuestión, crea el fichero en un contenedor (crea un directorio en /tmp por cada ejecución)
Devuelve el control al binario, haciéndole ver que, el fichero que intentaba crear, modificar, abrir, etc. es ese.
Una vez que el binario termina su ejecución, en el contenedor creado, tendremos los diferentes ficheros que ha creado la herramienta. Además, dado que los nombres son aleatorios, tendremos otro con un mapeo de los mismos.


Para instalarlo, en el caso de distribuciones basadas en Debian, bastará con disponer de OpenSSL en el sistema. Necesitaremos instalar libssl-dev. En otros sistemas, en principio, con instalar el paquete correspondiente para disponer de las cabeceras y demás de OpenSSL para C, debería ser suficiente.

Hecho esto, bastará clonar el repositorio y compilar el binario:

git clone https://github.com/adtac/fssb
cd fssb
make


Una vez compilado, su utilización es muy sencilla. Por ejemplo:

./fssb -m -- binario

Dispone de varias opciones, que podemos consultar con ./fssb -h:
-d <nombre_fichero> Con esta opción nos va a crear un fichero que contendrá todas las llamadas al sistema que ha realizado el binario.
-o <nombre_fichero> Para grabar la salidas del propio fssb en un fichero.
-r Elimina los ficheros temporales creados al finalizar.
-m Imprime el contenido del fichero con el mapeo realizado.

Un ejemplo de uso:

Primero creamos un archivo, por ejemplo "programa.py", con el siguiente contenido:

with open("prueba", "w") as f: 
    f.write("Feliz Martes!")       

with open("prueba", "r") as f: 
    print(f.read())


Puede observarse que es un pequeño programa en python que crea un fichero llamado prueba en el directorio actual y, después, lo abre e imprime el contenido. Al ejecutar programa.py, la salida sería:

$ python programa.py
Feliz Martes!


Podemos comprobar que ha creado un archivo:

$ cat prueba
Feliz Martes!


Ejecutamos fssb:

$ ./fssb -m -- python programa.py
Feliz Martes!
fssb: child exited with 0
fssb: sandbox directory: /tmp/fssb-1
    + 25fa8325e4e0eb8180445e42558e60bd = prueba


Podemos comprobar que no hay ningún fichero creado:

$ cat prueba
cat: prueba: No such file or directory


El archivo se ha creado en un directorio temporal:

$ cat /tmp/fssb-1/25fa8325e4e0eb8180445e42558e60bd
Feliz Martes!


Aún le faltan muchas llamadas al sistema por implementar y portarlo a otras arquitecturas (sólo está disponible para x86_64, por ahora). Aún así, me ha resultado muy interesante la forma que han tenido de resolver el sandbox. Veamos cómo evoluciona el proyecto.

Saludos.