
LAVA: Aggiunta automatizzata di vulnerabilità su larga scala
Valutare e migliorare gli strumenti di rilevamento dei bug è attualmente difficile a causa della scarsità di corpora di verità di base (cioè software con bug noti e input che li attivano). LAVA tenta di risolvere questo problema iniettando automaticamente bug nel software. Ogni bug LAVA è accompagnato da un input che lo attiva, mentre gli input normali è estremamente improbabile che lo facciano. 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à di verità di base, consentendo una valutazione rigorosa degli strumenti e fornendo un obiettivo di alta qualità per gli sviluppatori di strumenti.
LAVA è il prodotto di una collaborazione tra il MIT Lincoln Laboratory, la NYU e la Northeastern University.
L'ultima versione del ramo master di LAVA viene automaticamente costruita come immagine docker basata su Ubuntu 22.04 e pubblicata su Docker Hub. La maggior parte degli utenti vorrà usare il container lava che ha PANDA e LAVA installati insieme alle loro dipendenze runtime, ma nessun artefatto di build o codice sorgente per ridurre le dimensioni del container.
Per usare il container lava puoi prelevarlo da Docker Hub:
$ docker pull pandare/lava
Oppure costruiscilo da questo repository:
$ DOCKER_BUILDKIT=1 docker build lava .
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 con sudo apt-get remove lava.
Una volta terminata l'installazione del binario, puoi installare localmente eseguendo pip install python/.
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.
In alternativa, puoi installare manualmente le dipendenze di LAVA e poi compilare dal sorgente.
Scarica i pacchetti Debian situati nelle release. Poi installa il pacchetto python pip install pyroclastic.
Successivamente, esegui init_host per generare un host.json nella tua directory ~/.lava.
Questo file viene utilizzato da LAVA per memorizzare le 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:
postgresdatabase, anche se se hai installato LAVA localmente, probabilmente dovresti cambiarlo in localhostNOTA: Sono necessarie anche 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 SQLLe 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 file host.json.
Come accennato, dovresti creare un utente Postgres SQL. Puoi usare uno script per usare le variabili d'ambiente per quanto segue:
Infine, puoi eseguire lava per iniettare effettivamente bug in un programma.
Basta fornire il nome di un progetto che si trova nella directory target_configs, ad esempio:
lava -ak toy
Ora dovresti avere una copia buggata di toy!
Se vuoi iniettare bug in un nuovo target, probabilmente dovrai apportare alcune modifiche. Consulta How-to-Lava per una guida.
Dai un'occhiata alla cartella docs per iniziare.
LAVA è il risultato di diversi anni di sviluppo da parte di molte persone; un elenco parziale (in ordine alfabetico) dei contributori è riportato di seguito: