
lava v3.3.0
LAVA: Adição Automatizada de Vulnerabilidades em Grande Escala
LAVA: Adição Automatizada de Vulnerabilidades em Grande Escala
Avaliar e melhorar ferramentas de localização de bugs é atualmente difícil devido à escassez de corpora de ground truth (ou seja, software que possui bugs conhecidos com entradas que os ativam). O LAVA tenta resolver esse problema injetando automaticamente bugs em software. Cada bug do LAVA é acompanhado por uma entrada que o ativa, enquanto entradas normais são extremamente improváveis de fazê-lo. Essas vulnerabilidades são sintéticas, mas, argumentamos, ainda assim realistas, no sentido de que estão embutidas profundamente nos programas e são ativadas por entradas reais. Nosso trabalho forma a base de uma abordagem para gerar grandes corpora de vulnerabilidades de referência sob demanda, possibilitando uma avaliação rigorosa de ferramentas e fornecendo um alvo de alta qualidade para desenvolvedores de ferramentas.
LAVA é o produto de uma colaboração entre o MIT Lincoln Laboratory, a NYU e a Northeastern University.
Início Rápido
Docker
A versão mais recente do branch master do LAVA é automaticamente construída como uma imagem docker baseada no Ubuntu 22.04 e publicada no Docker Hub. A maioria dos usuários desejará usar o contêiner lava, que tem PANDA e LAVA instalados juntamente com suas dependências de tempo de execução, mas sem artefatos de construção ou código fonte para reduzir o tamanho do contêiner.
Para usar o contêiner lava, você pode puxá-lo do Docker Hub:
$ docker pull pandare/lava
Ou construir a partir deste repositório:
$ DOCKER_BUILDKIT=1 docker build lava .
Ubuntu, Debian
Instalação Local
Em um sistema executando Ubuntu 22.04, você deve conseguir apenas executar bash install.sh.
Observe que este script de instalação instalará pacotes e fará alterações no seu sistema.
Você pode remover os binários usando sudo apt-get remove lava.
Depois de terminar de instalar o binário, você pode instalar localmente executando pip install python/.
NOTA que o pacote Python requer um arquivo SQL gerado a partir da compilação dos binários que é colocado em python/src/pyroclastic/data/lava.sql.
Sem este arquivo, o pacote Python não funcionará corretamente.
Instalação Regular
Alternativamente, você pode instalar manualmente as dependências do LAVA e depois construir a partir do código fonte.
Baixe os pacotes Debian localizados nos releases. Em seguida, instale o pacote python pip install pyroclastic.
Passos Finais
Utilizando host.json
Em seguida, execute init_host para gerar um host.json no seu diretório ~/.lava.
Este arquivo é usado pelo LAVA para armazenar configurações específicas
da sua máquina. Você pode editar essas configurações conforme necessário, mas os valores
padrão devem funcionar, veja vars.py.
Alguns valores a ter em mente são os seguintes:
- pguser Este é o nome do usuário do banco de dados, atualmente padrão é
postgres - host é o nome do banco de dados Postgres SQL com todos os bugs do LAVA. Atualmente, padrão é
database, embora se você instalou o LAVA localmente, provavelmente deve alterar isso paralocalhost
NOTA: Você também precisa de duas variáveis de ambiente para o banco de dados Postgres SQL:
POSTGRES_PASSEsta é a senha para o usuário Postgres SQL`POSTGRES_USEREste é o nome do host para o banco de dados Postgres SQL
Configurações de Projeto
As configurações de projeto estão localizadas no diretório target_configs, onde
cada configuração está localizada em target_configs/projectname/projectname.json.
Os caminhos especificados dentro desses arquivos de configuração são relativos aos valores definidos
no seu arquivo host.json.
Configurando o banco de dados Postgres SQL
Como mencionado, você deve criar um usuário Postgres SQL. Você pode usar um script para usar as variáveis de ambiente para o seguinte:
- Crie o usuário com nome de usuário e senha fornecidos a partir das variáveis de ambiente.
- Atualize o banco de dados Postgres SQL no host para aceitar tráfego de fontes externas (por exemplo, contêiner LAVA Docker)
Uso
Finalmente, você pode executar lava para realmente injetar bugs em um programa.
Basta fornecer o nome de um projeto que está no diretório target_configs, por exemplo:
lava -ak toy
Agora você deve ter uma cópia cheia de bugs do toy!
Se você quiser injetar bugs em um novo alvo, provavelmente precisará fazer algumas modificações. Confira How-to-Lava para orientação.
Documentação
Confira a pasta docs para começar.
Autores
LAVA é o resultado de vários anos de desenvolvimento por muitas pessoas; uma lista parcial (em ordem alfabética) de contribuidores está abaixo:
- Andy Davis
- Brendan Dolan-Gavitt
- Andrew Fasano
- Zhenghao Hu
- Patrick Hulin
- Amy Jiang
- Engin Kirda
- Tim Leek
- Andrea Mambretti
- Andrew Quijano
- Wil Robertson
- Aaron Sedlacek
- Rahul Sridhar
- Frederick Ulrich
- Ryan Whelan