
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.
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 .
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.
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.
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:
postgresdatabase, embora se você instalou o LAVA localmente, provavelmente deve alterar isso para localhostNOTA: Você também precisa de duas variáveis de ambiente para o banco de dados Postgres SQL:
POSTGRES_PASS Esta é a senha para o usuário Postgres SQL`POSTGRES_USER Este é o nome do host para o banco de dados Postgres SQLAs 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.
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:
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.
Confira a pasta docs para começar.
LAVA é o resultado de vários anos de desenvolvimento por muitas pessoas; uma lista parcial (em ordem alfabética) de contribuidores está abaixo: