Voltar às atualizações
New releaseAug 20, 2026

lava v3.3.0

LAVA: Adição Automatizada de Vulnerabilidades em Grande Escala

Compartilhar

LAVA: Adição Automatizada de Vulnerabilidades em Grande Escala

Publish Lava Package and Container

Lava Tests

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 para localhost

NOTA: 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 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

Categorias