2023年12月2日发(作者:)

对编程实现访问VISTA加密硬盘的

认识和建议

2006-10-28

目 录

1. VISTA对磁盘的加密 ............................................................................................. 3

1.1 磁盘加密的必要性 ............................................................................................ 3

1.2 VISTA 的加密措施............................................................................................ 3

2. 通过WMI 对加密磁盘进行访问 ............................................................................ 4

2.1 WMI是什么 ...................................................................................................... 4

2.2 WMI 在系统中的体系层次 ................................................................................ 5

2.3 WMI的逻辑结构 ............................................................................................... 6

2.4 编制WMI 应用程序......................................................................................... 6

2.5 WMI 对BitLocker和TPM 的访问支持 ............................................................. 7

3. 相关的认识和建议 ................................................................................................. 7

3.1 官方文档描述的WMI 可以实现的功能............................................................. 7

3.2 结论、建议和可能的实施步骤 .......................................................................... 8

参考资料.......................................................................................................................... 9

1. VISTA对磁盘的加密

1.1 磁盘加密的必要性

信息安全一直是Windows重点关注的方面,微软希望在新的一代Windows操作系统Vista中大大改善其倍受攻击的安全性。与以前的版本相比,Vista为用户提供了更加全面的保护:包括防火墙、自动更新、间谍软件防范、Internet安全设置、用户账户控制,等等。

但是,上述的这些安全措施,并不能防范用户因 PC 硬件丢失、被盗或不当的淘汰处理所造成的数据失窃或泄漏。在这些情况下,窃密者可以通过离线式攻击方法,也就是直接接触、使用或者挂接你的电脑来实施入侵行为,获取计算机里面的数据。而之前的Windows系统只能对硬盘采取有限的加密手段,在离线式攻击面前不堪一击,从而造成机密信息在非法使用者面前暴露无遗。比如,在Windows XP系统下,用户的账户保护非常脆弱,专业技术人员可以在短时间内破解掉它,从而以超级用户身份进入操作系统,进而获取该系统任何信息的处理权限。

怎样确保系统即便在遭受离线式攻击的时候也安全呢?Windows Vista 的思路是在遭受离线式攻击时候,首先保证操作系统本身不被入侵,然后通过操作系统来保护其余信息的安全。

1.2 VISTA 的加密措施

在Windows Vista中,保护操作系统本身不被非法进入的新技术称为BitLocker Drive

Encryption ( BDE,数位锁驱动器加密 )。对其余信息的保护采用的是Encrypting File System(EFS,文件加密系统)技术,在Vista之前,该技术已经被应用于Windows 2000/XP/2003操作系统中。需要强调的是,BDE和EFS针对的都是NTFS文件系统卷上的数据;而且,并不是所有的Windows Vista版本都支持BitLocker驱动器加密,相应的功能只有Windows

Vista 的Enterprise版和Ultimate版才能够实现。

BitLocker驱动器加密是Vista引入的一种新的加密模式,它只能加密系统分区也就是Windows Vista所在的分区,加密后的磁盘或者磁盘分区是与计算机硬件(集成在主板上的TPM芯片或者USB闪存)捆绑在一起的,因此无法在其他计算机上解密。BitLocker 能够有效地防止非法使用者启动另外一个系统,或者通过离线方式浏览存储在受保护驱动器中的文件,或者使用解密工具来破坏Windows Vista中文件和系统保护机制。

EFS是一种基于用户账户的文件保护机制,也就是说它使用用户的计算机帐户对该用户的数据进行加。

利用 BitLocker,所有用户和系统文件都可加密,包括交换和休眠文件。而EFS 则不能加密上述文件。

BitLocker和EFS相互补充,给系统安全提供强大的保护。Bitlocker系统分区,也就等于保护了用户账户,攻击者在拿不到这些账户的时候是也就根本不可能拿到那些在其他分区中被EFS所保护的任何数据了。

BitLocker 和EFS 具有对合法用户的操作透明性,也就是说,在使用(比如打开和更改)加密文件的时候,不需要手动解密已加密的文件,而且感觉不到系统对该文件的解密过程。

BitLocker主要是在本地用软硬结合的方式来保护VISTA所在分区上的数据。加密的时候,用户可以将密匙保存到TPM 芯片,或者可移动的USB 磁盘,或者打印在纸张上。

启动VISTA的时候,通过 BitLocker 还可选择锁定正常的引导过程,直至用户提供 PIN(类似于 ATM 卡 PIN,针对采用TPM 芯片的情形)或插入含有密钥资料的 USB 闪存驱动器,或者手工输入正确的密匙为止。BitLocker加密算法理论上来说不能破解,这要求用户严格保存好密匙,否则没有办法恢复对系统的访问。

用BitLocker加密后的NTFS文件系统分区,在离线状态下被视为未知文件系统分区。用EFS 加密后的文件/文件夹在离线状态下具有不可访问属性。

在硬盘迁移(将含有操作系统卷的硬盘驱动器移动到另一台计算机或更换系统主板),或者系统锁定情况下(可能是由硬件故障或直接攻击而引起),通过密匙,BitLocker 会提供一个简单而有效的恢复过程,还原VISTA 系统。

2. 通过WMI 对加密磁盘进行访问

BitLocker 提供了一个用于设置和管理的向导,并通过具备脚本编写支持的 Windows

管理规范 (Windows Management Instrumentation,WMI) 界面提供了可扩展性和可管理性。

对EFS 的访问或设置或管理还没有看到相应的接口支持。

2.1 WMI是什么

在 WMI 之前,所有的 Windows 图形化管理工具都依赖于 Win32 应用程序编程接口(Application Programming Interfaces,APIs)来访问和管理 Windows 资源。这种情况使

Windows 系统管理员无法通过一种简便的方法利用常见的脚本语言来自动化常用的系统管理任务,因为大多数脚本语言都不能直接调用 Win32 API。通过提供一致的模型和框架,WMI 改变了这种情况 — 通过模型和框架,所有的 Windows 资源均被描述并公开给外界。最好的一点是,系统管理员可以使用 WMI 脚本库创建系统管理脚本,从而管理任何通过

WMI 公开的 Windows 资源。

使用 Windows Script Host 和 Microsoft Visual Basic Scripting Edition (VBScript),或任何支持 COM 自动化的脚本语言(例如,ActiveState Corporation 的 ActivePerl),可以编写脚本来管理和自动化企业系统、应用程序和网络的下列方面,如:

Windows Server 2003、Windows XP 专业版和 Windows 2000 系统管理――可以编写脚本来检索性能数据,管理事件日志、文件系统、打印机、进程、注册表设置、计划程序、安全性、服务、共享以及很多其他的操作系统组件和配置设置。

网络管理――可以创建基于 WMI 的脚本来管理网络服务,例如 DNS、DHCP 和启用

SNMP 的设备。

实时健全监视――使用 WMI 事件订阅,您可以编写代码以在事件发生时监视并响应事件日志项,监视并响应文件系统、注册表修改及其他实时的操作系统更改。基本上对 WMI来说,WMI 事件订阅和通知是在 SNMP 环境中 SNMP 陷阱是什么。

Windows .NET 企业服务器管理――可以编写脚本来管理 Microsoft Application Center、Operations Manager、Systems Management Server、Internet Information Server、Exchange Server

和 SQL Server。

Windows脚本就像万能胶,能够把独立的程序、服务、控件组合起来完成任务。脚本编程的技巧就是组合的技巧。 2.2 WMI 在系统中的体系层次

WMI是WBEM模型的一种实现。WBEM即Web-Based Enterprise Management,或基于Web的企业管理,WBEM由DMTF(Distributed Management Task Force,分布式管理任务组)在许多厂商的帮助下创立,包括Compaq、Sun、Microsoft等。WBEM的目标是,为管理企业环境开发一个标准的接口集。WBEM模型最关键的部分是它的数据模型(或描述和定义对象的方式)、编码规范(Encoding Specification),以及在客户端和服务器端之间传输数据的模式。

WBEM的数据模型是CIM(Common Information Model,公共信息模型)。CIM是一个用来命名计算机的物理和逻辑单元的标准的命名系统(或称为命名模式),例如硬盘的逻辑分区、正在运行的应用的一个实例,或者一条电缆。

CIM是一个面向对象的模型,使用一组面向对象的术语进行描述。CIM包含类(Class),类是被管理单元的模板。类的实例称为对象(Object),对象代表着底层系统的一个具体单元。名称空间(Namespace)是一个类的集合,每个名称空间面向一个特定的管理领域。类包含属性(Property)和方法(Method)。

CIM分三层。第一层是核心模型(Core Model),这一层包含的类定义对于所有管理领域来说都是共同的。第二层是公共模型(Common Model),这一层包含的类定义对于特定的管理领域来说是公共的,但与具体的操作系统和系统设计无关。第三层是扩展模型(Extension model),这一层包含的类定义与特定的操作系统或技术有关。

WMI是Microsoft扩展CIM 2.0得到的面向Win32系统的扩展模型。引用WMI类和属性的形式是“扩展前缀_类名称.属性名称”,例如Win32_,其中Win32是CIM模式cimv2名称空间内WMI扩展类的前缀,ComputerSystem是类,Name是属性。

WMI是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common

Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI,如图一所示(该图来自MSDN),工具软件和WMI可以方便地读写WMI。

图1 WMI 的体系层次

如前所述,WMI允许通过一个公共的接口访问多种操作系统构成单元,因此不必分别对待各种底层接口或所谓的“提供者”。利用WMI可以高效地管理远程和本地的计算机;与此相对,并非所有的Windows 2K/XP命令行工具都支持远程运行。

编写WMI脚本的很大一部分工作涉及到读取和设置属性值。这些脚本就像万能胶,能够把独立的程序、服务、控件组合起来完成任务。脚本编程的技巧就是组合的技巧。XP和2003比2000带有更多的命令行工具,WMI也大大加强了,脚本的功能水涨船高,可以说是“只有想不到,没有做不到”,一切有待使用者的发掘。

2.3 WMI的逻辑结构

首先是WMI使用者,比如脚本(确切的说是脚本宿主)和其他用到WMI接口的应用程序。由WMI使用者访问CIM(公共信息模型Common Information Model)对象管理器WinMgmt(即WMI服务),后者再访问CIM储存库。静态或动态的信息(对象的属性)就保存在CIM库中,同时还存有对象的方法。一些操作,比如启动一个服务,通过执行对象的方法实现。这实际上是通过COM技术调用了各种dll。最后由dll中封装的API完成请求。

WMI是事件驱动的,操作系统、服务、应用程序、设备驱动程序等都可作为事件源,通过COM接口生成事件通知。WinMgmt捕捉到事件,然后刷新CIM库中的动态信息。这也是为什么WMI服务依赖EventLog的原因。

WMI是事件驱动的,整个事件处理机制分为四个部分:

A.事件生产者(provider):负责产生事件。WMI包含大量的事件生产者。有性能计数器之类的具体的事件生产者,也有类、实例的创建、修改、删除等通用的事件生产者。

B.事件过滤器(filter):系统每时每刻都在产生大量的事件,通过自定义过滤器,脚本可以捕获感兴趣的事件进行处理。

C.事件消费者(consumer):负责处理事件。它可以是可执行程序、动态链接库(dll,由WMI服务加载)或者脚本。

D.事件绑定(binding):通过将过滤器和消费者绑定,明确什么事件由什么消费者负责处理。

2.4 编制WMI 应用程序

Windows 管理规范 (WMI) 是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口,提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于Windows的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。不过,默认情况下并没有服务依赖它,反而是它要依赖RPC和EventLog服务。

采用C++ 编制WMI应用程序的过程如下:

A.初始化COM 环境:必须调用CoInitializeEx 和 CoInitializeSecurity函数,这是由于WMI 是基于COM 技术的。

B.连接到适当的WMI 命名空间

C.设置锁连接命名空间的安全级别

D.编写应用程序

E.退出COM 环境

2.5 WMI 对BitLocker和TPM 的访问支持

WMI 提供对BitLocker和TPM 的事件支持(provider),用户可以采用脚本调用对BitLocker和TPM 进行配置、管理。

――The Security WMI providers enable administrators and programmers to configure

BitLocker Drive Encryption (BDE) and the Trusted Platform Module (TPM) using Windows

Management Instrumentation (WMI).

3. 相关的认识和建议

3.1 官方文档描述的WMI 可以实现的功能

VISTA 系统为BitLocker 提供了一个应用程序完成安装和管理的向导。并通过具备脚本编写支持的 Windows 管理规范 (WMI) 界面为该程序提供了可扩展性和可管理性。

IT 管理员可通过向导或由 Windows Vista 的 Win32_EncryptableVolume Windows 管理规范 (WMI) 提供程序提供的界面来对 BitLocker 进行本地和远程配置。这些界面包括多种管理功能,如磁盘卷加密的开始、暂停和恢复以及配置如何保护磁盘卷的加密密钥 (FVEK)。

A.管理和检查磁盘状态

Windows Vista 和 Windows 服务器“Longhorn”所附带的管理脚本 () 为

IT 管理员提供了一个管理和检查磁盘状态的简单方式。此脚本基于可用的 WMI 提供程序而编写,可轻松地对其进行修改,以帮助针对不同的企业管理需求建立自定义解决方案。

B.通过 WMI 启用WMI 保护的任何数据卷

对于存储在非安全环境或共享环境中(例如分支机构位置)的服务器,BitLocker 可确保为其提供的数据保护级别与为客户端计算机提供的相同。服务器上具备的这种附加功能可对操作系统卷加密,还可针对 IT 管理员希望用 WMI 保护的任何数据卷来通过 WMI 启用。

C.远程启用 BitLocker

默认情况下,BitLocker 驱动器加密功能不随 Windows 服务器“Longhorn”一同安装。选择 Add Features(添加功能),然后从选项列表中选择 BitLocker Drive Encryption(BitLocker 驱动器加密),即可从 InitialConfigurationTasks 菜单添加 BitLocker。安装

BitLocker 功能后,可按照本文档稍后所述的说明对其进行设置和维护。在服务器上安装

BitLocker 驱动器加密后,必须重新启动。使用 WMI,可远程启用 BitLocker。

D.自动解锁

自动解锁功能满足的是在引导期间对数据卷自动解锁而不需要人为干预的需要。启用自动解锁时可将数据卷 EWK 的纯文本副本提交到所引导操作系统的注册表中。在没有成功访问加密操作系统卷的情况下,无法访问数据卷上的数据。首次尝试从 Windows 读取或查询数据卷会导致其 VMK 被解密(通过从注册表读取 EWK 来实现)。如果在操作系统卷中关闭 BitLocker,则 BitLocker 还会清除操作系统卷注册表中的任何密钥资料。在这些情况下,用户必须提供密钥才能访问数据卷。

系统管理员可使用可脚本化的 WMI 界面来对每个系统启用或禁用自动锁定功能。要保持对数据卷的高级保护,任何人都不可以启用自动解锁功能,除非对操作系统卷启用了 BitLocker 或进行了加密。

E.数据卷的恢复

数据卷的恢复类似于操作系统卷的恢复。在出现故障前(最好在设置时),必须在其他介质上存储 EWK 的副本。如果数据卷损坏、被移动到新平台或操作系统卷无法为自动解锁检索 EWK,则用户可插入含有 EWK 副本的介质。

界面和 WMI 提供程序都支持对数据卷的恢复。在 BitLocker 客户端版本中,对数据卷的处理方式类似于对外部卷的处理方式。只有 EWK 在操作系统卷的注册表中丢失或损坏时,才需要将数据卷重新绑定到平台。

F.呈现不可访问卷上的数据

首先,使用 GetKeyProtectors 来获取类型为“TPM”、“TPM 加 PIN”和“TPM 加启动密钥”的所有密钥保护工具的标识符。[对于永久性安全淘汰,则获取所有密钥保护工具的标识符,包括恢复密钥。]

其次,[适用于永久性安全淘汰] 使用 ProtectKeyWithNumericalPassword 和一个随机生成的密码序列13创建一个不使用的恢复密码 blob(废除实际的恢复密码)。

再次,使用 DeleteKeyProtector 删除与以上找到的标识符相关联的所有可用的密钥保护工具。

然后,[适用于永久性安全淘汰] 对于 TPM 机器,清除使用 TPM WMI 提供程序函数

Win32_ 的 TPM。

上述引用的方法名称通过 BitLocker Windows 管理规范 (WMI) 提供程序

Win32_EncryptableVolume 来暴露。可被 Windows Vista 识别的每个磁盘卷都是

Win32_EncryptedVolume 提供程序类的一个实例。

G.修改BCD数据

此外,微软也在Windows Vista 中提供了可通过WMI (Windows Management

Instrumentation : Windows管理规范)调用的 BCD 类,通过它可以用编程的方式修改BCD数据。

3.2 结论、建议和可能的实施步骤

A. 结论

a) 没有直接访问采用BitLocker 或者EFS 方式加密的分区或者数据。如果有,则不符合数据加密的严格规范。

b) 查找到的EFS 数据恢复软件AEFSDR(Advanced EFS Data Recovery)可以恢复(没有具体测试)系统不能启动情况下的EFS 数据,但要求提供加密文件/文件夹的密码、系统密码,和认证证书。

c) VISTA 可以管理通过 WMI 公开的 BitLocker和TPM 资源。也就是采用WMI 方式,而不是API 的方式提供对BitLocker 加密卷的管理和配置。这种方式基于COM 组件,要求VISTA 启动RPC、EventLog和WinMgmt服务。该组件主要是针对脚本程序开发的,可能实现的功能有限。比如,官方文档提到的那些可能实现的功能基本上属于对BitLocker 加密分区的管理,没有提及对加密文档的直接访问。

B. 实施步骤和分析

a) 如果需要对BDE 加密分区进行访问,必然考虑对EFS 的 解密。无论可以实现的功能多少,官方文档提供了对BitLocker 的WMI 管理接口;而对EFS 则没有提供相应的操作接口。 b) 即便是考虑采用WMI 对BitLocker 进行访问,需要程序在VISTA系统(至少是另外一个VISTA 系统)中运行。

c) WMI 接口具体能实现哪些功能,还需要深入到WMI 中具体的接口类进行实验。

C. 建议

明确待开发软件的目标、需求,然后再具体深入到WMI 的Security Provider的BitLocker、TPM开发。

a) 到底是在非VISTA 系统、简化版本的VISTA 系统,还是完全版本的VISTA 系统中对BDE 分区进行操作。

b) 是不是需要对EFS 加密文件/文件夹进行操作。

参考资料

[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

[9]

[10]

[11]

[12]

[13]

[14]

Windows 2000 的企业级存储白皮书

Windows Vista操作系统安全体系概览

为Vista的驱动器加密

Windows Vista的BitLocker全盘加密

BitLocker 驱动器加密:执行概述

Windows 2000加密文件系统

深入剖析EFS

详解EFS加密

关于EFS加密的一些常见问题

Windows 2000 的加密文件系统白皮书

WMI 脚本入门

深入挖掘Windows脚本技术

Creating a WMI Application Using C++

Windows自动化管理的实现