Zurück zu den Updates
New releaseAug 20, 2026

lava v3.3.0

LAVA: Groß angelegte automatisierte Hinzufügung von Schwachstellen

Teilen

LAVA: Automatisierte Schwachstelleneinfügung im großen Maßstab

Publish Lava Package and Container

Lava Tests

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. Zu jedem LAVA-Fehler gehört eine Eingabe, die ihn auslöst, während normale Eingaben dies mit äußerst 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 Erzeugung großer Ground-Truth-Schwachstellenkorpora, der eine rigorose Bewertung von Werkzeugen ermöglicht und Werkzeugentwicklern ein hochwertiges Ziel bietet.

LAVA ist das Ergebnis 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, jedoch 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 erstellen:

$ DOCKER_BUILDKIT=1 docker build -t pandare/lava:local .

Wenn Docker Engine direkt in WSL läuft und Build-Schritte nicht auf das Netzwerk zugreifen können (zum Beispiel meldet APT Temporary failure resolving), versuchen Sie, das Host-Netzwerk von WSL für den Build zu verwenden:

DOCKER_BUILDKIT=1 docker build --network=host -t pandare/lava:local .

Dies gilt nur für Build-Schritte; später gestartete Container verwenden ihre eigenen Netzwerkeinstellungen.

Container-Arbeitsbereich

Verwenden Sie aus einem Arbeitsbereich, der target_bins/ und target_configs/ enthält, den Launcher, um eine Shell zu öffnen oder einen Befehl auszuführen. Er bindet den Arbeitsbereich unter demselben absoluten Pfad ein, sodass in host.json geschriebene Pfade zwischen den Läufen gültig bleiben. Ersetzen Sie /path/to/lava durch den Checkout, der den Launcher enthält:

/path/to/lava/scripts/docker-shell.sh
/path/to/lava/scripts/docker-shell.sh -- lava-init
/path/to/lava/scripts/docker-shell.sh -- lava --help

Docker läuft unter Ihrer UID/GID und speichert sein beschreibbares Home in .lava-container-home/ innerhalb des Workspace. Wenn Ihr Host-~/.panda/ existiert, bindet der Launcher es als PANDA-Cache des Containers ein, sodass vorhandene QCOWs und Kernel-Dateien wiederverwendet werden. Downloads und Cache-Änderungen bleiben in diesem Host- Verzeichnis erhalten. Verwenden Sie --panda-cache /path/to/cache, um einen anderen vorhandenen Cache auszuwählen. Ohne einen Host-Cache speichert PANDA Downloads in .lava-container-home/.panda/. Der Launcher verwendet standardmäßig pandare/lava:latest; verwenden Sie --image pandare/lava:v3.3.4, um ein Release auszuwählen, oder --image pandare/lava:local für den lokalen Build oben.

PostgreSQL muss bereits laufen. Exportieren Sie POSTGRES_USER und POSTGRES_PASSWORD an den Datenbank-Endpunkt, der aus dem Container heraus erreichbar ist. Für eine Datenbank in einem Docker-Netzwerk übergeben Sie --network NETWORK und verwenden dessen Containernamen als host. localhost innerhalb von Docker bezieht sich auf den LAVA-Container selbst. Nach der Konfiguration:

/path/to/lava/scripts/docker-shell.sh --network NETWORK -- lava -ak toy

-k löscht vorhandene Projektdaten ohne Bestätigung. Der Launcher ersetzt die alte Oberfläche, bei der der Projektname an erster Stelle stand; Befehle folgen nun --.

HPC mit Apptainer / Singularity

Verwenden Sie auf einem zugewiesenen Compute-Node die vom Cluster bereitgestellte Laufzeitumgebung. Ziehen Sie ein versioniertes Image einmalig in den persistenten Speicher und verwenden Sie es anschließend für Jobs erneut:

apptainer pull /path/to/scratch/lava-v3.3.4.sif docker://pandare/lava:v3.3.4
/path/to/lava/scripts/docker-shell.sh --runtime apptainer \
  --image /path/to/scratch/lava-v3.3.4.sif -- lava-init
/path/to/lava/scripts/docker-shell.sh --runtime apptainer \
  --image /path/to/scratch/lava-v3.3.4.sif -- lava -tc toy

Verwenden Sie --runtime singularity, wenn dies der installierte Befehl ist. Diese Runtimes verwenden die Identität und das Netzwerk des Host-Benutzers; konfigurieren Sie host.json für einen erreichbaren PostgreSQL-Dienst und exportieren Sie dieselben Anmeldedaten. Der Launcher startet weder die Datenbank noch fordert er eine Scheduler-Zuweisung an. Führen Sie ihn innerhalb der interaktiven Zuweisung Ihres Clusters oder in einem Batch-Skript aus. Dies belegt nicht, dass ein Release- Image die vollständige Pipeline unterstützt; überprüfen Sie die Image-Installation und führen Sie ein Testprojekt aus, bevor Sie einen großen Mining-Job einreichen.

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 die Abhängigkeiten von LAVA 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 aktuellen Arbeitsverzeichnis zu erzeugen. Diese Datei wird von LAVA verwendet, um Einstellungen zu speichern, die für Ihre Maschine spezifisch sind. Sie können diese Einstellungen nach Bedarf bearbeiten, aber die Standard- werte sollten funktionieren, siehe vars.py.

Einige Werte, die Sie beachten sollten, sind die folgenden:

  • host ist der Name der Postgres-SQL-Datenbank mit allen LAVA-Bugs. Derzeit ist er standardmäßig auf database gesetzt, obwohl Sie ihn wahrscheinlich auf localhost ändern sollten, wenn Sie LAVA lokal installiert haben.

HINWEIS: 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-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 den Werten, die in Ihrer host.json-Datei festgelegt sind.

Kategorien