RootkitRevealer v1.71

作者:Mark Russinovich

发布时间:2006 年 11 月 1 日

Download下载 RootkitRevealer(231 KB)
立即Sysinternals Live 运行。

简介

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

不再存在命令行版本的原因是恶意软件创建者已开始使用 RootkitRevealer 的可执行名称来针对 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,最低级别是文件系统卷或注册表配置单元的原始内容(配置单元文件是注册表的磁盘存储格式)。 因此,RootkitRevealer 会将操控 Windows API 或本机 API 以从目录列表中删除其状态的 rootkit(无论是用户模式还是内核模式)视为 Windows API 返回的信息与在 FAT 或 NTFS 卷文件系统结构的原始扫描中看到的信息之间的差异。

Rootkit 是否可以躲过 RootkitRevealer
从理论上讲,rootkit 有可能会躲过 RootkitRevealer。 要做到这一点,需要拦截 RootkitRevealer 对注册表配置单元数据或文件系统数据的读取,并更改数据的内容,使 rootkit 的注册表数据或文件不存在。 但是,这需要迄今为止 rootkit 中未见的成熟程度。 要更改这些数据,需要深入了解 NTFS、FAT 和注册表配置单元格式,以及更改数据结构以隐藏 rootkit 的能力,但这并不会导致 RootkitRevealer 标记的结构或副作用差异不一致或无效。

是否有一种肯定的方法可以知道 rootkit 的存在
通常,无法从正在运行的系统内部做到。 内核模式 rootkit 可以控制系统行为的任何方面,因此任何 API 返回的信息(包括由 RootkitRevealer 执行的注册表配置单元的原始读取和文件系统数据)都可能遭到入侵。 虽然比较系统的联机扫描以及安全环境(如启动到基于 CD 的操作系统安装)中的脱机扫描更为可靠,但 rootkit 可针对此类工具来逃避它们的检测。

底线是,永远不会有通用的 rootkit 扫描程序,但最强大的扫描程序是与防病毒集成的线上/线下比较扫描程序。

使用 RootkitRevealer

RootkitRevealer 要求运行它的账户分配有备份文件和目录、加载驱动程序和执行卷维护任务(Windows XP 和更高)的权限。 默认情况下,管理员组会被分配这些权限。 为了尽量减少误报,请在空闲系统上运行 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 \\remote -c rootkitrevealer.exe -a c:\windows\system32\rootkit.log

解释输出

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

Rootkit Revealer

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

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

在 Windows API 中隐藏

这些差异是大多数 rootkit 所表现出的差异:但是,如果你尚未选中“隐藏 NTFS 元数据文件”,则你应该会在任何 NTFS 卷上看到许多此类条目,因为 NTFS 会向 Windows API 隐藏其元数据文件(如 $MFT 和 $Secure)。 NTFS 卷上存在的元数据文件因 NTFS 版本和卷上已启用的 NTFS 功能而异。 还有一些防病毒产品(如卡巴斯基防病毒)使用 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 长度与原始配置单元数据不一致。
Rootkit 可以尝试通过歪曲注册表值的大小来隐藏自身,使其内容对 Windows API 不可见。 应检查任何此类差异,但它也可能显示为扫描期间注册表值更改的结果。

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

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

Windows API 与原始配置单元数据之间的数据不匹配。
如果在注册表扫描正在进行时更新注册表值,则会发生此差异。 经常更改的值包括时间戳,例如 Microsoft SQL Server 运行时间值(如下所示)和病毒扫描程序的“上次扫描时间”值。 应调查所有报告的值,从而确保它是有效的应用程序或系统注册表值。

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

Rootkit 资源

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

Sony, Rootkits and Digital Rights Management Gone Too Far
阅读 Mark 的博客文章,了解他在他的一台计算机上发现和分析索尼 rootkit 的故事。

Unearthing Rootkits
Mark 在 6 月的 Windows IT Pro Magazine 文章概述了 rootkit 技术以及 RootkitRevealer 的工作原理。

Rootkits: Subverting the Windows Kernel
Greg Hoglund 和 Jamie Butler 写的这本书是目前对 rootkit 最全面的论述。

www.phrack.org
这个网站存储了 Phrack 的存档,Phrack 是面向破解者的杂志,开发人员可在其中讨论安全相关产品的缺陷、rootkit 技术和其他恶意软件技巧。

The Art of Computer Virus Research and Defense,作者:Peter Szor

Malware: Fighting Malicious Code,作者:Ed Skoudis 和 Lenny Zeltser

Windows Internals,第 4 版,作者:Mark Russinovich 和 Dave Solomon(这本书没有讨论 rootkit,但了解 Windows 体系结构有助于了解 rootkit)。

Download下载 RootkitRevealer(231 KB)

立即Sysinternals Live 运行。