0x00 背景
最近看論文看到了Google官方的內核模糊測試軟件syzkaller,想要安裝一下試試看。沒想到百度出來的教程只有兩三篇,而且過程講的及其模糊,按照其中的一篇進行搭建了兩天也沒成功。後來對比了官方的安裝說明才發現那篇教程有很多地方是錯的。果然還是不能偷懶找中文安裝教程。接下來介紹下我此次的安裝過程,以及遇到的各種問題。
0x01 安裝過程
首先下載好安裝要用到的包,因爲Ubuntu上直接wget請求實在是太慢了,所以還是通過windows下載好再傳到Ubuntu上比較快。這裏是我下載好的所有要用到的包
鏈接:https://pan.baidu.com/s/1HxRHJCAdUzLvGZ21lxj9UQ
提取碼:gp0v
包括:gmp-6.1.0 mpc-1.0.3 mpfr-3.1.0
syzkaller-master Linux-master go1.14.2.linux
下面進入安裝環節。
0x02 安裝GCC 8.0.1
雖然網上有人說gcc的版本和Linux的內核版本沒有關係,但官方的建議是把gcc升級到最新的版本,這樣會使編譯內核的過程更順暢。我實測也是gcc 8.0.1更爲順暢,所以還是建議安裝gcc8.0.1。
首先建立gcc目錄
mkdir gcc-build-8.0.1
安裝gmp,一定要先安裝gmp
tar -Jxvf gmp-6.1.0.tar.xz
mkdir temp #在與gmp-6.1.0同級別的目錄下建一個新文件夾,叫temp(自己命名)
cd temp
../gmp-6.1.0/configure –prefix=/usr/local/gmp-6.1.0 --#這句是說,安裝路徑是/usr/local/,名字叫gmp-6.1.0;
make
sudo make install
安裝mpfr
tar -Jxvf mpfr-3.1.4.tar.bz2
cd temp
#先清空temp內的文件,這樣安裝兩個包互補影響,當然也可以另外新建一個文件夾,在你新的文件夾下:
../mpfr-3.1.4/configure --prefix=/usr/local/mpfr-3.1.3 --with-gmp=/usr/local/gmp-8.0.1
make
sudo make install
安裝mpc
tar -zxvf mpc-1.0.3.tar.gz
cd temp
#同樣先清空temp文件夾
../mpc-1.0.3/configure –prefix=/usr/local/mpc-1.0.3 –with-gmp=/usr/local/gmp-8.0.1 –with-mpfr=/usr/local/mpfr-3.1.4
make
sudo make install
安裝gcc
tar -zxvf gcc-8.0.1.tar.gz
#再次清空temp首先配置GCC,在temp文件夾中執行以下命令,注意,此時temp和gcc-8.0.·在同級目錄下
../gcc-8.0.1/configure --prefix=/usr/local/gcc-8.0 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3
make
sudo make install
配置環境變量
sudo ln -s /usr/local/gcc-8.0.1/bin/gcc /usr/local/bin/gcc8
sudo ln -s /usr/local/gcc-8.0.1/bin/g++ /usr/local/bin/g++8
0x03 安裝要測試的Linux內核
解壓linux-master,並cd到該目錄下
unzip linux-master.zip
cd linux-master
生成配置文件,用我們剛安裝好的gcc進行編譯
make CC="usr/local/bin/gcc" defconfig
make CC="usr/local/bin/gcc" kvmconfig
完成後在當前的目錄下找到 .config 文件,如果沒有按 ctrl+H 顯示隱藏文件,在文檔的相應位置加入以下字段,保存
CONFIG_KCOV=y
CONFIG_DEBUG_INFO=y
CONFIG_KASAN=y
CONFIG_KASAN_INLINE=y
CONFIG_CONFIGFS_FS=y
CONFIG_SECURITYFS=y
保存配置
make CC="$GCC/bin/gcc" olddefconfig
最後編譯
make CC="$GCC/bin/gcc" -j64 -j後面的數字越大編譯越快 主要看機器的配置
編譯成功後,會有兩個文件 bzImage 以及 vmlinux 分別位於
linux-master/vmlinux linux-master/arch/x86/boot/bzImage
0x04 安裝Image鏡像
安裝 debootstrap
sudo apt-get install debootstrap
建立imge目錄,將create-image.sh拷貝到目錄下
mkdir image
給sh權限,並運行下載
chmod +x create-image.sh
./create-image.sh -s 1024
最後會得到 ./stretch.img 鏡像文件
0x05 安裝qemu虛擬機
直接使用命令安裝即可
sudo apt-get install qemu-system-x86
使用以下命令測試編譯好的內核以及生成的鏡像文件
qemu-system-x86_64 -m 1G -enable-kvm -drive file=<stretch.img路徑>,format=raw -kernel <linux-master路徑>/arch/x86/boot/bzImage -append root=/dev/sda
如果虛擬機正常啓動到命令行界面 則成功。
0x06 安裝go環境
解壓go安裝包 並編譯安裝,設置環境變量
tar -xf go1.14.2.linux-amd64.tar.gz
mv go goroot
mkdir gopath
export GOPATH=`pwd`/gopath
export GOROOT=`pwd`/goroot
export PATH=$GOPATH/bin:$PATH
export PATH=$GOROOT/bin:$PATH
0x07 安裝syzkaller
解壓syzkaller安裝包到 /gopath/src/github.com/,執行make安裝
cd gopath/src/github.com/google/syzkaller/
make
安裝成功後,會有/bin/syz-manger文件。
返回syzkaller文件目錄下,建立 my.cfg 文件
{
"target": "linux/amd64",
"http": "127.0.0.1:56741",
"workdir": "$GOPATH/src/github.com/google/syzkaller/workdir",
"kernel_obj": "linux-mater文件夾目錄",
"image": "image文件夾目錄/stretch.img",
"sshkey": "image文件夾目錄/stretch.id_rsa",
"syzkaller": "$GOPATH/src/github.com/google/syzkaller",
"procs": 8,
"type": "qemu",
"vm": {
"count": 4,
"kernel": "linux-master文件夾目錄/arch/x86/boot/bzImage",
"cpu": 2,
"mem": 2048
}
}
運行syzkaller
mkdir workdir
./bin/syz-manager -config=my.cfg