
LAVA : Ajout automatisé de vulnérabilités à grande échelle
Évaluer et améliorer les outils de recherche de bogues est actuellement difficile en raison du manque de corpus de référence (c'est-à-dire des logiciels contenant des bogues connus avec des entrées déclencheuses). LAVA tente de résoudre ce problème en injectant automatiquement des bogues dans les logiciels. Chaque bogue LAVA est accompagné d'une entrée qui le déclenche, alors que les entrées normales ont très peu de chances de le faire. Ces vulnérabilités sont synthétiques mais, selon nous, toujours réalistes, dans le sens où elles sont intégrées profondément dans les programmes et déclenchées par des entrées réelles. Notre travail constitue la base d'une approche permettant de générer à la demande de grands corpus de vulnérabilités de référence, permettant une évaluation rigoureuse des outils et fournissant une cible de haute qualité pour les développeurs d'outils.
LAVA est le fruit d'une collaboration entre le MIT Lincoln Laboratory, NYU et la Northeastern University.
La dernière version de la branche master de LAVA est automatiquement construite sous forme d'images Docker basées sur Ubuntu 22.04 et publiée sur Docker Hub. La plupart des utilisateurs voudront utiliser le conteneur lava qui contient PANDA et LAVA installés avec leurs dépendances d'exécution, mais sans artefacts de construction ni code source pour réduire la taille du conteneur.
Pour utiliser le conteneur lava, vous pouvez le récupérer depuis Docker Hub :
$ docker pull pandare/lava
Ou le construire à partir de ce dépôt :
$ DOCKER_BUILDKIT=1 docker build lava .
Sur un système exécutant Ubuntu 22.04, vous devriez pouvoir simplement exécuter bash install.sh.
Notez que ce script d'installation installera des paquets et apportera des modifications à votre système.
Vous pouvez supprimer les binaires avec sudo apt-get remove lava.
Une fois l'installation du binaire terminée, vous pouvez installer localement en exécutant pip install python/.
REMARQUE : le paquet Python nécessite un fichier SQL généré lors de la compilation des binaires, placé dans python/src/pyroclastic/data/lava.sql.
Sans ce fichier, le paquet Python ne fonctionnera pas correctement.
Vous pouvez également installer manuellement les dépendances de LAVA puis compiler à partir des sources.
Téléchargez les paquets Debian situés dans les versions. Installez ensuite le paquet Python : pip install pyroclastic.
Ensuite, exécutez init_host pour générer un fichier host.json dans votre répertoire ~/.lava.
Ce fichier est utilisé par LAVA pour stocker des paramètres spécifiques
à votre machine. Vous pouvez modifier ces paramètres si nécessaire, mais les valeurs
par défaut devraient fonctionner, voir vars.py.
Quelques valeurs à garder à l'esprit sont les suivantes :
postgresdatabase, mais si vous avez installé LAVA localement, vous devriez probablement la changer en localhostREMARQUE : Vous avez également besoin de deux variables d'environnement pour la base de données Postgres SQL :
POSTGRES_PASS Il s'agit du mot de passe de l'utilisateur Postgres SQLPOSTGRES_USER Il s'agit du nom d'hôte de la base de données Postgres SQLLes configurations de projet se trouvent dans le répertoire target_configs, où
chaque configuration se trouve à target_configs/projectname/projectname.json.
Les chemins spécifiés dans ces fichiers de configuration sont relatifs aux valeurs définies
dans votre fichier host.json.
Comme mentionné, vous devez créer un utilisateur Postgres SQL. Vous pouvez utiliser un script pour utiliser les variables d'environnement pour les opérations suivantes :
Enfin, vous pouvez exécuter lava pour injecter réellement des bogues dans un programme.
Fournissez simplement le nom d'un projet situé dans le répertoire target_configs, par exemple :
lava -ak toy
Vous devriez maintenant avoir une copie buguée de toy !
Si vous souhaitez injecter des bogues dans une nouvelle cible, vous devrez probablement apporter quelques modifications. Consultez How-to-Lava pour obtenir des conseils.
Consultez le dossier docs pour commencer.
LAVA est le résultat de plusieurs années de développement par de nombreuses personnes ; une liste partielle (par ordre alphabétique) des contributeurs figure ci-dessous :