
LAVA: Groß angelegte 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.
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 .
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.
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.
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:
postgresdatabase, obwohl Sie dies wahrscheinlich auf localhost ändern sollten, wenn Sie LAVA lokal installiert haben.HINWEIS: Sie benötigen auch zwei Umgebungsvariablen für die Postgres-SQL-Datenbank:
POSTGRES_PASS Dies ist das Passwort für den Postgres-SQL-BenutzerPOSTGRES_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.
In diesen Konfigurationsdateien angegebene Pfade sind relativ zu den Werten, die in Ihrer host.json-Datei festgelegt sind.
Wie bereits angedeutet, sollten Sie einen Postgres-SQL-Benutzer erstellen. Sie können ein Skript verwenden, um unter Verwendung der Umgebungsvariablen Folgendes zu tun:
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.
Schauen Sie sich das docs-Verzeichnis an, um zu beginnen.
LAVA ist das Ergebnis mehrjähriger Entwicklung durch viele Personen; eine unvollständige (alphabetische) Liste der Mitwirkenden finden Sie unten: