wtf (https://github.com/0vercl0k/wtf</https://github.com/0vercl0k/wtf>) 是基于具一种分布式 、代码覆盖引导
、快照可定制
、的基基于快照的础使跨平台模糊器,设计用于 fuzz 在 Microsoft Windows 平台上运行的基于具用户模式或内核模式的目标。 在日常的快照 fuzz 的工作中,通常我们都需要先大致分析目标软件,的基然后对其输入点构造 harness,础使才可以使用工具对 harness 进行 fuzz ,亿华云基于具从而发现目标软件的快照潜在漏洞 。构造 harness 不是的基一件容易的事情,这取决于安全研究人员分析解构目标软件的础使程度,除此之外,基于具在部分软件中,快照只有进行完整的的基 、复杂的初始化操作和预设,才能保证 harness 调用的源码库输入点函数能够正常运行。 针对这一问题,基于快照的 fuzz 工具 wtf 吸引了我的注意;我们可以对正常运行的目标软件打下内存快照,然后对该内存快照进行 fuzz ,这种方式可以不必编写 harness,并在一定程度上减少分析目标软件的成本
。 本文从基于快照这一个特性出发 ,介绍 wtf 工具的基础使用和注意事项。 本文实验环境: 在 github 上可以访问 wtf 的源码和 README(https://github.com/0vercl0k/wtf): 作者提供了 4 篇使用 wtf 进行 fuzz 的实操文章: 其中第一篇针对 IDA 的高防服务器 fuzz,也是作者开发 wtf 的初衷,其中讲诉了 wtf 的开发历程并介绍了 wtf 的实现原理
。 通过以上文章
,了解到使用 wtf 进行 fuzz 可以大致分为 3 个步骤: 为了方便下文叙述
,这里先介绍如何源码编译 wtf 。wtf 使用 ninja 进行构建 ,首先我们下载 ninja(https://ninja-build.org/</https://ninja-build.org/>) 并添加到环境变量PATH中,随后从 github 下载 wtf 源码
,香港云服务器打开 Visual Studio 的 x64 位开发者命令行工具(vs2019:x64 Native Tools Command Prompt for VS 2019): 执行如下: 编译成功后,会在build目录下生成wtf.exe文件
,该二进制文件将支撑我们全部的 fuzz 流程。 wtf 提供了完整的测试用例 hevd / tlv_server,能够帮助我们快速上手 wtf
,这里我们以 hevd 为例进行介绍;hevd(HackSys Extreme Vulnerable Windows Driver)是 Windows 内核驱动漏洞靶场(https://github.com/hacksysteam/HackSysExtremeVulnerableDriver</https://github.com/hacksysteam/HackSysExtremeVulnerableDriver>)
,以帮助安全研究员学习漏洞原理。 首先第一步是创建 hevd 运行时的系统内存快照
,作者已经提供好了 https://github.com/0vercl0k/wtf/releases/download/v0.4/target-hevd.7z</https://github.com/0vercl0k/wtf/releases/download/v0.4/target-hevd.7z>,模板下载下载解压后如下
: 第二步是编写 hevd 的 wtf fuzz 模块/插件,其插件代码属于 wtf 源码的一部分,在其中需要定义如何对快照进行初始化,如何向快照注入测试用例等操作 ,同样作者也提供了 https://github.com/0vercl0k/wtf/blob/main/src/wtf/fuzzer_hevd.cc</https://github.com/0vercl0k/wtf/blob/main/src/wtf/fuzzer_hevd.cc>前言
1. wtf概要
image
image2. fuzz hevd
image