
LAVA: Groß angelegte automatisierte Hinzufügung von Schwachstellen
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.
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 .
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.
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.
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:
postgresdatabase, obwohl Sie dies wahrscheinlich auf localhost ändern sollten, wenn Sie LAVA lokal installiert habenHINWEIS: Sie benötigen außerdem zwei Umgebungsvariablen für die Postgres-SQL-Datenbank:
POSTGRES_PASS Dies ist das Passwort für den Postgres-SQL-Benutzer`POSTGRES_USER Dies ist der Hostname für die Postgres-SQL-DatenbankProjektkonfigurationen 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.
Wie bereits angedeutet, sollten Sie einen Postgres-SQL-Benutzer erstellen. Sie können ein Skript unter Verwendung der Umgebungsvariablen für Folgendes verwenden:
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.
Schauen Sie sich den Ordner docs an, um zu beginnen.
LAVA ist das Ergebnis mehrjähriger Entwicklung durch viele Personen; eine teilweise (alphabetische) Liste der Mitwirkenden ist unten aufgeführt: