Skip to content
 编辑

How to set up syzkaller

如何安装 syzkaller

本章节描述使用 syzkaller 对 Linux 内核进行模糊测试的通用指导

针对特定虚拟机类型或内核架构的设置指南,请参阅以下页面:

安装

Syzkaller 使用需要以下组件:

如果你遇到任何问题,请查看故障排除页面。

Go 和 syzkaller

syzkaller 使用 Go 语言编写,构建需要 Go 1.20+ 工具链。通常我们支持最新的两个 Go 版本。你可以使用以下命令安装工具链:

wget https://dl.google.com/go/go1.21.4.linux-amd64.tar.gz
tar -xf go1.21.4.linux-amd64.tar.gz
export GOROOT=`pwd`/go
export PATH=$GOROOT/bin:$PATH

其他选项请参见 Go: 下载和安装

下载并构建 syzkaller:

git clone https://github.com/google/syzkaller
cd syzkaller
make

编译完成后,应在 bin/ 目录中生成对应架构下的可执行文件。

注意:如果要进行跨操作系统/架构测试,需要在 make 命令中指定 TARGETOSTARGETVMARCHTARGETARCH 参数。详细信息请参阅 Makefile

环境设置

如果在跨架构环境下进行模糊测试,可能需要正确设置 binutils,详见此处

C 编译器

Syzkaller 是一种基于覆盖率的模糊测试工具,因此需要使用支持覆盖率的内核进行构建,这要求使用较新版本的 GCC。覆盖率支持已被提交到 GCC,从 GCC 6.1.0 版本开始发布。 确保您的 GCC 符合此要求,或者获取 syzbot 使用的 GCC,参见此处

Linux 内核

除了 GCC 中的覆盖率支持外,还需要在内核方面进行相应支持。KCOV 在内核版本 4.6 时合入 Linux 内核主线,并通过 CONFIG_KCOV=y 内核配置选项启用。 对于旧版本的内核,至少需要将代码提交 kernel: add kcov code coverage 进行移植。此外,建议移植所有涉及 kernel/kcov.c 的内核补丁。

为了启用更多的 syzkaller 功能并提高漏洞检测能力,建议使用额外的配置选项,详见此页面

虚拟机设置

Syzkaller 在工作虚拟机或物理设备上执行内核模糊测试。这些工作环境被称为虚拟机 (VMs)。Syzkaller 支持 QEMU、kvmtool 和 GCE 虚拟机、Android 设备以及 Odroid C2 开发板。

以下是一个 syzkaller VM 的通用要求:

为了在 QEMU 中使用 syzkaller VM,请在主机系统上安装 QEMU,详细信息请参见 QEMU 文档。同时,也可以使用 create-image.sh 脚本创建适当的 Linux 镜像。

有关在 QEMU、Android 以及其他类型的 VM 上安装 syzkaller 的说明,请参见本文顶部的相关链接。

故障排除