- RootkitRevealer 检测 Windows API 和原始数据之间的差异以发现隐藏的问题。
- 解释结果:NTFS 元数据、注册表和文件系统差异类型。
- 使用 PsExec 的 -a -c -m -r 和远程执行选项;当系统空闲时,它需要最少的误报。
- 预防和响应:安全启动/TPM、离线扫描、反 rootkit 工具和受控恢复。

RootkitRevealer 是每个 Windows 专业人士都应该了解的传奇实用程序之一;它由 Sysinternals 团队创建,由 Mark Russinovich 领导,虽然它出现于几年前,但它仍然是了解如何检测系统显示的内容与磁盘上实际内容之间由 rootkit 引起的差异的参考。
与其他扫描器不同,它不查找特征码或模式:它将 Windows API 的高级视图与磁盘和注册表的原始底层读取结果进行比较。这种看似简单的原理可以揭示恶意软件何时试图通过操纵系统调用来隐藏文件、键或值。
什么是 RootkitRevealer?它适用于哪些系统?
这是一个用于检测用户模式和内核模式下rootkit迹象的高级工具。它最初是为Windows XP和Windows Server 2003(32位)开发的,通常被列为免费、英文版,大小约为231 KiB;当时许多列表还表明它与Windows NT/2000/XP/Vista兼容。
随着时间的推移,它的纯命令行版本被淘汰了,因为一些恶意软件作者开始监视可执行文件的名称;为了避免这种情况,该程序以服务的形式从其自身随机命名的副本启动,这使得通过名称进行检测更加困难,也使得提供100% 的控制台界面变得更加复杂。
什么是rootkit?关键概念
rootkit一词指的是恶意软件(病毒、木马、间谍软件等)能够躲避用户和安全工具检测的技术和机制。rootkit可分为几个类型:持久型(重启后仍然存在)、内存驻留型(重启后消失)、用户模式型和内核模式型,以及其他一些现代变体。
用户模式 rootkit 可以拦截 FindFirstFile/FindNextFile 等函数或系统自带的枚举器,从而过滤掉可能暴露其修改过的文件、进程或注册表项的条目。这使得资源管理器、命令提示符或注册表编辑器无法看到实际存在的内容。
内核模式 rootkit 的功能更进一步:除了拦截原生 API 之外,它们还可以直接操纵内核结构,例如从活动进程列表中删除自己的进程,使其不会出现在任务管理器或进程资源管理器中,即使它正在运行。
引导加载程序有多种类型,包括混合型(部分基于用户,部分基于内核)、固件(BIOS/UEFI 和其他组件)、引导或引导套件(MBR/UEFI)、虚拟(将实际操作系统置于虚拟机中)以及基于内存的(非持久性)引导加载程序。后者尤其难以清除,而固件和引导加载程序即使在全新重装操作系统后仍然保留。
RootkitRevealer 的工作原理
RKR对比了两种快照:Windows API的高级视图和对卷和注册表子树文件(注册表单元)的原始、底层读取。如果rootkit篡改了高级调用以隐藏某些内容,这种篡改就会暴露出来,因为磁盘上和注册表中的内容与API所声明的内容不符,从而产生可诊断的差异。
理论上,rootkit 还可以通过拦截 RootkitRevealer 的原始读取操作并动态重写数据来躲避其检测。要做到这一点,它需要精通 NTFS、FAT 和注册表格式,并且能够在不造成数据不一致或明显副作用的情况下修改数据结构——这是一项极其复杂的技术壮举,鲜有实际案例。即便如此,也并不存在万无一失的“通用检测器”:即使从外部环境启动(例如,使用最佳的 Linux 发行版),也可能被特别复杂且持久的恶意程序所破坏。实际上,最可靠的方法是将在线分析与在可信环境中进行的离线验证相结合。
要求、良好实践和执行
要运行此扫描,帐户需要“备份文件和目录”、“加载驱动程序”和“卷维护”权限(这些权限在 Windows XP 及更高版本中默认授予管理员)。为尽量减少误报,建议在系统处于静止状态且未打开任何应用程序的情况下运行扫描。
手动执行扫描时,只需按下扫描按钮。扫描过程中,程序会提供进度更新并列出任何差异。有两个相关选项:“隐藏 NTFS 元数据文件”(默认启用,以避免显示 NTFS 隐藏的标准元数据)和“扫描日志”(默认启用;取消选中将跳过扫描Windows 注册表)。
对于自动化,它支持允许您无需干预即可启动、登录和退出的参数: rootkitrevealer outputfile]。 选项 -a 自动开始和结束; -c 以 CSV 格式输出结果; -m 显示 NTFS 元数据;以及 -r 禁用注册表扫描。输出文件必须位于 可访问的本地卷.
使用 PsExec 可以实现远程执行。例如: psexec \\remote -c rootkitrevealer.exe -a c:\windows\system32\rootkit.log。 同 -c,不显示进度,差异以 CSV 格式打印,从而更容易导入 在数据库或脚本中.
结果解释和典型差异
“隐藏于 Windows API 之外”的错误是 rootkit 隐藏条目时最常见的问题。如果您尚未启用 NTFS 元数据显示,则会看到这些差异,因为 NTFS 会将其内部文件(例如$MFT 或 $Secure )对 API 隐藏。某些防病毒程序也会将数据存储在其他数据流中并将其隐藏,从而导致类似的错误。
以下是 NTFS(Windows Server 2003)中定义的一些标准元数据:$AttrDef、$BadClus、$BadClus:$Bad、$BitMap、$Boot、$LogFile、$Mft、$MftMirr、$Secure、$UpCase、$Volume、$Extend、$Extend\$Reparse、$Extend\$ObjId、$Extend\$UsnJrnl、$Extend\$UsnJrnl:$Max、$Extend\$Quota。
RKR关联文件系统中的三个来源:Windows API、主文件表(MFT)和磁盘上的目录索引。可能会出现诸如“在API中可见但在索引或MFT中不可见”、“在MFT中可见但在API中不可见”等组合,尤其是在分析过程中创建或删除文件时,会产生暂时的不一致窗口。
扫描过程中创建的示例: C:\newfile.txt,大小为 8 字节,并显示“在 API 中可见,但在索引或 MFT 中不可见”。这些情况并不一定指向 rootkit,而是指向 并发更改 在接受检查时。
如果出现“访问被拒绝”提示,则说明出了问题:RootkitRevealer 使用机制来访问任何文件、目录或密钥,因此在正常运行条件下不应该出现此消息。
注册表中存在一些值得关注的差异:“Windows API 长度与原始数据不一致”(可能是试图隐藏实际内容)、“类型不匹配”(例如,声明为 REG_SZ,但实际应为 REG_BINARY)、“键名包含嵌入的 NULL 值”(一种利用以 NULL 结尾的字符串和包含计数的字符串之间差异的已知技术)。对于最后一种情况,Sysinternals 的 RegDelNull工具可以帮助清理包含嵌入 NULL 值的键。
如果扫描过程中值发生变化,则可能会发生“数据不匹配”的情况(例如,SQL Server 正常运行时间 HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\RECOVERYMANAGER\MSSQLServer\uptime_time_utc)。您必须验证该值属于 合法组件 实时更新数据。
HackerDefender rootkit 就是一个典型的例子:它的服务和驱动程序对 Windows API 来说是不可见的,但在对注册表单元的原始读取中却存在;它的文件也是如此,直接分析文件系统确实可以在磁盘上检测到它们。
取证环境中 rootkitrevealer.exe 的常见错误和问题
一些取证工具包(例如 WinTaylor)会列出与rootkitrevealer.exe相关的典型错误,例如:“不是有效的 Win32 应用程序”、“未找到”、“应用程序错误”或“启动问题”。这些消息通常发生在系统安装、启动或关闭期间,或由于与其他驻留应用程序冲突而导致。
最常见的原因包括文件损坏或丢失、注册表项无效、恶意软件感染、卸载不完整或与其他软件冲突。原因可能是注册表项损坏、被其他工具意外删除、下载失败或之前的感染篡改了二进制文件。
出于库存方面的考虑,一些清单记录了可执行文件的大小约为 334.720 字节,并且 哈希值,例如 SHA-1 和 MD5 (例如 SHA-1 d39e8a3fe92adc7d7fbc5293edf8a7b965484a59,MD5 ee738fe9bcdd605821002cec8c7206db) 和 CRC32 98b1af0b;他们还提到 容器应用中的 2.1 版本 和“取证工具包/操作系统”类别。
Rootkit 检测和响应方法
检测rootkit并非易事。除了特定的工具外,还需要结合多种技术来识别可疑模块,例如对已知威胁进行特征分析、冷比较结构、搜索内存中的钩子和篡改,以及审查崩溃后的内存转储文件。此外,通常还会依赖入侵防御系统(IPS)来保护网络并减少感染途径。
专用工具包括 GMER(用于检测隐藏进程和内核篡改)、Kaspersky TDSSKiller(尤其用于检测引导程序和内核 rootkit)、Malwarebytes Anti-Rootkit、Microsoft Defender Offline(用于在 Windows 启动前进行扫描)以及 RogueKiller。从可信的启动U 盘或在安全模式下运行这些工具可以减少攻击面。
对于启动或固件威胁,建议使用救援媒体,如卡巴斯基救援磁盘,恢复 MBR bootrec /fixmbr 在适当的情况下,在严重的情况下,将 BIOS/UEFI 更新/刷新到制造商提供的干净版本,以消除 低级持久性.
使用 Sysinternals 进行监控非常宝贵:进程监视器 (ProcMon) 用于监控进程和文件活动,Autoruns 用于检查启动时加载的程序,RootkitRevealer用于检测高低级别的差异。Wazuh等 SIEM 平台以及企业环境中的遥测技术可以发现意外的网络行为或完整性变更。
如果确认感染,合理的步骤是:断开机器与网络的连接,从外部环境进行扫描,评估启动/固件完整性,如果无法保证,则备份数据,彻底清除磁盘(使用 DBAN 等工具),然后从已验证的介质重新安装,最后启用安全启动和 TPM等措施。
预防:合理防范rootkit
预防是关键。保持系统更新,为第三方软件打补丁,避免使用来自可疑来源的可执行文件,不要使用破解程序或注册机:它们是打包rootkit投放器和加载器的常用途径。
禁用 USB 自动运行功能,打开外部驱动器前先进行扫描;在企业环境中,根据需要限制或阻止端口并启用防火墙。使用非特权用户帐户,遵循最小权限原则,并对关键更改要求管理员凭据,从而降低静默升级的可能性。
在兼容的硬件上,从 UEFI 启用安全启动和 TPM,以保护启动链和密钥密封。定期进行离线或不可更改的备份,并使用快照/还原点来缩短出现问题时的恢复时间。
Rootkit 的安装方式:植入程序、加载程序和载体
攻击者通常以组合威胁的形式传播rootkit:一个“投放器”负责投放软件包,一个“加载器”则利用漏洞(例如缓冲区溢出)将植入程序植入到不应植入的位置。这些攻击通常伪装成钓鱼邮件、虚假安装程序或欺诈性更新。
经典的传播途径包括劫持即时通讯客户端来传播恶意链接、在下载门户网站上植入木马程序、利用其他恶意软件作为载体,以及将恶意链接嵌入富文本文件(例如某些 PDF 文件)中,当这些文件打开时,会自动触发投放器。
攻击迹象和检测线索
rootkit 的目标是不被检测到。即便如此,您仍可能会观察到未经用户干预的配置更改、由于隐藏流量导致的异常网络中断、未知进程、无法关闭的服务以及无故禁用的安全工具。
另一个线索是,使用不同路径(API 与原始读取)列出文件、进程或注册表项的实用程序之间存在信息冲突。RootkitRevealer 等方法正是在此发挥作用:同一个对象在磁盘上“存在”但在 API 中“不存在”,这表明它可能已被篡改。
Rootkit 的主要类型
用户模式:这类模式在进程和库级别运行。它们更稳定,也相对更容易被检测到,但它们可能会隐藏文件、进程和密钥。HackerDefender 就是一个经典的例子。
内核模式:这类病毒潜伏在内核中,拥有完全控制权且极难清除;如果设计不当,它们往往会导致系统不稳定。此类病毒的例子包括:TDL/Alureon 的演变过程。
混合型:结合用户组件和内核组件,以平衡隐蔽性和稳定性,由于其实用的多功能性而受到攻击者的欢迎。
固件/启动包:这类程序会感染 BIOS/UEFI 或引导扇区(MBR/UEFI),使其在操作系统启动前加载。安全启动等技术已使许多传统的启动包过时,但现代的UEFI 植入程序已经出现。
虚拟的和基于内存的: VMBR 在操作系统下加载虚拟机管理程序并将其虚拟化;基于内存的 VMBR 仅驻留在 RAM 中,并在重新启动时消失,对于短暂的操作非常有用。
示例和突出显示的时间顺序
第一个用于 SunOS 的 rootkit 开发于 20 世纪 90 年代;1999 年,Greg Hoglund 描述了 NTRootkit(Windows,内核模式),2003 年HackerDefender(Windows 2000/XP,用户模式)出现,这引发了与 RootkitRevealer 等工具的“拉锯战”。
2004 年,所谓的“希腊水门事件”利用 rootkit 入侵了 GSM 网络上的 100 多部手机;2005 年,人们发现索尼 BMG在一些 CD 中加入了反盗版 rootkit,引发了一场巨大的安全争议。
自 2008 年以来,TDL(TDL-1 至 TDL-4)等引导工具包不断发展;2009 年,“马基雅维利”证明 macOS(当时的 Mac OS X)也未能幸免;2010 年,Stuxnet利用 rootkit 组件破坏了伊朗的工业系统。
2012 年,出现了大型模块化恶意软件Flame ;2018 年, LoJax成为第一个在野外检测到的 UEFI rootkit;2019 年,Scranos通过大规模入侵浏览器,将凭证窃取和隐藏的收入生成与点击农场结合起来。
资源和推荐阅读
Mark Russinovich 对索尼案例的调查以及他在 Windows IT Pro 上发表的文章“揭开 Rootkit 的面纱”有助于理解 Rootkit 的现象和背后的技术;Greg Hoglund 和 Jamie Butler 合著的《Rootkit:颠覆 Windows 内核》一书是对该主题最深入的论述。
Phrack Archive、Peter Szor 的《计算机病毒研究与防御的艺术》、Ed Skoudis 和 Lenny Zeltser 的《恶意软件:对抗恶意代码》以及《Windows 内核》系列(第 4 版及以后)是任何想要深入了解架构和严肃的应对措施的人的必备资料。
Sysinternals 生态系统中的 RootkitRevealer
RKR 与其他在研究中有用的 Sysinternals 实用程序共存:AccessChk 和 AccessEnum(有效权限)、Autoruns(所有以系统启动的程序)、Process Explorer(谁打开了什么以及使用了哪个 DLL)、PsExec/PsTools(远程执行和管理)、PsLogList 和 PsLoggedOn(事件和会话)、Sigcheck(数字签名)、SDelete(安全删除)、ShareEnum(共享资源)和Sysmon(事件日志中的高级遥测)。
在历史代码库中经常可以看到“下载 1.71”的提示,以及通过 Sysinternals Live 提供的“立即运行”选项。尽管该项目历史悠久,但其理念——比较高层方法和底层方法——对于 rootkit 检测仍然至关重要。
RootkitRevealer 首先是一堂防御工程课:如果某些东西在操纵 API 返回的内容,你必须深入查看并将其与磁盘和注册表中实际存在的内容进行比较;通过良好的实践、适当的工具以及必要时的离线验证,可以发现那些试图隐藏在我们认为没有人会查看的地方的东西。