
lava v3.3.0
LAVA: Adição Automatizada de Vulnerabilidades em Grande Escala
LAVA: Adição Automatizada de Vulnerabilidades em Larga Escala
Avaliar e melhorar ferramentas de detecção de bugs é atualmente difícil devido à escassez de corpora de referência (ou seja, software que possui bugs conhecidos com entradas que os acionam). O LAVA tenta resolver esse problema ao injetar bugs automaticamente em software. Todo bug do LAVA é acompanhado por uma entrada que o aciona, enquanto entradas normais são extremamente improváveis de fazê-lo. Essas vulnerabilidades são sintéticas, mas, argumentamos, ainda realistas, no sentido de que estão embutidas profundamente nos programas e são acionadas por entradas reais. Nosso trabalho forma a base de uma abordagem para gerar grandes corpora de vulnerabilidades de referência sob demanda, possibilitando avaliação rigorosa de ferramentas e fornecendo um alvo de alta qualidade para desenvolvedores de ferramentas.
O 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 compilada como imagens docker baseadas no Ubuntu 22.04 e publicada no Docker Hub. A maioria dos usuários vai querer usar o contêiner lava, que tem o PANDA e o LAVA instalados junto com suas dependências de runtime, mas sem artefatos de build ou código-fonte para reduzir o tamanho do contêiner.
Para usar o contêiner lava, você pode baixá-lo do Docker Hub:
$ docker pull pandare/lava
Ou compilar 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 simplesmente 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 ..
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 esse arquivo, o pacote Python não funcionará corretamente.
Instalação regular
Alternativamente, você pode instalar manualmente as dependências do LAVA e então compilar a partir do código-fonte.
Baixe os pacotes Debian localizados nas releases. Em seguida, instale o pacote python pip install pyroclastic.
Etapas finais
Utilizando host.json
Em seguida, execute init_host para gerar um host.json no seu diretório ~/.lava.
Esse 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 o padrão é
postgres - host é o nome do banco de dados Postgres SQL com todos os bugs do LAVA. Atualmente, o padrão é
database, embora, se você instalou o LAVA localmente, provavelmente deve alterá-lo 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 do Postgres SQL`POSTGRES_USEREste é o hostname 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 do Postgres SQL. Você pode usar um script para usar as variáveis de ambiente para o seguinte:
- Criar o usuário com o nome de usuário e senha fornecidos a partir das variáveis de ambiente.
- Atualizar o banco de dados Postgres SQL no host para aceitar tráfego de fontes externas (por exemplo, contêiner Docker do LAVA)
Uso
Por fim, você pode executar lava para realmente injetar bugs em um programa.
Basta fornecer o nome de um projeto que esteja no diretório target_configs, por exemplo:
lava -ak toy
Agora você deve ter uma cópia com bugs do toy!
Se você quiser injetar bugs em um novo alvo, provavelmente precisará fazer algumas modificações. Consulte How-to-Lava para orientação.
Documentação
Confira a pasta docs para começar.
Autores
O 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