
lava v3.3.0
LAVA: 大規模自動脆弱性追加
LAVA: 大規模自動脆弱性追加
バグ発見ツールの評価と改善は、現在、グラウンドトゥルースコーパス(既知のバグとそれをトリガーする入力を持つソフトウェア)が不足しているために困難です。LAVAは、ソフトウェアに自動的にバグを注入することでこの問題を解決しようと試みます。すべてのLAVAバグには、それをトリガーする入力が付随しており、通常の入力がそれをトリガーする可能性は極めて低くなっています。これらの脆弱性は合成されたものですが、プログラムの深部に埋め込まれ、実際の入力によってトリガーされるという意味で、現実的でもあると私たちは主張します。私たちの研究は、オンデマンドで大規模なグラウンドトゥルース脆弱性コーパスを生成するアプローチの基礎を形成し、厳密なツール評価を可能にし、ツール開発者に高品質なターゲットを提供します。
LAVAは、MITリンカーン研究所、ニューヨーク大学、ノースイースタン大学の協力の成果です。
クイックスタート
Docker
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, Debian
ローカルインストール
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をインストールします。
最終ステップ
host.jsonの利用
次に、init_hostを実行して、~/.lavaディレクトリにhost.jsonを生成します。
このファイルはLAVAによってマシン固有の設定を保存するために使用されます。
必要に応じてこれらの設定を編集できますが、デフォルト値で動作するはずです。vars.pyを参照してください。
留意すべきいくつかの値は以下の通りです。
- pguser データベースユーザーの名前で、現在はデフォルトで
postgres - host すべてのLAVAバグを含むPostgres SQLデータベースの名前。現在はデフォルトで
databaseですが、LAVAをローカルにインストールした場合は、localhostに変更する必要があります。
注意: Postgres SQLデータベースには、以下の2つの環境変数も必要です。
POSTGRES_PASSPostgres SQLユーザーのパスワードPOSTGRES_USERPostgres SQLデータベースのホスト名
プロジェクト構成
プロジェクト構成はtarget_configsディレクトリにあり、各構成はtarget_configs/projectname/projectname.jsonに配置されています。
これらの構成ファイル内で指定されたパスは、host.jsonファイルで設定された値に対する相対パスです。
Postgres SQLデータベースのセットアップ
前述の通り、Postgres SQLユーザーを作成する必要があります。以下のために環境変数を使用するスクリプトを使用できます。
- 環境変数から提供されたユーザー名とパスワードでユーザーを作成します。
- ホスト上のPostgres SQLデータベースを更新して、外部ソース(例:LAVA Dockerコンテナ)からのトラフィックを受け入れるようにします。
使用方法
最後に、lavaを実行して実際にプログラムにバグを注入できます。
target_configsディレクトリにあるプロジェクトの名前を指定するだけです。例:
lava -ak toy
これで、バグを含むtoyのコピーが作成されるはずです!
新しいターゲットにバグを注入したい場合は、いくつかの修正が必要になるでしょう。ガイダンスについてはHow-to-Lavaを参照してください。
ドキュメント
ドキュメントフォルダをチェックして始めてください。
著者
LAVAは、多くの人々による数年にわたる開発の成果です。以下は貢献者の一部(アルファベット順)です。
- 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