目前,由于缺乏基准真值语料库(即包含已知漏洞且具有触发输入的软件),评估和改进漏洞查找工具面临困难。LAVA 尝试通过向软件自动注入漏洞来解决这一问题。每个 LAVA 漏洞都附带一个可触发它的输入,而正常输入极不可能触发该漏洞。这些漏洞虽是合成的,但我们认为,从它们嵌入程序深层且由真实输入触发这一意义上讲,仍然是逼真的。我们的工作为按需生成大规模基准真值漏洞语料库奠定了基础,从而能够进行严格的工具评估,并为工具开发者提供高质量的目标。
LAVA 是麻省理工学院林肯实验室、纽约大学和东北大学合作的成果。
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/ 进行本地安装。
注意:Python 包需要编译二进制文件时生成的 SQL 文件,该文件会被放置在 python/src/pyroclastic/data/lava.sql 中。
如果没有此文件,Python 包将无法正常工作。
或者,可以手动安装 LAVA 的依赖项,然后从源码构建。
下载位于 releases 中的 Debian 包。然后安装 Python 包:pip install pyroclastic。
接下来,运行 init_host 在 ~/.lava 目录中生成一个 host.json 文件。
此文件用于存储特定于机器的设置。
你可以根据需要编辑这些设置,但默认值应该可用,请参见 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 是多年来许多人共同开发的成果;以下是部分贡献者列表(按字母顺序):