
LAVA: Adición Automatizada de Vulnerabilidades a Gran Escala
Evaluar y mejorar las herramientas de búsqueda de errores es actualmente difícil debido a la escasez de corpus de verdad fundamental (es decir, software que tiene errores conocidos con entradas que los desencadenan). LAVA intenta resolver este problema inyectando errores automáticamente en el software. Cada error de LAVA está acompañado por una entrada que lo desencadena, mientras que las entradas normales tienen una probabilidad extremadamente baja de hacerlo. Estas vulnerabilidades son sintéticas pero, sostenemos, aún realistas, en el sentido de que están incrustadas profundamente dentro de los programas y son desencadenadas por entradas reales. Nuestro trabajo constituye la base de un enfoque para generar grandes corpus de vulnerabilidades de verdad fundamental bajo demanda, lo que permite una evaluación rigurosa de herramientas y proporciona un objetivo de alta calidad para los desarrolladores de herramientas.
LAVA es el producto de una colaboración entre MIT Lincoln Laboratory, NYU y Northeastern University.
La última versión de la rama master de LAVA se compila automáticamente como imágenes de docker basadas en Ubuntu 22.04 y se publica en Docker Hub. La mayoría de los usuarios querrán usar el contenedor lava que tiene PANDA y LAVA instalados junto con sus dependencias de tiempo de ejecución, pero sin artefactos de compilación ni código fuente para reducir el tamaño del contenedor.
Para usar el contenedor lava puedes extraerlo de Docker Hub:
$ docker pull pandare/lava
O compilarlo desde este repositorio:
$ DOCKER_BUILDKIT=1 docker build lava .
En un sistema que ejecute Ubuntu 22.04, deberías poder simplemente ejecutar bash install.sh.
Ten en cuenta que este script de instalación instalará paquetes y hará cambios en tu sistema.
Puedes eliminar los binarios usando sudo apt-get remove lava.
Una vez que termines de instalar el binario, puedes instalar localmente ejecutando pip install ..
NOTA que el paquete de Python requiere un archivo SQL generado a partir de la compilación de los binarios que se coloca en python/src/pyroclastic/data/lava.sql.
Sin este archivo, el paquete de Python no funcionará correctamente.
Alternativamente, puedes instalar manualmente las dependencias de LAVA y luego compilar desde el código fuente.
Descarga los paquetes Debian ubicados en las releases. Luego instala el paquete de python pip install pyroclastic.
A continuación, ejecuta init_host para generar un host.json en tu directorio ~/.lava.
Este archivo es usado por LAVA para almacenar configuraciones específicas
de tu máquina. Puedes editar estas configuraciones según sea necesario, pero los valores
predeterminados deberían funcionar, consulta vars.py.
Algunos valores a tener en cuenta son los siguientes:
postgresdatabase, aunque si instalaste LAVA localmente, probablemente deberías cambiarlo a localhostNOTA: También necesitas dos variables de entorno para la base de datos Postgres SQL:
POSTGRES_PASS Esta es la contraseña para el usuario de Postgres SQL`POSTGRES_USER Este es el nombre de host para la base de datos Postgres SQLLas configuraciones de proyecto se encuentran en el directorio target_configs, donde
cada configuración se encuentra en target_configs/projectname/projectname.json.
Las rutas especificadas dentro de estos archivos de configuración son relativas a los valores establecidos
en tu archivo host.json.
Como se mencionó, deberías crear un usuario de Postgres SQL. Puedes usar un script para usar las variables de entorno para lo siguiente:
Finalmente, puedes ejecutar lava para inyectar errores en un programa.
Solo proporciona el nombre de un proyecto que esté en el directorio target_configs, por ejemplo:
lava -ak toy
¡Ahora deberías tener una copia con errores de toy!
Si quieres inyectar errores en un nuevo objetivo, probablemente necesitarás hacer algunas modificaciones. Consulta How-to-Lava para obtener orientación.
Consulta la carpeta docs para comenzar.
LAVA es el resultado de varios años de desarrollo por muchas personas; una lista parcial (alfabética) de contribuyentes se encuentra a continuación: