首页
社区
课程
招聘
[原创]syzkaller内核黑盒测试环境搭建中,内存不足的解决办法
发表于: 2023-2-12 21:29 9915

[原创]syzkaller内核黑盒测试环境搭建中,内存不足的解决办法

2023-2-12 21:29
9915

平台

虚拟机安装Ubuntu18.04.6 LTS adm64,注意:内存配置为最大

创建工作目录

1
2
3
4
5
6
cd ~
mkdir workspace
cd workspace
mkdir source bin fuzz
cd source
mkdir image kernel

安装依赖包

1
2
sudo apt update
sudo apt install make gcc flex bison libncurses-dev libelf-dev libssl-dev debootstrap

安装QEMU

1
sudo apt-get install qemu-system-x86

查看是否支持虚拟化

1
egrep -c '(vmx|svm)' /proc/cpuinfo

如果值大于0则支持虚拟化
如并不大于0,则需要开启虚拟化

 

注意:需要开启虚拟机虚拟化支持

安装配置 go环境 go1.17

1
2
wget https://go.dev/dl/go1.17.9.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.17.9.linux-amd64.tar.gz

注意:syzkaller对go版本有要求,我测试时低于14是不行的,据有朋友分享说版本太高也会有问题,所以选了17

 

配置环境变量:

1
sudo vi etc/bash.bashrc

在末尾添加如下,否则go编译器会提示找不到

1
export PATH=$PATH:/usr/local/go/bin

下载Syzkaller

1
2
cd ~/workspace/fuzz
git clone https://github.com/google/syzkaller

注意:git速度可能有点慢,多试几次,或者手动下载也可以

编译Syzkaller

编译环节是踩坑最多的地方:
编译提示“signal kill”,用如下命令

1
dmesg | egrep -i -B100 'killed process'

看看是否有红色提示“out of memory: killed process”,遇到这个问题是最多的,有朋友通过扩展内存通过了这步

 

### 扩展内存方法:

1
2
3
dd if=/dev/zero of=/root/swapfile bs=1M count=1024
mkswap /root/swapfile #建立swap的文件系统
swapon /root/swapfile #激活swap文件

使系统开机时自启用,在文件/etc/fstab中添加一行:

1
/root/swapfile swap swap defaults 0 0

但是,在我测试后扩展内存后,编译依然提示killed process,如果出现这个问题,说明syzkaller编译过程中用到了某些风险内存,触发了Linux的OOM机制,关掉OOM就可以了:

1
sysctl -w vm.panic_on_oom=1
1
sysctl -p

然后再重新make就可以了,如果编译过程中会出现卡住,那就重启多试几次。

编译要测试的内核

此时,QemU和Syzkaller均已安装成功,接下来需要编译你要测试的内核,我这里选用的是Linux5.4.1,直接从镜像网站下载速度快些:

1
非官方的链接 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

下载完后,复制到你的工作目录,然后解压:

1
2
3
cp -r  ~/Download/linux-5.4.1.tar.gz  ~/workspace/source/kernel
cd ~/workspace/source/kernel
tar -zxvf linux-5.4.1.tar.gz

下一步是要编译Linux内核,这一步其实很关键,配置不好,syzkaller是无法启动的,先看下linux源码下的.config文件:

1
ls -a

 

参考了其他朋友,使用pluma(没有就install一个)编辑.config,vim也可以的,使用pluma主要是可以搜索,比较方便然后修改或者添加以下配置:

1
2
3
4
5
6
7
8
9
10
# Coverage collection.
CONFIG_KCOV=y
# Debug info for symbolization.
CONFIG_DEBUG_INFO=y
# Memory bug detector
CONFIG_KASAN=y
CONFIG_KASAN_INLINE=y
# Required for Debian Stretch
CONFIG_CONFIGFS_FS=y
CONFIG_SECURITYFS=y

然后令配置生效:

1
2
make defconfig
make kvm_guest.config

编译内核:

1
make -j 20

这里需要等待些许时间,编译完成后会在同目录下生成vmlinux

同时在arch目录下的相应cpu架构文件目录下生成bzImage内核文件,这里默认的x86,所以在/arch/x86/boot/bzImage;

因为这里只是测试内核,所以没有添加文件系统,在商业化测试中,需要根据需要移植相应的系统,例如驱动漏洞挖掘等。

制作内核镜像

完成Linux内核编译后,接下制作内核镜像,一般使用debootstrap,我这里直接使用的syzkaller携带的镜像脚本生成的,因为里边添加了ssh配置,把syzkaller/tools文件下的creat-image.sh复制到image目录下

1
2
sudo chmod 777 creat-image.sh
sudo./creat-image.sh

运行完以上命令后,会生成如下ssh密钥文件和镜像文件stretch.img,

配置syzkaller

接下来配置syzkaller,在编译完成后,touch一个my.cfg,从中添加如下:

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

不要忘记,在同级目录中,mkdir workdir,这个文件是接收fuzz crash日志的。

启动测试

然后,就可以启动syzkaller进行测试了:

1
sudo ./bin/syz-manager -config=my.cfg

此时,会停留在这一步,没关系,多等待一会

 

正常启动后,会在终端显示如下测试日志的输出:

 

使用浏览器登陆

1
http://127.0.0.1:56741/

会显示syzkaller的界面,现在就可以正常测试了。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-2-14 17:18 被Valdik编辑 ,原因: 添加内容
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//