バグ発見ツールの評価と改善は、現時点では正解データコーパス(すなわち、トリガーとなる入力を持つ既知のバグを含むソフトウェア)の不足により困難です。LAVA は、ソフトウェアに自動的にバグを注入することでこの問題の解決を試みます。すべての LAVA バグには、それをトリガーする入力が付随しており、通常の入力ではそれがトリガーされる可能性は極めて低いです。これらの脆弱性は合成的なものですが、プログラムの深部に埋め込まれており、実際の入力によってトリガーされるという意味で、依然として現実的であると私たちは主張します。私たちの研究は、大規模な正解データ脆弱性コーパスをオンデマンドで生成するためのアプローチの基盤を形成し、厳密なツール評価を可能にし、ツール開発者に高品質なターゲットを提供します。
LAVA は MIT Lincoln Laboratory、NYU、Northeastern University の協力の成果です。
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 パッケージはバイナリのコンパイルから生成された SQL ファイルが python/src/pyroclastic/data/lava.sql に配置されている必要があります。
このファイルがないと、Python パッケージは正しく動作しません。
あるいは、LAVA の依存関係を手動でインストールしてからソースからビルドすることもできます。
releases にある Debian パッケージをダウンロードしてください。次に Python パッケージ pip install pyroclastic をインストールします。
次に、init_host を実行して ~/.lava ディレクトリに host.json を生成します。
このファイルは LAVA があなたのマシン固有の設定を保存するために使用されます。必要に応じてこれらの設定を編集できますが、デフォルト値で動作するはずです。vars.py を参照してください。
覚えておくべきいくつかの値は以下の通りです:
postgres がデフォルトですdatabase がデフォルトですが、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 を参照してください。
始めるには docs フォルダを参照してください。
LAVA は多くの人々による数年にわたる開発の成果です。貢献者の一部(アルファベット順)のリストは以下の通りです: