
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 referencia (es decir, software que tiene errores conocidos con entradas que los desencadenan). LAVA intenta resolver este problema inyectando automáticamente errores en el software. Cada error de LAVA está acompañado de una entrada que lo desencadena, mientras que las entradas normales tienen una probabilidad extremadamente baja de hacerlo. Estas vulnerabilidades son sintéticas, pero argumentamos que siguen siendo realistas, en el sentido de que están incrustadas profundamente en los programas y son desencadenadas por entradas reales. Nuestro trabajo forma la base de un enfoque para generar corpus de vulnerabilidades de referencia a gran escala bajo demanda, permitiendo una evaluación rigurosa de herramientas y proporcionando un objetivo de alta calidad para los desarrolladores de herramientas.
LAVA es el producto de una colaboración entre el MIT Lincoln Laboratory, NYU y la Northeastern University.
La última versión de la rama master de LAVA se compila automáticamente como una imagen de Docker basada en Ubuntu 22.04 y se publica en Docker Hub. La mayoría de los usuarios querrán usar el contenedor lava, que tiene instalados PANDA y LAVA junto con sus dependencias de ejecución, pero no artefactos de compilación ni código fuente para reducir el tamaño del contenedor.
Para usar el contenedor lava, puedes descargarlo de Docker Hub:
$ docker pull pandare/lava
O compilar 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 realizará 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 python/.
NOTA que el paquete de Python requiere un archivo SQL generado al compilar 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 los 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 utilizado 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 está 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ó, debes crear un usuario de Postgres SQL. Puedes usar un script usando las variables de entorno para lo siguiente:
Finalmente, puedes ejecutar lava para inyectar realmente errores en un programa.
Simplemente 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; a continuación se muestra una lista parcial (en orden alfabético) de colaboradores: