HEALER: Relation Learning Guided Kernel Fuzzing代码复现

目录

         前言

Build Healer

Fuzz Linux 内核


源码:GitHub - SunHao-0/healer: Kernel fuzzer inspired by Syzkaller.

论文:https://haosun.info/assets/pdf/healer_sosp21.pdf

前言

原文作者写的略微有点不够详细,本文对其进行补充。

Healer 是一个受 Syzkaller 启发的内核模糊器。

与 Syzkaller 类似,Healer 使用 Syzlang 描述提供的系统调用信息来生成系统调用序列,以确认参数结构约束和部分语义约束,并通过持续执行生成的调用序列来发现内核错误,从而导致内核崩溃。

与 Syzkaller 不同,Healer 不使用经验选择表,而是通过动态删除最小化呼叫序列中的调用并观察覆盖率变化来检测系统调用之间的关系,并使用影响关系来指导调用序列的生成和突变。此外,Healer 还使用了与 Syzkaller 不同的架构设计。

Build Healer

Healer 是用纯 rust 编写的,除了一些补丁代码。因此,应首先安装 rust 工具链。(魔法上网)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

rustc --version # check install

为了使用 Syzlang 描述,Healer 的构建脚本会自动下载 Syzkaller 并在源代码中添加补丁并构建 Syzkaller,这可能会增加构建时间。

因此,需要安装 Syzkaller 需要的构建工具,例如,开启 GO111MODULE 的 golang 编译器,GCC 6.1.0 或更高版本。您还可以通过设置相关的环境变量来跳过自动构建过程。但是,在这种情况下,您需要手动提供 json 格式的 syscall 描述。

安装完所有必需的工具后,进入healer文件夹,并使用以下命令构建 Healer:

cargo build --release

最后,可以在目录中找到 Healer 本身和修补的 Syzkaller 二进制文件。syz-bin  target/release

Fuzz Linux 内核

总的来说,使用 Healer 对 Linux 内核进行模糊测试需要三个步骤:(1) 准备磁盘映像,(2) 编译内核,以及 (3) 启动 Healer。

Healer 使用 qemu来引导内核,因此需要准备磁盘映像和内核映像。启动的 qemu 需要能够通过 ssh 键登录,并且内核至少需要具有该功能。

如果没有qemu、bzImage、bullseye.img、bullseye.id_rsa,请先参考这篇教程完成准备工作:

Syzkaller部署-CSDN博客

接下来,创建一个工作目录WorkForHealer。

在 WorkForHealer中创建一个目录workdir。

将healer中修补的 Syzkaller 二进制文件(syz-bin)复制到workdir并改名为bin。

将你的bzImage  bullseye.id_rsa  bullseye.img全部复制到workdir

然后将整个healer文件夹复制到workdir/bin/下。

最终的工作目录需要包含以下文件。

bin   bzImage   bullseye.img   bullseye.id_rsa     

cd path/to/workdir && ls

bin  bzImage  bullseye.id_rsa  bullseye.img

ls ./bin

healer linux_amd64  syz-repro  syz-symbolize  syz-sysgen

最后,执行以下命令开始模糊测试,其中指定磁盘映像的路径,指定内核映像的路径,指定 ssh 键的路径。-d  -k  --ssh-key

进入到healer所在的文件夹

cd /path/WorkForHealer/workdir/bin/healer/target/release/

赋予可执行文件所有权限:

chmod +x healer

允许用户访问KVM:

sudo usermod -aG kvm $USER

启动healer(直接指定healer的位置,应该也可以通过将healer添加入bashrc来简化代码):

sudo /home/jivic/WorkForHealer/workdir/bin/healer/target/release/healer -d bullseye.img --ssh-key bullseye.id_rsa -k bzImage

还可以指定并行模糊测试实例(线程)via 、内核对象文件 () 和 srouce 代码的路径 via 和 以便 Healer 可以符号化内核崩溃日志。通过 查看更多选项。 如果一切正常,将看到以下日志:-jvmlinux-b-rhealer --help

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值