linux下fuzz初试
字数 1050 2025-08-20 18:18:04

Linux下Fuzz测试工具AFL和Syzkaller使用指南

一、AFL (American Fuzzy Lop) 使用教程

1. AFL简介

AFL是一种通过提供随机生成的输入来测试软件,搜索能导致程序崩溃的输入的fuzz测试工具。特点包括:

  • 通过对源码进行重新编译时进行插桩的方式自动产生测试用例
  • 较低的性能消耗
  • 高效的fuzzing策略和最小化技巧
  • 支持对有源码和无源码程序的测试(无源码需要QEMU支持)

2. AFL安装步骤

  1. 从官网下载源码压缩包并解压
  2. 编译安装:
    make
    sudo make install
    
  3. 配置coredumps输出:
    echo core > /proc/sys/kernel/core_pattern
    

3. AFL测试示例

3.1 编译测试程序

对于有源码的程序,使用afl代替gcc/clang编译:

C程序:

CC=/path/to/afl/afl-gcc ./configure
make clean all

C++程序:

CXX=/path/to/afl/afl-g++ ./configure
make clean all

3.2 示例测试程序

#include <stdio.h>
#include <signal.h>

int func(char *data) {
    if(data[0] == 'A')
        raise(SIGSEGV);
    else
        printf("ok\n");
    return 0;
}

int main(int argc, char *argv[]) {
    char buf[233] = {0};
    FILE *input = NULL;
    input = fopen(argv[1], "r");
    if(input != 0) {
        fscanf(input, "%s", &buf);
        printf("buf is %s\n", buf);
        func(buf);
        fclose(input);
    } else
        printf("error!");
    return 0;
}

3.3 编译和运行

  1. 使用afl-gcc编译:
    ./afl-gcc test.c -o test
    
  2. 运行fuzz测试:
    ./afl-fuzz -i testcase -o Testout ./test @@
    
    • testcase:输入目录
    • Testout:输出目录
    • @@:表示从文件中读取输入

二、Syzkaller内核模糊测试教程

1. Syzkaller简介

Syzkaller是一款无监督的覆盖引导内核模糊器,支持多种操作系统内核测试。

2. 准备工作

2.1 编译内核

需要开启以下内核选项:

CONFIG_KCOV=y
CONFIG_DEBUG_INFO=y
CONFIG_KASAN=y
CONFIG_KASAN_INLINE=y

2.2 安装Go语言环境

  1. 下载并安装Go:
    wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
    tar -xf go1.8.1.linux-amd64.tar.gz
    mv go goroot
    
  2. 设置环境变量:
    export GOROOT=`pwd`/goroot
    export PATH=$GOROOT/bin:$PATH
    mkdir gopath
    export GOPATH=`pwd`/gopath
    

2.3 安装Syzkaller

go get -u -d github.com/google/syzkaller/...
cd gopath/src/github.com/google/syzkaller/
mkdir workdir
make

3. 创建Debian-wheezy镜像

  1. 安装debootstrap:
    sudo apt-get install debootstrap
    
  2. 使用脚本创建镜像:
    cd gopath/src/github.com/google/syzkaller/tools/
    ./create-image.sh
    
    完成后会生成:
    • wheezy.id_rsa(私钥)
    • wheezy.id_rsa.pub(公钥)
    • wheezy.img(镜像文件)

4. 启动QEMU虚拟机

设置环境变量:

export KERNEL=/home/edvison/linux-kernel
export IMG=/home/edvison/gopath/src/github.com/google/syzkaller/tools

启动脚本:

qemu-system-x86_64 \
    -kernel $KERNEL/arch/x86_64/boot/bzImage \
    -append "console=ttyS0 root=/dev/sda debug earlyprintk=serial slub_debug=QUZ"\
    -hda $IMG/wheezy.img \
    -net user,hostfwd=tcp::10021-:22 -net nic \
    --nographic \
    -enable-kvm \
    -m 2G \
    -smp 2 \
    -pidfile vm.pid \
    2>&1 | tee vm.log

停止QEMU实例:

sudo kill $(cat vm.pid)

5. 配置SSH无密码登录

  1. 生成SSH密钥:
    ssh-keygen -t rsa
    
  2. 将公钥复制到虚拟机
  3. 修改虚拟机SSH配置(/etc/ssh/sshd_config):
    PermitRootLogin without-password
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile /root/.ssh/id_rsa.pub
    RhostsRSAAuthentication yes
    PermitEmptyPasswords no
    PasswordAuthentication no
    UsePAM no
    
  4. 重启SSH服务:
    /etc/init.d/ssh restart
    

6. 传输Syzkaller二进制文件

如果遇到密钥格式问题,使用dropbearconvert转换:

sudo apt install dropbear
dropbearconvert openssh dropbear id_rsa id_rsa_dropbear
scp -P 10021 -i id_rsa_dropbear -r $(GOPATH)/bin root@127.0.0.1

7. 启动Syzkaller

  1. 创建配置文件my.cfg
  2. 运行:
    ./bin/syz-manager -config=my.cfg
    
  3. 在浏览器访问127.0.0.1:10233查看调试信息

三、关键点总结

  1. AFL适用于用户态程序测试,Syzkaller适用于内核测试
  2. AFL需要配置coredump输出方式
  3. Syzkaller需要特定的内核编译选项
  4. 虚拟机SSH配置和无密码登录是关键步骤
  5. 两种工具都需要准备测试环境和样本

通过以上步骤,可以成功搭建并使用AFL和Syzkaller进行模糊测试。

Linux下Fuzz测试工具AFL和Syzkaller使用指南 一、AFL (American Fuzzy Lop) 使用教程 1. AFL简介 AFL是一种通过提供随机生成的输入来测试软件,搜索能导致程序崩溃的输入的fuzz测试工具。特点包括: 通过对源码进行重新编译时进行插桩的方式自动产生测试用例 较低的性能消耗 高效的fuzzing策略和最小化技巧 支持对有源码和无源码程序的测试(无源码需要QEMU支持) 2. AFL安装步骤 从官网下载源码压缩包并解压 编译安装: 配置coredumps输出: 3. AFL测试示例 3.1 编译测试程序 对于有源码的程序,使用afl代替gcc/clang编译: C程序: C++程序: 3.2 示例测试程序 3.3 编译和运行 使用afl-gcc编译: 运行fuzz测试: testcase :输入目录 Testout :输出目录 @@ :表示从文件中读取输入 二、Syzkaller内核模糊测试教程 1. Syzkaller简介 Syzkaller是一款无监督的覆盖引导内核模糊器,支持多种操作系统内核测试。 2. 准备工作 2.1 编译内核 需要开启以下内核选项: 2.2 安装Go语言环境 下载并安装Go: 设置环境变量: 2.3 安装Syzkaller 3. 创建Debian-wheezy镜像 安装debootstrap: 使用脚本创建镜像: 完成后会生成: wheezy.id_ rsa(私钥) wheezy.id_ rsa.pub(公钥) wheezy.img(镜像文件) 4. 启动QEMU虚拟机 设置环境变量: 启动脚本: 停止QEMU实例: 5. 配置SSH无密码登录 生成SSH密钥: 将公钥复制到虚拟机 修改虚拟机SSH配置(/etc/ssh/sshd_ config): 重启SSH服务: 6. 传输Syzkaller二进制文件 如果遇到密钥格式问题,使用dropbearconvert转换: 7. 启动Syzkaller 创建配置文件my.cfg 运行: 在浏览器访问 127.0.0.1:10233 查看调试信息 三、关键点总结 AFL适用于用户态程序测试,Syzkaller适用于内核测试 AFL需要配置coredump输出方式 Syzkaller需要特定的内核编译选项 虚拟机SSH配置和无密码登录是关键步骤 两种工具都需要准备测试环境和样本 通过以上步骤,可以成功搭建并使用AFL和Syzkaller进行模糊测试。