
lava v3.3.0
LAVA: Adición Automatizada de Vulnerabilidades a Gran Escala
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.
Inicio Rápido
Docker
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 .
Ubuntu, Debian
Instalación Local
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.
Instalación regular
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.
Pasos finales
Utilizar host.json
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:
- pguser Este es el nombre del usuario de la base de datos, actualmente por defecto es
postgres - host es el nombre de la base de datos Postgres SQL con todos los errores de LAVA. Actualmente, por defecto es
database, aunque si instalaste LAVA localmente, probablemente deberías cambiarlo alocalhost
NOTA: También necesitas dos variables de entorno para la base de datos Postgres SQL:
POSTGRES_PASSEsta es la contraseña para el usuario de Postgres SQL`POSTGRES_USEREste es el nombre de host para la base de datos Postgres SQL
Configuraciones de proyecto
Las 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.
Configurar la base de datos postgres SQL
Como se mencionó, deberías crear un usuario de Postgres SQL. Puedes usar un script para usar las variables de entorno para lo siguiente:
- Crear el usuario con el nombre de usuario y contraseña proporcionados desde las variables de entorno.
- Actualizar la base de datos Postgres SQL en el host para aceptar tráfico de fuentes externas (por ejemplo, el contenedor Docker de LAVA)
Uso
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.
Documentación
Consulta la carpeta docs para comenzar.
Autores
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:
- Andy Davis
- Brendan Dolan-Gavitt
- Andrew Fasano
- Zhenghao Hu
- Patrick Hulin
- Amy Jiang
- Engin Kirda
- Tim Leek
- Andrea Mambretti
- Andrew Quijano
- Wil Robertson
- Aaron Sedlacek
- Rahul Sridhar
- Frederick Ulrich
- Ryan Whelan