电脑技术学习

了解Windows Vista内核的安全性

dn001

  5.代码完整性验证

  作为内核模式设备驱动程序执行的恶意软件(包括 rootkit)与内核在相同的权限级别运行,因此最难识别和删除。这类恶意软件可以修改内核和其他驱动程序的行为,以便使其变得不可见。内核模式代码功能的 Windows Vista 代码完整性,也称为内核模式代码签名 (KMCS),仅允许加载由开发人员发布和经过数字签名的设备驱动程序,这些开发人员已经过为数不多的证书颁发机构 (CA) 之一的审查。默认情况下,KMCS 在 Windows Vista 64 位系统上强制执行。

  因为证书颁发机构会对其服务收取费用并进行基本的背景检查,如验证业务识别,所以很难产生在 64 位 Windows Vista 上运行的匿名内核模式恶意软件。此外,设法溜过验证进程的恶意软件可能会留下线索,这些线索在受到危害的系统发现恶意软件时,可以反击作者。KMCS 还有一些次要的用途,如在怀疑驱动程序有使客户系统崩溃的错误和解除高清晰度多媒体内容锁定(我会在稍后简单介绍)时,会向 Windows 在线崩溃分析团队提供联系信息。

  KMCS 使用 Windows 十多年来一直采用的公钥加密技术,并要求内核模式代码包括由受信任证书颁发机构之一生成的数字签名。如果发布者将驱动程序提交给 Microsoft Windows 硬件质量实验室 (WHQL),并且驱动程序通过了可靠性测试,则 Microsoft 会充当签署代码的证书颁发机构。大多数发布者将通过 WHQL 获得签名;但是如果驱动程序没有 WHQL 测试程序,发布者不想提交到 WHQL 测试,或者驱动程序是在系统启动早期加载的引导启动驱动程序,则发布者必须自己签署代码。为此,他们必须首先从 Microsoft 确定为受信任内核模式代码签名的证书颁发机构之一获得代码签名证书。然后,作者通过数字方式哈希代码,通过使用私钥进行加密来签署哈希,并将证书和加密的哈希包含在代码中。

  当驱动程序尝试加载时,Windows 会使用存储在证书中的公钥解密包含在代码中的哈希,然后验证哈希与代码中包含的哈希是否匹配。证书的真实性也通过相同的方式进行检查,但使用 Windows 附带的证书颁发机构的公钥。

  Windows 还检查相关的证书链,一直检查到 Windows 启动加载器和操作系统内核中嵌入的根颁发机构之一。尝试加载未签名的 64 位驱动程序不应该发生在生产系统,因此不同于“即插即用管理器(它在指向加载没有确认是否通过 WQHL 测试签名的驱动程序时显示警告对话框),64 位 Windows Vista 在阻止加载未签名驱动程序时,在无提示的情况下随时将事件写入代码完整性应用程序事件日志,如图 5 所示。32 位 Windows Vista 也检查驱动程序签名,但允许加载未签名的驱动程序。阻止它们将会破坏升级的 Windows XP 系统(要求在 Windows XP 上加载驱动程序,并且还允许支持仅存在 Windows XP 驱动程序的硬件)。不过,32 位 Windows Vista 还会在加载未签名驱动程序时将事件写入代码完整性事件日志。

  因为代码签名通常用来将代码标记为经过严格测试的官方发行版本,所以发布者通常并不想对测试代码签名。因此,Windows Vista 包括可以使用 Bcdedit 工具(在 TechNet 杂志 2007 年 3 月份我的文章中介绍过)启用和禁用的测试签名模式,它将加载使用由内部证书颁发机构生成的测试证书经过数字签名的内核模式驱动程序。此模式设计为供程序员在开发其代码时使用。当 Windows 处于此模式时,它会在桌面上显示标记,如图中所示。

  6.受保护的进程

  下一代多媒体内容,如 HD-DVD、BluRay 和高级访问内容系统 (AACS) 下许可的其他格式,在以后几年内会变得更加常见。Windows Vista 包括许多技术,统称为受保护的媒体路径 (PMP),AACS 标准要求在播放此类内容时使用这些技术。PMP 包括受保护的用户模式音频 (PUMA) 和受保护的视频路径 (PVP),它们一直为音频和视频驱动程序及媒体播放机应用程序提供机制,以防止未授权软件或硬件捕获高清晰度格式的内容。

  PUMA 和 PVP 定义特定于音频和视频播放机、设备驱动程序和硬件的接口和支持,但是 PMP 也依赖在 Windows Vista 中引入的一般内核机制,即称为受保护的进程。受保护的进程以标准的 Windows 进程构造为基础,该构造封装了运行的可执行映像、其 DLL、安全上下文(进程运行所在的帐户及其安全权限),及在进程内执行代码但阻止某些访问类型的线程。

标准进程实施访问控制模式,允许使用“调试程序权限完全访问进程所有者和管理帐户。完全访问允许用户查看和修改进程的地址空间,包括映射到进程的代码和数据。用户也可以将线程注入进程。这些访问类型与 PMP 的要求不一致,因为它们允许未授权代码获取存储在播放内容的进程中的高清晰度内容和数字版权管理 (DRM) 密钥的访问权限。

  受保护的进程限制访问一组受限的信息和进程管理界面,包括查询进程的映像名和终止或挂起进程。但是,内核通过一般的进程查询功能(返回有关系统上所有进程的数据)为受保护的进程提供诊断信息,因此不要求直接访问进程。访问可能会损坏只允许通过其他受保护的进程访问的媒体。

  此外,为避免从内部受到危害,加载到受保护进程的所有可执行代码(包括其可执行映像和 DLL)必须由 Microsoft (WHQL) 使用受保护的环境 (PE) 标记签名,或者(如果是音频编解码器)由开发人员使用从 Microsoft 获得的 DRM 签名证书签名。因为内核模式代码可以获取任何进程的完全访问权限(包括受保护的进程),并且 32 位 Windows 允许加载未签名的内核模式代码,所以内核可为受保护的进程提供 API,以查询内核模式环境的“清洁度,并仅在没有加载未签名代码时使用结果解除对高级内容的锁定。

  没有特定识别受保护进程的 API,但是您可以间接地根据有关它们的受限信息以及甚至无法从管理帐户进行调试来识别它们。音频设备图形隔离进程 (%Systemroot%System32Audiodg.exe) 用于播放使用内容加密系统 (CSS) 编码的 DVD,并在“任务管理器窗格中标识为受保护的进程。事实上,即使使用管理权限运行,任务管理器也无法获得其命令行、虚拟化和数据执行保护状态。

标签: