バグ発見ツールの評価と改善は、現在、グラウンドトゥルースコーパス(既知のバグとそれをトリガーする入力を持つソフトウェア)が不足しているために困難です。LAVAは、ソフトウェアに自動的にバグを注入することでこの問題を解決しようと試みます。すべてのLAVAバグには、それをトリガーする入力が付随しており、通常の入力がそれをトリガーする可能性は極めて低くなっています。これらの脆弱性は合成されたものですが、プログラムの深部に埋め込まれ、実際の入力によってトリガーされるという意味で、現実的でもあると私たちは主張します。私たちの研究は、オンデマンドで大規模なグラウンドトゥルース脆弱性コーパスを生成するアプローチの基礎を形成し、厳密なツール評価を可能にし、ツール開発者に高品質なターゲットを提供します。
LAVAは、MITリンカーン研究所、ニューヨーク大学、ノースイースタン大学の協力の成果です。
LAVAのmasterブランチの最新バージョンは、Ubuntu 22.04ベースのDockerイメージとして自動的にビルドされ、Docker Hubに公開されています。ほとんどのユーザーは、PANDAとLAVA、およびそのランタイム依存関係がインストールされているが、コンテナのサイズを削減するためにビルドアーティファクトやソースコードを含まないlavaコンテナを使用することをお勧めします。
lavaコンテナを使用するには、Docker Hubからプルできます。
$ docker pull pandare/lava
または、このリポジトリからビルドします。
$ DOCKER_BUILDKIT=1 docker build lava .
Ubuntu 22.04を実行しているシステムでは、bash install.shを実行するだけです。
このインストールスクリプトはパッケージをインストールし、システムに変更を加えることに注意してください。
sudo apt-get remove lavaを使用してバイナリを削除できます。
バイナリのインストールが完了したら、pip install python/を実行してローカルにインストールできます。
注意: Pythonパッケージが正しく動作するには、バイナリのコンパイル時に生成され、python/src/pyroclastic/data/lava.sqlに配置されるSQLファイルが必要です。
このファイルがないと、Pythonパッケージは正しく動作しません。
または、LAVAの依存関係を手動でインストールし、ソースからビルドすることもできます。
リリースにあるDebianパッケージをダウンロードしてください。次に、Pythonパッケージpip install pyroclasticをインストールします。
次に、init_hostを実行して、~/.lavaディレクトリにhost.jsonを生成します。
このファイルはLAVAによってマシン固有の設定を保存するために使用されます。
必要に応じてこれらの設定を編集できますが、デフォルト値で動作するはずです。vars.pyを参照してください。
留意すべきいくつかの値は以下の通りです。
postgresdatabaseですが、LAVAをローカルにインストールした場合は、localhostに変更する必要があります。注意: Postgres SQLデータベースには、以下の2つの環境変数も必要です。
POSTGRES_PASS Postgres SQLユーザーのパスワードPOSTGRES_USER Postgres SQLデータベースのホスト名プロジェクト構成はtarget_configsディレクトリにあり、各構成はtarget_configs/projectname/projectname.jsonに配置されています。
これらの構成ファイル内で指定されたパスは、host.jsonファイルで設定された値に対する相対パスです。
前述の通り、Postgres SQLユーザーを作成する必要があります。以下のために環境変数を使用するスクリプトを使用できます。
最後に、lavaを実行して実際にプログラムにバグを注入できます。
target_configsディレクトリにあるプロジェクトの名前を指定するだけです。例:
lava -ak toy
これで、バグを含むtoyのコピーが作成されるはずです!
新しいターゲットにバグを注入したい場合は、いくつかの修正が必要になるでしょう。ガイダンスについてはHow-to-Lavaを参照してください。
ドキュメントフォルダをチェックして始めてください。
LAVAは、多くの人々による数年にわたる開発の成果です。以下は貢献者の一部(アルファベット順)です。