RootkitRevealer v 1.71

作者: Mark Russinovich

发布日期:2006年11月1日

下载下载 ROOTKITREVEALER (231 KB)
立即Sysinternals 实时运行。

简介

RootkitRevealer 是一种高级 rootkit 检测实用程序。 它在 Windows XP (32 位) 和 Windows Server 2003 (32 位) 上运行,并且其输出列出了注册表和文件系统 API 的差异,这可能表明用户模式或内核模式 rootkit 存在。 RootkitRevealer 已成功检测到许多永久性 rootkit,包括 AFX、Vanquish 和 HackerDefender (注意: RootkitRevealer 并不用于检测 rootkit,如 Fu 不尝试隐藏其文件或注册表项) 。 如果你使用它来确定是否存在 rootkit,请告诉我们!

不再具有命令行版本的原因是恶意软件作者使用其可执行文件名称开始针对 RootkitRevealer 扫描。 因此,我们已将 RootkitRevealer 更新为从作为 Windows 服务运行的自身的随机命名副本执行扫描。 此类型的执行并不有利于到命令行界面。 请注意,可以使用命令行选项来执行自动扫描,并将结果记录到文件中,这与命令行版本的行为等效。

什么是 Rootkit?

术语 rootkit 用于描述恶意软件(包括病毒、间谍软件和特洛伊木马程序)的机制和技术,尝试隐藏间谍软件阻止程序、防病毒软件和系统管理实用工具的存在性。 存在多个 rootkit 分类,具体取决于恶意软件置重新启动,以及它是在用户模式下还是在内核模式下执行。

持久 Rootkit
永久性 rootkit 是与在系统每次启动时激活的恶意软件相关联的一种。 由于此类恶意软件包含必须在每个系统启动时自动执行的代码,或者当用户登录时,它们必须在持久性存储区(如注册表或文件系统)中存储代码,并配置执行代码时无需用户干预即可执行的方法。

基于内存的 Rootkit
基于内存的 rootkit 是没有永久性代码,因此不会在重新启动后仍然存在的恶意软件。

用户模式 Rootkit
Rootkit 尝试避开检测的方法有很多。 例如,用户模式 rootkit 可能会截获对 Windows FindFirstFile/FindNextFile api 的所有调用,这些调用由文件系统浏览实用工具(包括资源管理器和命令提示符)用于枚举文件系统目录的内容。 当应用程序执行目录列表时,如果该目录列表返回的结果包含标识与 rootkit 关联的文件的条目,则 rootkit 会截获并修改输出以删除这些条目。

Windows 本机 api 可用作用户模式客户端和内核模式服务之间的接口,并且具有更复杂的用户模式 rootkit 截获文件系统、注册表和本机 API 的进程枚举函数。 这可以防止扫描仪检测 Windows API 枚举的结果与本机 API 枚举返回的结果进行比较。

内核模式 Rootkit
内核模式 rootkit 的功能甚至更为强大,因为它不仅能在内核模式下截获本机 API,而且还可以直接操作内核模式数据结构。 隐藏恶意软件进程的常见方法是从活动进程的内核列表中删除该进程。 由于进程管理 Api 依赖于列表的内容,因此,恶意软件进程将不会显示在 "任务管理器" 或 "进程资源管理器" 等进程管理工具中。

RootkitRevealer 的工作原理

由于持久 rootkit 通过更改 API 结果来工作,使使用 Api 的系统视图不同于存储中的实际视图,因此,RootkitRevealer 会将系统扫描结果的最高级别与最低级别的结果进行比较。 最高级别是 Windows API,最低级别是文件系统卷或注册表 hive 的原始内容 (hive 文件是注册表的磁盘存储格式) 。 例如,如果使用的是用户模式或内核模式来处理 Windows api 或本机 API 以从目录列表中删除其状态,则 RootkitRevealer 会被视为 Windows API 返回的信息与在 FAT 或 NTFS 卷的文件系统结构的原始扫描中发现的信息之间的差异。

能否从 RootkitRevealer 中隐藏 Rootkit
从理论上来说,rootkit 可以从 RootkitRevealer 中隐藏。 执行此操作需要拦截 RootkitRevealer 对注册表 hive 数据或文件系统数据的读取,并更改数据的内容,以便 rootkit 的注册表数据或文件不存在。 但是,这需要一个不会在 rootkit 中出现的复杂程度。 对数据的更改需要对 NTFS、FAT 和 Registry hive 格式的深入了解,并能够更改数据结构,使其隐藏 rootkit,但不会导致不一致或无效的结构或副作用差异(将由 RootkitRevealer 标记)。

是否有一种确认性的方式来了解 rootkit 的存在性
通常,不能从正在运行的系统中进行。 内核模式 rootkit 可以控制系统行为的任何方面,因此任何 API 返回的信息(包括对 RootkitRevealer 执行的注册表配置单元和文件系统数据的原始读取)都可能会受到威胁。 尽管比较系统的联机扫描和从安全环境(如启动到基于 CD 的操作系统安装)中的脱机扫描更可靠,但 rootkit 仍可针对此类工具规避检测。

最后一行是将永远不会有通用的 rootkit 扫描器,但最强大的扫描仪将是与防病毒集成的联机/脱机比较扫描仪。

使用 RootkitRevealer

RootkitRevealer 要求在 Windows XP 和更高) 权限下,将其运行的帐户分配给该帐户,并 (备份文件和目录、加载驱动程序以及执行卷维护任务。 默认情况下,将为 Administrators 组分配这些权限。 为了最大程度地减少误报,请在空闲系统上运行 RootkitRevealer。

为获得最佳结果,请退出所有应用程序,并在 RootkitRevealer 扫描过程中使系统处于空闲状态。

如果有疑问或问题,请访问 Sysinternals RootkitRevealer 论坛

手动扫描

若要扫描系统,请在系统上启动系统,然后按 "扫描" 按钮。 RootkitRevealer 扫描系统在其窗口底部的状态区域中报告其操作,并注意输出列表中的差异。 可配置的选项:

  • 隐藏 NTFS 元数据文件:默认情况下,此选项处于启用状态,并且 RootkitRevealer 不显示标准的 NTFS 元数据文件,这些文件在 Windows API 中是隐藏的。
  • 扫描注册表: 默认情况下,此选项处于启用状态。 取消选择它将 RootkitRevealer 不执行注册表扫描。

启动自动扫描

RootkitRevealer 支持自动扫描系统的几个选项:

用法: rootkitrevealer [-a [-c] [-m] [-r] outputfile]

参数 说明
-a 完成后自动扫描和退出。
-c 将输出格式设置为 CSV。
-m 显示 NTFS 元数据文件。
-r 请勿扫描注册表。

请注意,文件输出位置必须位于本地卷上。

如果指定-c 选项,则不会报告进度,并以 CSV 格式打印差异,以便轻松地导入到数据库中。 您可以通过使用类似于下面的命令行通过 Sysinternals PsExec 实用程序执行远程系统,来执行远程系统扫描:

psexec rootkitrevealer.exe \\remote-a c:\windows\system32\rootkit.log

解释输出

这是 RootkitRevealer 的屏幕截图,检测到常见 HackerDefender rootkit 的存在。 注册表项差异表明,存储 HackerDefender 的设备驱动程序和服务设置的注册表项对 Windows API 不可见,但存在于注册表配置单元数据的原始扫描中。 同样,HackerDefender 关联的文件对 Windows API 目录扫描不可见,但存在于对原始文件系统数据进行扫描。

Rootkit Revealer

你应检查所有差异并确定其是否存在 rootkit 的可能性。 遗憾的是,如果存在 rootkit,则没有明确的方法来确定是否基于输出,但应检查所有报告的差异以确保它们 explainable。 如果确定已安装 rootkit,请在 web 上搜索删除说明。 如果不确定如何删除 rootkit,应重新格式化系统硬盘,并重新安装 Windows。

除了以下有关可能的 RootkitRevealer 差异的信息,Sysinternals 上的 RootkitRevealer 论坛还讨论了检测到的 rootkit 和特定的误报。

Windows API 中隐藏

这些差异是由大多数 rootkit 表现的;但是,如果你尚未选中 "隐藏 ntfs 元数据文件",则你应该会在任意 NTFS 卷上看到很多此类条目,因为 ntfs 会从 Windows API 中隐藏其元数据文件,例如 $MFT 和 $Secure。 NTFS 卷上存在的元数据文件因 NTFS 版本和已在卷上启用的 NTFS 功能而异。 还有防病毒产品(如 Kaspersky 等防病毒软件),它们使用 rootkit 技术隐藏它们存储在 NTFS 备用数据流中的数据。 如果你运行的是病毒扫描程序,则会从每个 NTFS 文件上的备用数据流的 Windows API 差异中看到隐藏的。 RootkitRevealer 不支持输出筛选器,因为 rootkit 可以利用任何筛选。 最后,如果在扫描过程中删除文件,还可能会看到这种差异。

这是 Windows Server 2003 中定义的 NTFS 元数据文件列表:

  • $AttrDef
  • $BadClus
  • $BadClus: $Bad
  • $BitMap
  • $Boot
  • $LogFile
  • $Mft
  • $MftMirr
  • $Secure
  • $UpCase
  • $Volume
  • $Extend
  • $Extend\$Reparse
  • $Extend\$ObjId
  • $Extend\$UsnJrnl
  • $Extend\$UsnJrnl:$Max
  • $Extend\$Quota

访问被拒绝。
RootkitRevealer 不应报告此差异,因为它使用允许其访问系统上的任何文件、目录或注册表项的机制。

在 Windows API、目录索引中可见,但在 MFT 中不可见。
在 WINDOWS API 中可见,但在 MFT 或目录索引中不可见。
在 Windows API、MFT 中可见,但在目录索引中不可见。
在目录索引中可见,但不Windows API 或 MFT。

文件系统扫描由三个组件组成:Windows API、NTFS 主文件表 (MFT) 和 NTFS 磁盘上目录索引结构。 这些差异表明文件只出现在一个或两个扫描中。 一个常见原因是在扫描期间创建或删除文件。 这是在扫描期间创建的文件的 RootkitRevealer 差异报告示例:

C:\newfile.txt
2005/3/1 下午 5:26
8 字节
在 WINDOWS API 中可见,但在 MFT 或目录索引中不可见。

Windows API 长度与原始 hive 数据不一致。
Rootkit 可以通过缩小注册表值的大小来尝试隐藏自身,以便其内容对 Windows API 不可见。 应检查任何此类差异,但它也可能显示为扫描期间更改的注册表值的结果。

API 和Windows配置单元数据之间的类型不匹配。
注册表值具有 DWORD 和 REG_SZ 等类型,此差异指出通过 Windows API 报告的值的类型不同于原始 hive 数据的类型。 例如,rootkit 可以通过将其存储为 REG_BINARY 值来屏蔽其数据,使 Windows API 认为它是 REG_SZ 值;如果它在数据开始时存储 0,则 Windows API 将无法访问后续数据。

键名称包含嵌入的 null。
此Windows API 将密钥名称视为以 null 终止的字符串,而内核则将它们视为计数字符串。 因此,可以创建对操作系统可见的注册表项,但仅对注册表工具(如 Regedit)部分可见。 Sysinternals 中的 Reghide 示例代码演示了此方法,恶意软件和 rootkit 都使用此方法来隐藏注册表数据。 使用 Sysinternals RegDelNull 实用工具删除具有嵌入 null 的键。

API 和Windows配置单元数据之间的数据不匹配。
如果在注册表扫描过程中更新注册表值,则会出现此差异。 经常更改的值包括时间戳(如Microsoft SQL Server运行时间值)和病毒扫描程序"上次扫描"值。 应调查任何报告的值,以确保它是有效的应用程序或系统注册表值。

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\RECOVERYMANAGER\MSSQLServer\uptime_time_utc
2005/3/1 下午 4:33
8 字节

Rootkit 资源

以下网站和书籍是有关 rootkit 详细信息的来源:

Root、Rootkit 和数字Rights Management过远
阅读 Mark 的博客文章,了解他发现和分析的一台计算机上的一个管理根工具包。

解包 Rootkit
Mark 的6 Windows IT Pro 杂志一文概述了 rootkit 技术以及 RootkitRevealer 的工作原理。

Rootkit:对内核进行Windows转换
本书由 Greg Hoglund 和 Jamie Butler 提供的最全面的 rootkit 处理。

www.phrack.org
此站点存储 Phrack的存档,这是一本面向破解工具的杂志,开发人员在此讨论与安全相关的产品、rootkit 技术和其他恶意软件技巧方面的缺陷。

计算机病毒研究与防御艺术,主图:Peter Szor

恶意软件:与恶意代码冲突,由 Ed Snnydis 和 Lenny Zeltser 提供

Windows Internals,第 4版,主讲人 Mark Russin一和 Dave一起 (本书不讨论 rootkit,但了解 Windows 体系结构有助于了解 rootkit) 。

下载下载 RootkitRevealer (231 KB)

现在从Sysinternals Live 运行