
lava v3.3.0
LAVA: Groß angelegte automatisierte Hinzufügung von Schwachstellen
LAVA: Großflächige automatisierte Hinzufügung von Schwachstellen
Die Bewertung und Verbesserung von Fehlerfindungswerkzeugen ist derzeit schwierig aufgrund eines Mangels an Ground-Truth-Korpora (d.h. Software mit bekannten Fehlern und auslösenden Eingaben). LAVA versucht, dieses Problem zu lösen, indem es automatisch Fehler in Software einfügt. Jeder LAVA-Fehler wird von einer Eingabe begleitet, die ihn auslöst, während normale Eingaben dies äußerst unwahrscheinlich machen. Diese Schwachstellen sind synthetisch, aber wie wir argumentieren, dennoch realistisch, in dem Sinne, dass sie tief in Programmen eingebettet sind und durch reale Eingaben ausgelöst werden. Unsere Arbeit bildet die Grundlage für einen Ansatz zur bedarfsgerechten Generierung großer Ground-Truth-Schwachstellenkorpora, die eine rigorose Werkzeugbewertung ermöglichen und ein qualitativ hochwertiges Ziel für Werkzeugentwickler darstellen.
LAVA ist das Ergebnis einer Zusammenarbeit zwischen dem MIT Lincoln Laboratory, der NYU und der Northeastern University.
Schnellstart
Docker
Die neueste Version des master-Zweigs von LAVA wird automatisch als Docker-Image basierend auf Ubuntu 22.04 erstellt und auf Docker Hub veröffentlicht. Die meisten Benutzer werden den lava-Container verwenden wollen, der PANDA und LAVA zusammen mit ihren Laufzeitabhängigkeiten installiert hat, aber keine Build-Artefakte oder Quellcode, um die Größe des Containers zu reduzieren.
Um den lava-Container zu verwenden, können Sie ihn von Docker Hub pullen:
$ docker pull pandare/lava
Oder aus diesem Repository erstellen:
$ DOCKER_BUILDKIT=1 docker build lava .
Ubuntu, Debian
Lokale Installation
Auf einem System mit Ubuntu 22.04 sollten Sie einfach bash install.sh ausführen können.
Beachten Sie, dass dieses Installationsskript Pakete installieren und Änderungen an Ihrem System vornehmen wird.
Sie können die Binärdateien mit sudo apt-get remove lava entfernen.
Sobald Sie die Binärdatei installiert haben, können Sie lokal mit pip install python/ installieren.
HINWEIS: Das Python-Paket benötigt eine SQL-Datei, die beim Kompilieren der Binärdateien erstellt wird und in python/src/pyroclastic/data/lava.sql abgelegt wird.
Ohne diese Datei funktioniert das Python-Paket nicht korrekt.
Normale Installation
Alternativ können Sie die Abhängigkeiten von LAVA manuell installieren und dann aus dem Quellcode erstellen.
Laden Sie die Debian-Pakete herunter, die sich in den Releases befinden. Installieren Sie dann das Python-Paket mit pip install pyroclastic.
Letzte Schritte
Nutzung von host.json
Führen Sie als nächstes init_host aus, um eine host.json in Ihrem ~/.lava-Verzeichnis zu erstellen.
Diese Datei wird von LAVA verwendet, um maschinenspezifische Einstellungen zu speichern. Sie können diese Einstellungen nach Bedarf bearbeiten, aber die Standardwerte sollten funktionieren. Siehe vars.py.
Einige Werte, die Sie beachten sollten:
- pguser Dies ist der Name des Datenbank-Benutzers, standardmäßig
postgres - host ist der Name der Postgres-SQL-Datenbank mit allen LAVA-Fehlern. Derzeit standardmäßig
database, obwohl Sie dies wahrscheinlich auflocalhoständern sollten, wenn Sie LAVA lokal installiert haben.
HINWEIS: Sie benötigen auch zwei Umgebungsvariablen für die Postgres-SQL-Datenbank:
POSTGRES_PASSDies ist das Passwort für den Postgres-SQL-BenutzerPOSTGRES_USERDies ist der Hostname für die Postgres-SQL-Datenbank
Projektkonfigurationen
Projektkonfigurationen befinden sich im Verzeichnis target_configs, wobei jede Konfiguration unter target_configs/projectname/projectname.json liegt.
In diesen Konfigurationsdateien angegebene Pfade sind relativ zu den Werten, die in Ihrer host.json-Datei festgelegt sind.
Einrichten der Postgres-SQL-Datenbank
Wie bereits angedeutet, sollten Sie einen Postgres-SQL-Benutzer erstellen. Sie können ein Skript verwenden, um unter Verwendung der Umgebungsvariablen Folgendes zu tun:
- Erstellen Sie den Benutzer mit dem bereitgestellten Benutzernamen und Passwort aus den Umgebungsvariablen.
- Aktualisieren Sie die Postgres-SQL-Datenbank auf dem Host, um Datenverkehr von externen Quellen (z. B. LAVA-Docker-Container) zu akzeptieren.
Verwendung
Schließlich können Sie lava ausführen, um tatsächlich Fehler in ein Programm einzufügen.
Geben Sie einfach den Namen eines Projekts an, das sich im Verzeichnis target_configs befindet, zum Beispiel:
lava -ak toy
Sie sollten jetzt eine fehlerhafte Kopie von toy haben!
Wenn Sie Fehler in ein neues Ziel einfügen möchten, müssen Sie wahrscheinlich einige Änderungen vornehmen. Schauen Sie sich How-to-Lava zur Anleitung an.
Dokumentation
Schauen Sie sich das docs-Verzeichnis an, um zu beginnen.
Autoren
LAVA ist das Ergebnis mehrjähriger Entwicklung durch viele Personen; eine unvollständige (alphabetische) Liste der Mitwirkenden finden Sie unten:
- 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