第一次真正使用fuzz,与我对fuzz的印象不同,syzkaller是不需要我提供样例输入的,这就让人很舒服

安装

首先安装go,由于我使用的linux系统是manjaro,所以直接使用sudo pacman -S go即可完成安装

然后运行如下指令

1
2
3
go get -u -d github.com/google/syzkaller/...
cd gopath/src/github.com/google/syzkaller/
make

对于manjaro,gopath位于当前用户的家目录内

然后要做镜像,在gopath/src/github.com/google/syzkaller/tools/目录中有一个create-image.sh,其中用到了debootstrap可能需要额外安装一下,再一个就是要给他使用国内源,不然会很慢

使用国内源的方法是,使用编辑器编辑该脚本文件,在debootstrap的那条指令的最后添加一个http://mirrors.163.com/debian/参数

最后运行该文件,会在当前文件夹得到一个chroot的目录、stretch.img以及stretch.id_rsa 和stretch.id_rsa.pub用来进行ssh连接

chroot目录的作用是生成stretch.img,因此可以删除

接下来是内核的编译,下载内核

首先在内核目录执行

1
2
make defconfig
make kvmconfig

然后修改当前目录下的.config文件,把下面链接中说的配置改上去

https://github.com/google/syzkaller/blob/master/docs/linux/kernel_configs.md

然后直接make即可

运行

在syzkaller文件夹下新建一个workdir,里面新建一个文件my.cfg

文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"http": "127.0.0.1:56741",
"target": "linux/amd64",
"workdir": "path/to/syzkaller/workdir",
"kernel_obj": "path/to/vmlinux",
"image": "path/to/stretch.img",
"sshkey": "path/to/stretch.id_rsa",
"syzkaller": "path/to/syzkaller",
"procs": 4,
"type": "qemu",
"vm": {
"count": 4,
"kernel": "path/to/bzImage",
"cpu": 2,
"mem": 2048
}
}

然后在该目录执行../bin/syz-manager -config=./my.cfg就开始fuzz了

浏览器进入http://127.0.0.1:56741就可以监视fuzz的运行状态以及fuzz的成果