Torna agli aggiornamenti
New releaseAug 20, 2026

lava v3.3.0

LAVA: Aggiunta automatizzata di vulnerabilità su larga scala

Condividi

LAVA: Large Scale Automated Vulnerability Addition

Publish Lava Package and Container

Lava Tests

Valutare e migliorare gli strumenti per la ricerca di bug è attualmente difficile a causa della scarsità di corpora di ground truth (ovvero software che presenta bug noti con input che li attivano). LAVA tenta di risolvere questo problema iniettando automaticamente bug nel software. Ogni bug di LAVA è accompagnato da un input che lo attiva, mentre gli input normali hanno una probabilità estremamente bassa di farlo. Queste vulnerabilità sono sintetiche ma, sosteniamo, comunque realistiche, nel senso che sono incorporate in profondità nei programmi e vengono attivate da input reali. Il nostro lavoro costituisce la base di un approccio per generare su richiesta grandi corpora di vulnerabilità ground-truth, consentendo una rigorosa valutazione degli strumenti e fornendo un target di alta qualità per gli sviluppatori di strumenti.

LAVA è il prodotto di una collaborazione tra MIT Lincoln Laboratory, NYU e Northeastern University.

Avvio rapido

Docker

La versione più recente del branch master di LAVA viene automaticamente compilata come immagine docker basata su Ubuntu 22.04 e pubblicata su Docker Hub. La maggior parte degli utenti vorrà utilizzare il container lava, che ha PANDA e LAVA installati insieme alle loro dipendenze di runtime, ma senza artefatti di build o codice sorgente per ridurre le dimensioni del container.

Per utilizzare il container lava è possibile scaricarlo da Docker Hub:

$ docker pull pandare/lava

Crea da questo repository:

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

Se Docker Engine viene eseguito direttamente all'interno di WSL e i passaggi di build non riescono ad accedere alla rete (ad esempio, APT segnala Temporary failure resolving), prova a utilizzare la rete host di WSL per la build:

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

Questo vale solo per i passaggi di build; i container avviati successivamente utilizzano le proprie impostazioni di rete.

Workspace del container

Da un workspace contenente target_bins/ e target_configs/, utilizzare il launcher per aprire una shell o eseguire un comando. Monta il workspace allo stesso percorso assoluto, in modo che i percorsi scritti in host.json rimangano validi tra un'esecuzione e l'altra. Sostituire /path/to/lava con il checkout contenente il launcher:

/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 viene eseguito con il tuo UID/GID e memorizza la sua home scrivibile in .lava-container-home/ all'interno del workspace. Se il tuo ~/.panda/ sull'host esiste, il launcher lo monta come cache PANDA del container, così i QCOW e i file del kernel esistenti vengono riutilizzati. I download e le modifiche alla cache persistono in quella directory dell'host. Usa --panda-cache /path/to/cache per selezionare un'altra cache esistente. Senza una cache sull'host, PANDA memorizza i download in .lava-container-home/.panda/. Il launcher usa pandare/lava:latest per impostazione predefinita; usa --image pandare/lava:v3.3.4 per selezionare una release, oppure --image pandare/lava:local per la build locale sopra indicata.

PostgreSQL deve essere già in esecuzione. Esporta POSTGRES_USER e POSTGRES_PASSWORD, verso l'endpoint del database raggiungibile dall'interno del container. Per un database su una rete Docker, passa --network NETWORK e usa il nome del suo container come host. localhost all'interno di Docker si riferisce al container LAVA stesso. Una volta configurato:

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

-k elimina i dati di progetto esistenti senza conferma. Il launcher sostituisce la vecchia interfaccia che metteva prima il nome del progetto; ora i comandi seguono --.

HPC con Apptainer / Singularity

Su un nodo di calcolo allocato, utilizzare il runtime fornito dal cluster. Scaricare un'immagine versionata una volta sola nello storage persistente, poi riutilizzarla per i job:

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

Usa --runtime singularity se è il comando installato. Questi runtime utilizzano l'identità e la rete dell'utente host; configura host.json per un servizio PostgreSQL raggiungibile ed esporta le stesse credenziali. Il launcher non avvia il database né richiede un'allocazione dello scheduler. Eseguilo all'interno dell'allocazione interattiva del tuo cluster o di uno script batch. Ciò non dimostra che un'immagine di release supporti la pipeline completa; verifica l'installazione dell'immagine ed esegui un progetto di prova prima di inviare un job di mining di grandi dimensioni.

Ubuntu, Debian

Installazione locale

Su un sistema con Ubuntu 22.04, dovresti essere in grado di eseguire semplicemente bash install.sh. Nota che questo script di installazione installerà pacchetti e apporterà modifiche al tuo sistema. Puoi rimuovere i binari usando sudo apt-get remove lava.

Una volta completata l'installazione del binario, puoi installarlo localmente eseguendo pip install ..

NOTA che il pacchetto Python richiede un file SQL generato dalla compilazione dei binari che viene inserito in python/src/pyroclastic/data/lava.sql. Senza questo file, il pacchetto Python non funzionerà correttamente.

Installazione regolare

In alternativa, puoi installare manualmente le dipendenze di LAVA e poi compilare dai sorgenti. Scarica i pacchetti Debian presenti nelle release. Poi installa il pacchetto python pip install pyroclastic.

Passaggi finali

Utilizzo di host.json

Successivamente, esegui init-host per generare un host.json nella tua directory di lavoro corrente. Questo file è usato da LAVA per memorizzare impostazioni specifiche della tua macchina. Puoi modificare queste impostazioni secondo necessità, ma i valori predefiniti dovrebbero funzionare, vedi vars.py.

Alcuni valori da tenere a mente sono i seguenti:

  • host è il nome del database Postgres SQL con tutti i bug di LAVA. Attualmente, il valore predefinito è database, anche se se hai installato LAVA localmente, probabilmente dovresti cambiarlo in localhost

NOTA: hai anche bisogno di due variabili d'ambiente per il database Postgres SQL:

  • POSTGRES_PASS Questa è la password per l'utente Postgres SQL`
  • POSTGRES_USER Questo è l'hostname per il database Postgres SQL

Configurazioni del progetto

Le configurazioni del progetto si trovano nella directory target_configs, dove ogni configurazione si trova in target_configs/projectname/projectname.json. I percorsi specificati all'interno di questi file di configurazione sono relativi ai valori impostati nel tuo file host.json.

Categorie