Ubuntu20.04下Syzkaller的安装搭建

Syzkaller

  • Syzkaller安装小结
    • 文章参考
    • 平台
    • 安装前提
    • 创建文件夹
    • 内核文件下载
    • 编译内核-启用配置
    • 编译内核-构建
    • 创建镜像
    • QEMU
      • 安装工具
      • 是否支持虚拟化
      • 验证
    • Go语言
    • Syzkaller

Syzkaller安装小结


文章参考

GitHub-syzkaller-setup

平台

Ubuntu20.04

安装前提

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

创建文件夹

  在自己用户目录下创建文件夹,具体创建因人而异,可以参考:

/workspace 一级目录
/source /bin /fuzz
/source 下有 /image /kernel

  具体代码如下

cd ~
mkdir workspace
cd workspace
mkdir source bin fuzz
cd source 
mkdir image kernel

  以上仅作为目录创建参考,文中会以$KERNEL,$iMAGE,$GOPATH来代指,执行的时候需更换为自己的实际目录。


内核文件下载

  可以直接使用git命令去官网进行克隆,速度慢的话可以选择国内的镜像网站直接下载。
  笔者自己是手动下载了压缩包,复制到前文创建好的kernel文件夹中,进行解压。
  解压后的文件夹即为内核根目录,即$KERNEL

  1. 使用git
git clone --branch v5.14 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git $KERNEL
  1. 手动下载

  推荐一下另一个链接,非官方的链接 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

Ubuntu20.04下Syzkaller的安装搭建_第1张图片

  图为笔者选择的内核,将该内核复制到创建的文件夹中并解压

cp -r  ~/下载/linux-5.14.1.tar.gz  ~/workspace/source/kernel
cd ~/workspace/source/kernel
tar -zxvf linux-5.14.1.tar.gz

  解压成功后 ,~/workspace/source/kernel/linux-5.14.1即为笔者的内核目录$KERNEL


编译内核-启用配置

cd $KERNEL
make defconfig
make kvm_guest.config

  此处注意make的安装以及更新,笔者一开始就在此处犯了错。

  接下来是编辑.config文件,以下内容在文件中应该是以#CONFIG_KCOV is not set这种形式存在,如果不存在就直接添加。
  可以选择自己喜欢的编辑器,笔者一开始使用的vim但是不好找到对应位置,所以笔者在这推荐使用pluma打开.config文件,使用pluma可以直接用CTRL+F去查找然后进行修改。
  编辑的.config文件内容↓:

# 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

  接下来仍在该目录执行:

make olddefconfig

编译内核-构建

  仍然是$KERNEL位置

make -j`nproc`

  构建成功后,会生成vmlinuxbzImage

ls $KERNEL/vmlinux

ls $KERNEL/arch/x86/boot/bzImage

创建镜像

  若第一步没有安装debootstrap,在这一步就必须要进行安装了

sudo apt-get install debootstrap

  然后在github的syzkaller里的tools文件夹中找到文件creat-image.sh并复制出来,放到image文件夹中。

cd $image
#将 creat-image.sh 文件复制到此处
sudo chmod 777 creat-image.sh

  这里如果直接运行可能会非常缓慢,因为在creat-image里面有调用了官方的镜像,速度较慢。所以建议进入creat-image文件中去修改镜像源。修改为清华或者阿里的源都可以。
  具体的修改位置也可以使用pluma去查找deb.debian.org,将此处地址更换掉。
  然后就可以运行文件了。

./creat-image.sh

  运行成功后会生成stretch.img文件。


QEMU

安装工具

sudo apt-get install qemu-system-x86

是否支持虚拟化

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

  如果值大于0则支持虚拟化。
  如并不大于0,则需要开启虚拟化,真实主机开启虚拟化需要重启进入bios。

  • 在BIOS中找到 Intel Virtual Technology,选择Enabled,保存后退出BIOS并启动系统,这次执行上面命令就可以返回大0的值。
  • 如果是VMware虚拟机,在虚拟机设置中找到选项并打开,然后重启虚拟机。

Ubuntu20.04下Syzkaller的安装搭建_第2张图片


验证

qemu-system-x86_64 \
	-m 2G \
	-smp 2 \
	-kernel $KERNEL/arch/x86/boot/bzImage \
	-append "console=ttyS0 root=/dev/sda earlyprintk=serial net.ifnames=0" \
	-drive file=$IMAGE/stretch.img,format=raw \
	-net user,host=10.0.2.10,hostfwd=tcp:127.0.0.1:10021-:22 \
	-net nic,model=e1000 \
	-enable-kvm \
	-nographic \
	-pidfile vm.pid \
	2>&1 | tee vm.log

  注意将代码中的$KERNEL等路径替换为自己的路径。
  如果成功会进入一个qemu的虚拟机,在这进行测试:

  ssh -i $IMAGE/stretch.id_rsa -p 10021 -o "StrictHostKeyChecking no" root@localhost

  测试连接成功后使用poweroff可以退出。


Go语言

  syzkaller是使用go语言编写的,所以需要go语言环境的支持。尽量安装1.16以上版本的go语言。
  笔者在实际操作时一开始是安装的go1.19.2,不过在后续对syzkaller进行编译的过程中遇到了多个问题,搜索后发现原因应该是go语言的版本太新了,需要选择更早的版本进行安装,最后是安装的go1.17版本。
  在安装go语言的时候,可以通过命令行直接安装,也可以手动下载,然后拷贝至~/workspace/bin/文件中,解压后的go文件夹即为笔者的$GOROOT文件夹。


  官网下载可能较慢,推荐使用go语言中文网。

export GOROOT=$GOROOT
export PATH=$GOROOT/bin:$PATH

  环境变量声明后,就可以查看当前的go语言版本了。

go version

  不过笔者在退出后重新打开终端,发现对是syzkaller进行编译会一直报错go: not found,查阅后发现上述声明是仅仅针对当前窗口,需要去/etc/profile里面修改。

sudo echo "export GOROOT=$GOROOT" >> /etc/profile
sudo echo "export PATH=$GOROOT/bin:$PATH" >> /etc/profile
source /etc/profile

Syzkaller

  首先是下载syzkaller,可以直接将syzkaller克隆到主机上。
  建议一开始先进到提前创建好的fuzz文件夹中,在此进行下载。

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

  不过如果嫌弃下载速度过慢也可以手动去下载。
Ubuntu20.04下Syzkaller的安装搭建_第3张图片

  手动下载后将压缩包放到~/workspace/fuzz/syzkaller/src/github.com/google/文件夹中,并在此解压unzip syzkaller-master.zip
   因为在接下来会编辑的my.cfg文件中,文件夹名为syzkaller,所以我也将解压后的文件夹名字进行了更改。

mv syzkaller-master syzkaller

  然后进入syzkaller文件夹,进行编译。

cd syzkaller
make

  make此处是笔者消耗时间最多的地方,遇到了诸多问题。

  • 一开始是go语言的版本过高,即前面提到的go1.19版本会报错
  • 接着遇到的问题便是多次出现go :not found,解决环境变量声明后不再出现此问题
  • 还有个小问题是权限不够,仅仅用sudo还是不能成功运行,进入bash之后才顺利make

   make成功后在该处创建`my.cfg`文件,并在其中输入:
{
	"target": "linux/amd64",
	"http": "127.0.0.1:56741",
	"workdir": "$GOPATH/src/github.com/google/syzkaller/workdir",
	"kernel_obj": "$KERNEL",
	"image": "$IMAGE/stretch.img",
	"sshkey": "$IMAGE/stretch.id_rsa",
	"syzkaller": "$GOPATH/src/github.com/google/syzkaller",
	"procs": 8,
	"type": "qemu",
	"vm": {
		"count": 4,
		"kernel": "$KERNEL/arch/x86/boot/bzImage",
		"cpu": 2,
		"mem": 2048
	}
}

  $GOPATH是go语言工作路径,笔者的是~/workspace/fuzz/syzkaller
  编写完my.cfg创建workdir文件夹

mkdir workdir

  最后就可以运行syzkaller了

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

Ubuntu20.04下Syzkaller的安装搭建_第4张图片

  笔者是才刚刚开始接触fuzz,在操作系统和linux方面只是在选修课中简单接触过,这次看着github的教程和csdn上的博客,一路磕磕绊绊,才算勉强完成了syzkaller的安装搭建,不过这次也让我实实在在的使用了linux的相关指令,文章基本全程参考github,有少量自己遇到的问题,也许很多地方说的不明白,还请海涵。之后也会尝试去使用syzkller。

你可能感兴趣的:(Fuzz,笔记,linux,git,github)