了解Windows Vista内核的安全性( 四 )


使用 TPM 的优势在于,如果 BIOS 或系统启动文件在启用 BitLocker 后做出更改,BitLocker 会使用 TPM 功能确保不解密 VMK 和解除对引导卷的锁定 。当您第一次加密系统卷,以及每次对提及的所有组件执行更新时,BitLocker 会借助于 TPM 设备驱动程序 (%Systemroot%System32DriversTpm.sys) 计算这些组件的 SHA-1 哈希,并将称为测量的每个哈希存储到不同的 TPM 平台配置注册表 (PCR) 。接下来,它使用 TPM 密封 VMK,该操作使用存储在 TPM 中的私钥加密 TPM 和与 BitLocker 传递到 TPM 的其他数据一起存储在 PCR 中的值 。然后,BitLocker 将密封的 VMK 和加密的 FVEK 存储在卷的元数据区域 。
当系统启动时,它会测量自己的哈希和 PCR 加载代码,并将哈希写入 TPM 的第一个 PCR 。然后,它哈希 BIOS,并将该测量存储到相应的 PCR 。接下来,BIOS 按启动序列哈希下一个组件,即引导卷的主引导记录 (MBR),此过程会一直继续,直到测量操作系统加载器 。运行的每个后续代码段负责测量其加载的代码,并将测量结果存储到 TPM 中相应的注册表 。最后,当用户选择要启动哪个操作系统时,启动管理器 (Bootmgr) 会从卷读取加密的 VMK,并要求 TPM 取消密封 。只有所有测量与密封 VMK 时相同时(包括可选的 PIN),TPM 才成功解密 VMK 。
您可以考虑将此方案作为验证链,其中启动序列中的每个组件会描述 TPM 的下一个组件 。只有所有描述与提供的原始描述相符时,TPM 才泄露其秘密 。因此,即使卸下磁盘并装到其他系统、使用不同的操作系统启动系统或引导卷上未加密文件遭到破坏,BitLocker 也会保护加密数据 。
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 附带的证书颁发机构的公钥 。

推荐阅读