零基础syzkaller挖掘Linux内核漏洞

一、简述
是开发的一款内核模糊测试工具,简单点说就是自动化向内核输入各种有效的、无效的、完全随机化的参数数据,并观察内核的运行状况,是否发生了panic、内存泄漏等问题,以此发现隐藏在内核中的漏洞 。近些年很多内核的CVE发现均来自于此,该工具的开发维护也相对活跃 。它不仅支持x86,还支持ARM、Power、MIPS等处理器,而且不仅支持Linux,还支持、、等系统,同时还能支持对远程物理机、本地虚拟机的测试,此外还能支持分布式多机器测试 。
本篇文章侧重于使用,并无太多原理与代码分析,仅需一点linux使用基础即可,适合用于入门,整个环境搭建和使用过程踩了很多坑,有不少是网上没提到的 。
二、基础环境
三、环境搭建
3.1 虚拟机配置
虚拟机配置如下图所示,因为需要编译Linux内核与所以内存尽量的设置大一些 。
自带的安装在上不能与物理机之间互相拷贝文件可以尝试如下命令解决:
sudo apt updatesudo apt install open-vm-tools-desktop fuse
3.2 安装基本软件
sudo apt-get install debootstrapsudo apt install qemu-kvmsudo apt-get install subversionsudo apt-get install gitsudo apt-get install makesudo apt-get install qemusudo apt install libssl-dev libelf-devsudo apt-get install flex bison libc6-dev libc6-dev-i386 linux-libc-dev linux-libc-dev:i386 libgmp3-dev libmpfr-dev libmpc-devsudo apt-get install g++sudo apt-get install build-essentialsudo apt install gccsudo apt install openssh-server
安装go编程语言并没有使用apt-go,使用apt安装的go编程语言版本为1.10,使用这个版本的go会在编译时报错,所以在这选择下载安装1.17版本的go 。
wget https://dl.google.com/go/go1.17.6.linux-amd64.tar.gztar -zxvf go1.17.6.linux-amd64.tar.gz export GOPATH=/home/test/git/go/go //路径替换为自己虚拟机中的路径export GOROOT=/home/test/git/go/goexport PATH=$GOPATH/bin:$PATHexport PATH=$GOROOT/bin:$PATH
运行go命令可以执行,即为安装成功 。
3.3 编译
使用下面的命令拉取编译代码 。
git clone https://github.com/google/syzkaller.gitcd syzkallermake //这一步有可能会报错
如果出现卡死或 ,使用dmesg | egrep -i -B100 ' '查看,如果为Out of 即为内存不足 。这时可以先使用如下命令单独编译第一个文件:
GOOS=linux GOARCH=amd64 go build "-ldflags=-s -w -X github.com/google/syzkaller/prog.GitRevision= -X 'github.com/google/syzkaller/prog.gitRevisionDate='" -o ./bin/syz-manager github.com/google/syzkaller/syz-manager
查看bin目录下是否有编译好的syz-文件:
继续使用make命令完成编译,如下图所示:
如果单独编译第一个文件之后还是存在内存不足的问题,可以通过添加swap分区解决 。
dd if=/dev/zero of=/root/swapfile bs=1M count=1024 //创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小) 。mkswap /root/swapfile #建立swap的文件系统swapon /root/swapfile #启用swap文件/root/swapfile swap swap defaults 0 0 //使系统开机时自启用,在文件/etc/fstab中添加
3.4 编译Linux内核
git拉取linux代码:
git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.gitcd linux
如果拉取代码的时候报证书校验错误如下图所示:
通过如下命令解决:
sudo apt updatesudo apt install -y libgnutls30
进入linux目录后使用如下命令进行配置:
make CC="/usr/bin/gcc" defconfigmake CC="/usr/bin/gcc" kvm_guest.config
配置完成后打开当前目录下的.文件进行手动添加配置,添加内容如下: