1. 引言

上一篇文章介绍了 SnowSword 的隐藏驱动检测思路:同时观察模块列表、对象目录和内存中的 PE 特征,避免只依赖单一数据源。
这次准备了一个测试驱动 TestHideDriver1.sys,尝试验证 SnowSword 能否在测试过程中标记出异常驱动。目前同时保留了 SnowSword 检测结果和 OpenArk 的枚举对比截图,本文只记录截图中能够确认的现象。

2. 检测思路

SnowSword 的驱动检测可以简单理解为三个视角:

视角 观察内容
模块列表 驱动名称、映像基址、映像大小和路径
对象目录 \\Driver、\\FileSystem 中的驱动对象
内存特征 内存中是否存在带有 PE 特征的可执行映像

正常情况下,这些信息应该能够相互对应。如果某个驱动只在一个视角中出现,或者它的基址、大小和路径与其他信息对不上,就应该进入人工复核流程。
本次实验的重点是观察 SnowSword 对测试驱动的标记结果,而不是证明 SnowSword 的全能性。

3. 实验过程

实验过程中使用自写 DriverLoader 加载测试驱动,并通过 DebugView 观察驱动输出。测试驱动加载后,在 SnowSword 的“内核模块”页面查看当前模块列表。

从截图可以看到,列表中出现了:

  • 驱动名称:TestHideDriver1.sys;
  • 映像基址:0xFFFFF80267140000;
  • 映像大小:0x1000;
  • 路径位于用户桌面测试目录;
  • 该行以红色显示,与周围普通模块的显示效果不同。

4. SnowSword 检测结果

SnowSword 检测到测试驱动

图中同时保留了测试过程中的几个窗口:

  1. SnowSword:右侧显示内核模块列表,TestHideDriver1.sys 被红色标记;
  2. DriverLoader:中间窗口用于加载测试驱动;
  3. DebugView:左侧可以看到测试驱动输出的 Driver is alive! 等调试信息。

从现象上看,测试驱动已经成功加载并运行,SnowSword 也将它与普通内核模块区分显示。这说明当前检测模块至少能够获取到该测试驱动的模块信息,并根据自身规则给出异常标记。

5. 与 OpenArk 的枚举结果对比

SnowSword 与 OpenArk 驱动枚举结果对比

工具 截图中的结果
SnowSword 可以看到 TestHideDriver1.sys,并以红色标记;同时显示其基址、大小和桌面测试路径
OpenArk 当前驱动列表中未看到 TestHideDriver1.sys,只能看到 SnowSword.sys 和 OpenArkDrv64.sys 等模块

6. 结果分析

  • TestHideDriver1.sys 已经进入 SnowSword 的内核模块检测结果;
  • SnowSword 能显示它的基址、大小和路径;
  • SnowSword 对该测试驱动进行了红色高亮,说明它满足当前隐藏驱动的标记条件;
  • OpenArk 的当前驱动列表中未显示该测试驱动,形成了与 SnowSword 的枚举差异;
  • DriverLoader 和 DebugView 的窗口可以作为驱动加载和运行状态的辅助证据。

7. 为什么不能只看一个列表

驱动检测和进程隐藏检测一样,不能把单一枚举结果当成绝对事实。
如果只看模块列表,攻击者可以尝试摘除模块链表记录;如果只看对象目录,也可能遇到未注册对象或结构变化;如果只扫 PE 特征,又可能把残留映像、缓存或版本差异误判为异常。

更可靠的判断方式是把多个结果关联起来:

1
2
3
4
5
6
驱动名称 / 基址 / 大小
|
+-- 是否存在于模块列表
+-- 是否能关联到 DRIVER_OBJECT
+-- 是否位于合法映像范围
+-- 是否有对应的运行时行为

8. 当前局限

本次实验仍然比较初步,主要局限包括:

  1. 目前只有两张截图,没有干净系统和多次重复测试数据;
  2. 尚未记录完整的扫描范围、耗时、CPU 占用和 IOCTL 次数;
  3. 尚未对 \\Driver、\\FileSystem 和内存 PE 扫描结果进行逐项对照;
  4. 尚未验证非分页池、清除 PE 头以及跨 Windows 版本等场景;
  5. 红色高亮的具体触发规则还需要结合 SnowSword 源码进一步说明。

9. 后续计划

后续补充实验时,准备保留以下信息:

  • 测试前后的模块列表对比;
  • 测试驱动是否仍能在对象目录中找到;
  • 内存扫描命中的地址和模块归属结果;
  • SnowSword 的原始调试日志;
  • 不同 Windows 版本下的重复测试结果。

这样可以把“截图中看到驱动被标红”进一步扩展为完整的证据链,减少单一结果带来的误判。

总结

本次实验中,TestHideDriver1.sys 成功加载并运行,SnowSword 在内核模块列表中对它进行了红色标记,而 OpenArk 的当前驱动列表中没有显示该项。这个结果说明 SnowSword 与 OpenArk 对该测试状态的枚举结果存在差异,也说明多视角交叉检测能够发现单一工具不一定展示的对象,但这只是一次功能验证,而不是完整的隐藏驱动检测实验。

对于 ARK 工具来说,发现异常只是第一步。只有把模块列表、对象目录、内存特征和运行时行为结合起来,并经过独立工具复核,才能逐步提高检测结果的可信度。

参考

  • Windows Internals, 7th Edition
  • Microsoft Learn:IMAGE_NT_HEADERS、MmCopyMemory
  • 本系列前篇:日报_隐藏驱动检测_改进版、日报_内存暴力搜索DRIVER_OBJECT_改进版
  • SnowSword 项目地址:https://gitee.com/le-ziyi/SnowSword

相关项目与联系

项目SnowSword —— Windows 10/11 x64 内核分析与 Anti-Rootkit 工具,源码与发布包在 Gitee。

技术合作Windows 内核 / 驱动开发 / 逆向分析 / 兼容性开发,范围与边界见 技术合作。

联系2160752730@qq.com · QQ 2160752730 · 微信 lst_3258110