
lava v3.3.0
LAVA: Groß angelegte automatisierte Hinzufügung von Schwachstellen
LAVA: Automatische Schwachstelleneinfügung im großen Maßstab
Die Bewertung und Verbesserung von Werkzeugen zur Fehlersuche ist derzeit schwierig, da es an Ground-Truth-Korpora mangelt (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 mit extrem geringer Wahrscheinlichkeit tun. Diese Schwachstellen sind synthetisch, aber – so argumentieren wir – dennoch realistisch, in dem Sinne, dass sie tief in Programmen eingebettet sind und durch echte Eingaben ausgelöst werden. Unsere Arbeit bildet die Grundlage für einen Ansatz zur bedarfsgerechten Generierung großer Ground-Truth-Schwachstellenkorpora, der eine rigorose Werkzeugbewertung ermöglicht und Werkzeugentwicklern ein hochwertiges Ziel bietet.
LAVA ist das Produkt einer Zusammenarbeit zwischen dem MIT Lincoln Laboratory, der NYU und der Northeastern University.
Schnellstart
Docker
Die neueste Version von LAVAs master-Branch wird automatisch als Docker-Image auf Basis von Ubuntu 22.04 gebaut und auf Docker Hub veröffentlicht. Die meisten Benutzer werden das lava-Container-Image verwenden wollen, in dem PANDA und LAVA zusammen mit ihren Laufzeitabhängigkeiten installiert sind, aber ohne Build-Artefakte oder Quellcode, um die Größe des Containers zu reduzieren.
Um das lava-Container-Image zu verwenden, können Sie es von Docker Hub pullen:
$ docker pull pandare/lava
Oder aus diesem Repository bauen:
$ 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 installiert und Änderungen an Ihrem System vornimmt.
Sie können die Binärdateien mit sudo apt-get remove lava entfernen.
Sobald Sie die Installation der Binärdatei abgeschlossen haben, können Sie lokal mit pip install . installieren.
HINWEIS: Das Python-Paket benötigt eine SQL-Datei, die durch Kompilieren der Binärdateien erzeugt und in python/src/pyroclastic/data/lava.sql abgelegt wird.
Ohne diese Datei funktioniert das Python-Paket nicht korrekt.
Reguläre Installation
Alternativ können Sie LAVAs Abhängigkeiten manuell installieren und dann aus dem Quellcode bauen.
Laden Sie die Debian-Pakete aus den Releases herunter. Installieren Sie dann das Python-Paket mit pip install pyroclastic.
Abschließende Schritte
Verwendung von host.json
Führen Sie als Nächstes init_host aus, um eine host.json in Ihrem ~/.lava-Verzeichnis zu erzeugen.
Diese Datei wird von LAVA verwendet, um Einstellungen zu speichern, die spezifisch
für Ihren Rechner sind. Sie können diese Einstellungen nach Bedarf bearbeiten, aber die Standardwerte
sollten funktionieren, siehe vars.py.
Einige Werte, die Sie beachten sollten, sind die folgenden:
- pguser Dies ist der Name des Datenbankbenutzers, standardmäßig
postgres - host ist der Name der Postgres-SQL-Datenbank mit allen LAVA-Fehlern. Derzeit ist der Standardwert
database, obwohl Sie dies wahrscheinlich auflocalhoständern sollten, wenn Sie LAVA lokal installiert haben
HINWEIS: Sie benötigen außerdem zwei Umgebungsvariablen für die Postgres-SQL-Datenbank:
POSTGRES_PASSDies ist das Passwort für den Postgres-SQL-Benutzer`POSTGRES_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.
Pfade, die in diesen Konfigurationsdateien angegeben werden, sind relativ zu 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 unter Verwendung der Umgebungsvariablen für Folgendes verwenden:
- Den Benutzer mit dem angegebenen Benutzernamen und Passwort aus den Umgebungsvariablen erstellen.
- Die Postgres-SQL-Datenbank auf dem Host aktualisieren, um Datenverkehr von externen Quellen zu akzeptieren (z. B. LAVA-Docker-Container)
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 nun eine fehlerhafte Kopie von toy haben!
Wenn Sie Fehler in ein neues Ziel einfügen möchten, werden Sie wahrscheinlich einige Änderungen vornehmen müssen. Lesen Sie How-to-Lava für Anleitungen.
Dokumentation
Schauen Sie sich den Ordner docs an, um zu beginnen.
Autoren
LAVA ist das Ergebnis mehrjähriger Entwicklung durch viele Personen; eine teilweise (alphabetische) Liste der Mitwirkenden ist unten aufgeführt:
- 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