内核漏洞挖掘技术系列(8)——ioctlbf
字数 1863 2025-08-24 16:48:07
内核漏洞挖掘技术:ioctlbf工具详解
1. 工具概述
ioctlbf是一款专门用于挖掘Windows内核驱动漏洞的工具,主要针对第三方驱动程序。它通过以下两种方式发现漏洞:
- 扫描驱动程序支持的IOCTL:不依赖于捕获的IOCTL,能检测驱动程序支持但很少使用的IOCTL
- 基于生成的IOCTL fuzz:对发现的IOCTL进行模糊测试
工具优势:
- 能发现特定条件下调用的IOCTL
- 能发现用于调试的IOCTL
- 适用于第三方驱动漏洞挖掘(相比操作系统内核漏洞更容易发现)
2. 工具源码结构
inc/ # 头文件目录
getopt.c # GNU中的getopt实现
ihm.c # 打印输出功能
ioctl_bf.c # fuzzer主要功能实现
ioctl_manipulation.c # IOCTL列表维护函数
rng.c # 随机数生成
utilities.c # 辅助函数(仅包含substr函数)
核心文件:ioctl_bf.c
3. 使用流程
3.1 准备工作
-
定位目标驱动:
- 使用DriverView等工具查找目标驱动程序
- 示例:avira(小红伞)的驱动
avdevprot.sys
-
检查关联设备:
- 使用DeviceTree检查与目标驱动关联的设备
- 示例:
avdevprot.sys对应的设备avdevprot
-
分析IOCTL:
- 方法1:反编译驱动,在IDA中查找switch语句定位IOCTL
- 操作:File → Produce File → Create C file...
- 方法2:分析用户态程序调用
DeviceIoControl的地方
- 方法1:反编译驱动,在IDA中查找switch语句定位IOCTL
3.2 运行ioctlbf
基本命令格式:
ioctlbf.EXE -d <deviceName> ( -i <code> | -r <code1>-<code2> ) [options]
参数说明:
| 参数 | 描述 |
|---|---|
-d <deviceName> |
设备名(不含\\.\前缀) |
-i <code> |
fuzz指定IOCTL(范围:code到code & 0x00003fff) |
-r <code1>-<code2> |
fuzz指定范围内的IOCTL |
-u |
仅fuzz -i参数指定的单个IOCTL |
-f |
过滤掉对缓冲区长度无限制的IOCTL |
-q |
fuzz时不显示hexdumps |
-e |
扫描IOCTL时显示错误代码 |
-h |
显示帮助信息 |
4. 技术实现分析
4.1 主要流程
-
初始化:
- 解析命令行参数
- 调用
CreateFile打开指定驱动(失败则退出)
-
IOCTL扫描:
- 对每个IOCTL调用
DeviceIoControl - 遇到
ERROR_ACCESS_DENIED或ERROR_NOT_SUPPORTED则跳过 - 如果设置
-f参数:- 使用
MAX_BUFSIZE(4096字节)测试缓冲区限制 - 继续测试0/1/2/3字节缓冲区
- 无限制则跳过该IOCTL
- 使用
- 对每个IOCTL调用
-
确定缓冲区范围:
- 通过多次调用
DeviceIoControl确定:nInBufferSize和nOutBufferSize的最小/最大值
- 记录到IOCTLlist
- 通过多次调用
-
模糊测试阶段:
- 如果没有
-u参数,从IOCTLlist选择IOCTL进行fuzz - 分四步进行:
- 提供无效的内存地址作为缓冲区
- 提供比缓冲区小的size参数
- 使用预设的DWORD值进行fuzz:
- 无效地址
- 指向长ascii/unicode字符串的地址
- 指向无效地址表的地址
- 使用完全随机数据进行fuzz
- 如果没有
5. 改进版本:kDriver-Fuzzer
k0shl于2018年发布的改进版本,新增功能:
- 驱动枚举功能
- 增强的日志记录功能
- 项目地址:https://github.com/k0keoyo/kDriver-Fuzzer
6. 实际应用建议
-
目标选择:
- 优先选择第三方驱动(代码质量参差不齐,漏洞更容易发现)
- 安全软件驱动是常见目标(如示例中的avira驱动)
-
分析方法:
- 结合静态分析(IDA反编译)和动态fuzz
- 通过用户态程序分析驱动使用方式
-
测试策略:
- 先广泛扫描(-r)再针对性测试(-i)
- 使用-f参数提高效率
- 关注返回错误码,分析驱动行为
-
结果验证:
- 监控系统稳定性变化
- 使用调试工具观察异常情况
7. 工具限制
- 仅适用于Windows平台
- 主要针对通过DeviceIoControl暴露的接口
- 需要管理员权限运行
- 可能造成系统不稳定,建议在虚拟机环境中使用
8. 扩展学习
本系列其他相关文章:
- Trinity:内核fuzz框架
- Bochspwn/Reloaded:基于虚拟化的内核漏洞检测
- Syzkaller:Linux内核fuzz工具
- AFL用于内核fuzz
- 静态模式匹配技术
通过结合多种工具和技术,可以构建更全面的内核漏洞挖掘能力。