由于缺乏真实基准语料库(即具有已知漏洞及其触发输入的软件),目前评估和改进漏洞发现工具十分困难。LAVA 试图通过自动向软件中注入漏洞来解决这一问题。每个 LAVA 漏洞都附带一个触发它的输入,而普通输入极不可能触发该漏洞。这些漏洞是合成的,但我们认为它们仍然是真实的,因为它们被深埋在程序中,并由真实输入触发。我们的工作构成了一种按需生成大规模真实漏洞语料库的方法的基础,从而支持严格的工具评估,并为工具开发者提供高质量的目标。
LAVA 是 MIT Lincoln Laboratory、NYU 和 Northeastern University 合作的成果。
LAVA master 分支的最新版本会自动构建为基于 Ubuntu 22.04 的 Docker 镜像,并发布到 Docker Hub。大多数用户会希望使用 lava 容器,其中安装了 PANDA 和 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。
需要记住的几个值如下:
postgresdatabase,但如果你在本地安装 LAVA,很可能应将其改为 localhost注意:你还需要为 Postgres SQL 数据库设置两个环境变量:
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 是许多人多年开发的成果;以下是部分(按字母顺序)贡献者名单: