文档库 最新最全的文档下载
当前位置:文档库 › BitLocker 驱动器加密操作指南使用 AD DS 恢复加密卷

BitLocker 驱动器加密操作指南使用 AD DS 恢复加密卷

BitLocker 驱动器加密操作指南:使用 AD DS 恢复加密卷

应用到: Windows Server 2008, Windows Vista ,Windows 7

本文档介绍了组织如何使用保存在 Active Directory 域服务 (AD DS) 中的 BitLocker 恢复信息来访问 BitLocker 加密的数据。我们建议您在计划 BitLocker 部署时为 BitLocker 创建完全恢复模式。

本文档介绍了哪些内容?
本文中包含您在计划 Windows Vista? Enterprise、Windows Vista? Ultimate 和 Windows Server? 2008 的 BitLocker 恢复过程时可以使用的详细信息。

要正确了解和应用本文,您应该知道如何将 AD DS 设置为自动备份 BitLocker 恢复信息,以及保存到 AD DS 的恢复信息类型。

本文档包含下列主题:

什么是 BitLocker 恢复?


测试恢复


计划恢复过程


使用其他恢复信息


附录 A:委派权限


附录 B:重置恢复密码


附录 C:检索 BitLocker 密钥数据包


附录 D:保存 TPM 信息


本文档没有介绍哪些内容?
本文没有详细介绍如何配置 AD DS 以存储 BitLocker 恢复信息,但着重说明了您的组织可以计划恢复过程的方法。您还可以通过使用 Windows 恢复环境 (Windows RE) 并在启动过程中输入恢复密码来恢复启用 BitLocker 的卷。

有关如何在 AD DS 中存储恢复信息的详细信息,请参阅“配置 Active Directory 以备份 Windows BitLocker 驱动器加密和受信任的平台模块恢复信息”(https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=82827)。

什么是 BitLocker 恢复?
在所有恢复方案中,AD DS 中存储的恢复密码可以解除对驱动器的访问锁定。无论使用的是什么身份验证方法,这个存储的密码都可以恢复 BitLocker。

什么原因会导致 BitLocker 恢复?
会导致 BitLocker 恢复的一些原因包括:

攻击者修改了您的计算机。使用受信任的平台模块 (TPM) 的计算机可能出现这种情况,因为 TPM 会在启动过程中检查启动组件的完整性。


将 BitLocker 保护的驱动器移动到新的计算机上。


升级到具有新的 TPM 的新主板。


关闭、禁用或清除 TPM。


升级关键的早期启动组件,从而导致 TPM 不能通过验证。


在启用 PIN 身份验证时,忘记 PIN。


在启用启动密钥身份验证时,丢失包含有启动密钥的可插入 USB 闪存驱动器。


备注
在开始恢复之前,我们建议您先确定导致恢复的原因。这样做可以防止以后再次发生这种问题。例如,如果您确定有攻击者通过获取物理访问权限修改了您的计算机,您可以创建新的安全策略以跟踪谁具有物理存在。如果攻击者修改了您的计算机,并且您在启动恢复之前没有解决该问题,则可能会发现,由于受到攻击您必须在启用 BitLocker 的卷上不断执行恢复。



对于已计划的

方案(如已知的硬件升级),您可以通过临时禁用 BitLocker 保护来避免启动恢复。由于禁用 BitLocker 会使该驱动器完全加密,因此管理员会在已计划的任务完成之后迅速重新启用 BitLocker 保护。要临时禁用 BitLocker,请使用控制面板、命令行工具或可以调用相应 Windows Management Instrumentation (WMI) 接口方法的部署脚本。

对于恢复的描述都是在未计划或不希望发生的行为的上下文中进行,但是您也可以使恢复成为预期的生产方案,以管理访问控制。例如,您在为企业的其他部门或员工部署台式计算机和便携式计算机时,可以在将计算机交给新用户之前强制进行 BitLocker 恢复。

测试恢复
在创建完全 BitLocker 恢复过程之前,我们建议您测试恢复过程是如何用于最终用户(需要联系支持人员以获取恢复密码的用户)以及管理员(帮助最终用户获取恢复密码的用户)的。

使用下表确定在组织中测试恢复的最佳方式。身份验证方法列显示了 BitLocker 身份验证方法。选择与已在测试环境中实现的身份验证方法相对应的身份验证方法。


身份验证方法 启动恢复的方法
TPM + PIN
启动时保留 PIN。


删除与 PIN 相关联的密钥保护程序。



TPM + 启动密钥
启动时保留启动密钥。


删除与启动密钥相关联的密钥保护程序。



启动密钥
启动时保留启动密钥。


删除与启动密钥相关联的密钥保护程序。



所有基于 TPM 的身份验证方法
删除与 TPM 相关联的密钥保护程序。


关闭 TPM。




启动时保留 PIN
在计算机启动时不输入 PIN,或输入错误的 PIN 可以启动恢复。如果不输入 PIN,Windows 以前的恢复控制台会显示输入恢复密码的屏幕。

启动时保留启动密钥
在计算机启动时不插入包含有启动密钥的 USB 闪存驱动器可以启动恢复。如果不提供启动密钥,Windows 以前的恢复控制台会显示输入恢复密码的屏幕。

删除与 TPM 相关联的密钥保护程序
如果没有基于 TPM 的密钥保护程序,用户只能使用恢复密码或恢复密钥才可以解除对驱动器的锁定。

强制对本地计算机进行恢复的步骤
1.单击「开始」按钮,在“开始搜索”框中键入 cmd,右键单击 cmd.exe,然后单击“以管理员身份运行”。

2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。

3.在命令提示符下,键入以下命令,然后按 Enter:

cscript manage-bde.wsf -forcerecovery

备注
代表使用 BitLocker 保护的卷。



强制对远程计算机进行恢复的步骤
1.单击「开始」按钮,在“开始搜索”框中键入 cmd,右键单击 cmd.exe,然后单击“以管

理员身份运行”。

2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。

3.在命令提示符下,键入以下命令,然后按 Enter:

cscript manage-bde.wsf -ComputerName -forcerecovery

备注
代表远程计算机的名称。 代表该远程计算机上使用 BitLocker 保护的卷。



关闭 TPM
可以使用 TPM 管理 Microsoft 管理控制台 (MMC) 管理单元来关闭 TPM。

要关闭 TPM,请使用“TPM 管理”管理单元
1.单击「开始」按钮,在“开始搜索”框中键入 tpm.msc,然后单击 tpm.msc。

2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。

3.在控制台树中,选择 TPM。

4.在“操作”窗格中,单击“关闭 TPM”,然后在向导中键入 TPM 所有者密码。

您也可以使用 TPM WMI 接口写一个脚本来自动检索存储的 TPM 所有者密码哈希值,然后使用该哈希值在本地或远程关闭 TPM。

计划恢复过程
计划 BitLocker 恢复过程时,先请查阅您的组织恢复敏感信息的当前最佳做法。例如:企业如何处理丢失的 Windows 密码?您的组织如何执行智能卡 PIN 重置?使用这些最佳做法和相关资源(人力和工具)帮助制定 BitLocker 恢复模式。

启动 BitLocker 恢复后,用户可以使用恢复密码来解除对加密数据的访问锁定。您必须同时为您的组织考虑自动恢复和恢复密码检索方法。

确定恢复过程后,您应该:

熟悉可以检索恢复密码的方式。请参阅:


自动恢复


恢复密码检索


确定恢复后的一系列步骤,包括分析恢复发生的原因以及重置恢复密码。请参阅:


恢复后分析


自动恢复
在某些情况下,用户可能在打印结果或 USB 闪存驱动器中具有恢复密码,并且可以执行自动恢复。我们建议您的组织为自动恢复创建策略。例如,您可能希望用户在执行自动恢复前后联系支持人员以识别根本原因。

恢复密码检索
如果用户在打印结果或 USB 闪存驱动器中没有恢复密码,则该用户需要联系支持人员。

备注
您在计划恢复密码检索过程时,必须考虑到整个支持过程可能是通过电话进行的。



通过 Active Directory 用户和计算机工具的 BitLocker 恢复密码查看器,域管理员可以查看 Active Directory 中特定计算机对象的 BitLocker 恢复密码。由于 Windows Vista 中还没有提供 Active Directory 用户和计算机管理单元,因此查看器工具必须安装在 Windows Server 2003 或 Windows XP 计算机上。有关如何获取该工具及其使用方法的信息,请参阅 Microsoft 知识库文章 (https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=93476)。

可以将下表

用作创建自己的恢复过程(用于恢复密码检索)的模板。示例过程使用的是 Active Directory 用户和计算机工具的 BitLocker 恢复密码查看器。

记录用户的计算机名称


确认用户的身份


找到 AD DS 中的恢复密码


收集信息以确定恢复发生的原因


向用户提供恢复密码


记录用户的计算机名称
您可以使用用户的计算机名称来找到 AD DS 中的恢复密码。如果用户不知道计算机名称,请让用户阅读“BitLocker 驱动器加密密码项”用户界面中驱动器标签的第一个词。该词是启用 BitLocker 时该计算机的名称,应该也就是该计算机当前的名称。

确认用户的身份
您应该确认寻求恢复密码的人是否就是该计算机真正的授权用户。另一种方法就是确认该用户提供的计算机名称是否属于该用户。

找到 AD DS 中的恢复密码
找到与 AD DS 中的名称相符合的计算机对象。由于计算机对象的名称都列于 AD DS 的全局编录中,因此即使您有多域林也应该可以找到该对象。

多个恢复密码
如果有多个恢复密码存储在 AD DS 的一个计算机对象下,则 BitLocker 恢复信息对象的名称包含创建该密码的日期。

如果您不确定要提供哪一个密码,或如果您担心提供的是错误的密码,请让用户读取显示在恢复控制台中的密码 ID。不需要用户读取全部 ID 即可将范围缩小到该计算机的某个密码。前八个字符或后六个字符已足够进行确认。

由于密码 ID 是唯一一个与存储在 AD DS 中的每一个恢复密码有关联的值,因此使用此 ID 运行查询会找到正确的密码来解除对加密卷的锁定。

收集信息以确定恢复发生的原因
向用户提供恢复密码前,您应该收集可以帮助确定需要进行恢复的原因的所有信息,以在恢复后分析过程中分析其根本原因。有关恢复后分析的详细信息,请参阅恢复后分析。

向用户提供恢复密码
因为恢复密码是 48 位数,我们建议您让用户记下该密码或将密码输入其他计算机。一旦启动恢复,用户在每次计算机启动时都会遇到 BitLocker 恢复控制台。(例外情况:用户在联系支持人员后立即找到或记住了启动密钥或 PIN。)为了避免在可以执行恢复后分析之前用户反复联系支持人员,支持人员可以提醒用户记下恢复密码并将其保存在安全的地方(如,放在钱包中)。恢复后分析过程中,管理员可以刷新驱动器的 BitLocker 保护以避免在每次启动时进行恢复。有关恢复后分析的详细信息,请参阅恢复后分析。

备注
由于 48 位数的恢复密码很长,且包含数字的组合,因此用户可能会听错或输错密码。启动时间恢复控制台将使用内置的校验和数字,以 48 位恢复密码

的每 6 位为单位检测输入错误,并提供机会让用户改正此类错误。



恢复后分析
BitLocker 将使用恢复密码访问卷与使用非恢复方法(如 TPM)访问卷视为同一种方式。解除卷锁定意味着加密密钥已经发布,并且已准备好在将数据写入卷时进行实时加密,并且在从卷中读取数据时也进行实时加密。一旦将卷解除锁定,BitLocker 将进行同样的操作,无论访问权限是如何授予的。

如果用户关闭了计算机或使其进入休眠状态,BitLocker 将重新锁定加密卷并强制计算机再次进行恢复。因此,用户应该将恢复密码放在手边,直到管理员可以执行恢复后分析来确定恢复的根本原因并刷新 BitLocker 保护为止,这样用户就不再需要在每次计算机启动时都输入恢复密码。请参阅:

1.确定恢复的根本原因


2.刷新 BitLocker 保护


确定恢复的根本原因
如果用户需要恢复驱动器,请尽快确定导致该恢复的根本原因,这是非常重要的。正确分析计算机的状态并检测篡改可能会暴露出对企业的安全性具有更大隐患的威胁。

尽管在某些情况下管理员可以远程调查恢复的原因,但最终用户还可能需要将包含已恢复驱动器的计算机带入现场,以进一步分析根本原因。

为您的组织查看和回答下列问题:

1.哪一种 BitLocker 保护模式有效(TPM、TPM + PIN、TPM + 启动密钥,还是只有启动密钥)?


2.用户只是忘记了 PIN 或丢失了启动密钥吗?如果令牌已丢失,那么令牌可能会丢失在哪里?


3.如果 TPM 模式有效,恢复是不是由启动文件更改引起的?


4.如果恢复是由启动文件更改引起的,那么这是因为用户的有意操作(如 BIOS 升级)还是因为恶意软件?


5.用户上次能够成功启动计算机是什么时间,以及此后计算机可能出现的问题有哪些?


6.上次成功启动后用户可能遇到恶意软件,还是使计算机保持着无人参与的状态?


要帮助您回答这些问题,请使用 BitLocker 命令行工具查看当前配置和保护模式(例如,manage-bde -status)。扫描事件日志可以找到有助于表明为什么恢复会启动的事件(如,是否发生启动文件更改)。这些功能都可以通过远程执行。

解决根本原因
一旦识别出导致恢复的原因,您就可以重置 BitLocker 保护并避免在每次启动时进行恢复。

恢复的根本原因不同,相应重置的详细步骤也会不同。如果您无法确定根本原因,或者恶意软件或 rootkit 可能已感染计算机,则支持人员应该应用最佳做法病毒策略进行合理应对。

备注
通过解密卷然后重新启用 BitLocker,可以始终执行 BitLocker 重置。您还可以重新安装操作系统,然后重新启用 BitLocker。




未知 PIN


丢失启动密钥


更改为启动文件且原因已知


更改为启动文件且原因不明


无效的 TPM 设置且原因已知


无效的 TPM 设置且原因不明


无效的系统状态


未知 PIN
如果用户忘记了 PIN,则您在登录到计算机时必须重置 PIN 以防止 BitLocker 在每次计算机重新启动时启动恢复。

防止由于未知 PIN 而导致不断恢复的步骤
1.以管理员身份登录。

2.重置 PIN:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在“BitLocker 控制面板”项中,单击“管理 BitLocker 密钥”,然后单击“重置 PIN”。


3.自定义并运行附录 B:重置恢复密码中的脚本,以重置恢复密码。

4.复制恢复密码:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在“BitLocker 控制面板”项中,单击“管理 BitLocker 密钥”,然后单击“复制恢复密码”。


丢失启动密钥
如果已丢失包含启动密钥的 USB 闪存驱动器,则必须关闭 BitLocker 然后再打开以防止 BitLocker 在每次重新启动计算机时输入恢复。

防止由于丢失启动密钥而导致不断恢复的步骤
1.以管理员身份登录到已丢失启动密钥的计算机。

2.关闭 BitLocker 并解密所有驱动器:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“关闭 BitLocker”。


5.在“BitLocker 驱动器加密”对话框中,单击“解密所有驱动”。


3.打开 BitLocker 并重新加密所有驱动器:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“启用 BitLocker”。


5.在“BitLocker 驱动器加密”对话框中,创建新的启动密钥和恢复密码。


此外,管理员可以使用 BitLocker 命令行工具 manage-bde 删除原来的启动密钥并添加新的启动密钥。

更改为启动文件且

原因已知
如果您有意更新了系统 BIOS,则可能会发生此错误。必须执行多个步骤才能确保 BitLocker 在每次启动计算机时不会继续进入恢复模式。

防止由于更新的系统 BIOS 而导致不断恢复的步骤
1.以管理员身份登录到已忘记 PIN 的计算机。

2.关闭 BitLocker 但不解密驱动器:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“关闭 BitLocker”。


5.在“BitLocker 驱动器加密”对话框中,单击“禁用 BitLocker”。


3.启用 BitLocker:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“启用 BitLocker”。


5.在“BitLocker 驱动器加密”对话框中,创建新的启动密钥和恢复密码。


4.自定义并运行附录 B:重置恢复密码中的脚本,以重置恢复密码。

5.复制恢复密码:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“管理 BitLocker 密钥”。


5.在“BitLocker 驱动器加密”对话框中,单击“复制恢复密码”。


更改为启动文件且原因不明
如果恶意软件修改了系统启动文件,则可能出现此错误。必须执行多个步骤才能确保 BitLocker 在每次启动计算机时不会继续进入恢复模式。

防止由于未知原因更改启动文件而导致不断恢复的步骤
1.以管理员身份登录到计算机。

2.将计算机上的所有重要数据备份到计算机外的位置(如共享文件夹)。

3.重新安装 Windows Vista。

4.启用 BitLocker:

1.以管理员身份登录到计算机。


2.单击「开始」,然后单击“控制面板”。


3.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


4.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


5.在 BitLocker 控制面板项中,单击“启用 BitLocker”。


6.在“BitLocker 驱动器加密”对话框中,创建新的启动密钥和恢复密码。


5.调查此问题是否已经解决。如果预操作系统恶意

软件已经安装在计算机上,则必须发给用户一台新计算机。

无效的 TPM 设置且原因已知
如果您禁用了 TPM,可能会发生此类错误。必须执行多个步骤才能确保 BitLocker 在每次启动计算机时不会继续进入恢复模式。

防止由于已知原因造成 TPM 设置无效而进行恢复的步骤
1.撤消对 TPM 的设置更改。

1.单击「开始」按钮,在“开始搜索”框中键入 tpm,然后单击 tpm.msc。


2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


3.在“操作”窗格中,单击可以撤销导致了该错误的 TPM 设置的项。

例如,如果您已经禁用了 TPM,则应该单击“启用 TPM”以重新启用 TPM。


2.自定义并运行附录 B:重置恢复密码中的脚本,以重置恢复密码。

3.复制恢复密码:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“管理 BitLocker 密钥”。


5.在“BitLocker 驱动器加密”对话框中,单击“复制恢复密码”。


无效的 TPM 设置且原因不明
如果恶意软件禁用了 TPM,则可能出现此类错误。必须执行多个步骤才能确保 BitLocker 在每次启动计算机时不会继续进入恢复模式。

防止由于未知原因造成 TPM 设置无效而进行恢复的步骤
1.关闭 BitLocker 但不解密驱动器:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“关闭 BitLocker”。


5.在“BitLocker 驱动器加密”对话框中,单击“禁用 BitLocker”。


2.清除 TPM:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在左窗格的“另请参阅”下,单击“TPM 管理”。


5.在“操作”窗格中,单击“清除 TPM”。


3.初始化 TPM:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在左窗格的“另

请参阅”下,单击“TPM 管理”。将显示 TPM 管理控制台。


5.在“操作”窗格中,单击“初始化 TPM”。启动 TPM 初始化向导。


备注
如果 TPM 从未打开过,或当前处于关闭状态,则 TPM 初始化向导将显示“打开 TPM 安全硬件”页面。请阅读此页上的说明,然后转到此过程的步骤 6。如果已打开 TPM,则 TPM 初始化向导会显示“创建 TPM 所有者密码”页面。继续到下一步骤以设置 TPM 的所有权。如果 TPM 初始化向导检测到 BIOS 不符合 Windows Vista 的要求,则无法继续使用此向导,您将收到警报,提示您查阅计算机制造商文档,以获取有关初始化 TPM 的说明。



6.重新启动计算机并按照 BIOS 屏幕提示进行操作。


7.计算机重新启动后,但在登录 Windows 之前,系统会提示您接受 TPM 重新配置。这样可以确保用户是亲自操作,而不是恶意软件试图初始化 TPM。


备注
BIOS 屏幕提示和措辞因计算机制造商而异。



8.登录到 Windows 后,右键单击通知区域中的 Windows Defender 图标,指向“运行被阻止的程序”,然后单击“TPM 初始化向导”。


9.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.设置 TPM 的所有权:

备注
还必须先设置 TPM 的所有权才能将其用于保护计算机的安全。通过设置 TPM 的所有权,您可以分配一个密码,以确保只有授权的 TPM 所有者可以访问和管理 TPM。如果您不想再继续使用 TPM,TPM 密码还可以用于关闭 TPM;如果将回收计算机,TPM 密码也可以用于清除 TPM。以下过程可以引导您了解使用 TPM 初始化向导设置 TPM 所有权的过程。



1.在“创建 TPM 所有者密码”页面上,单击“自动创建密码(推荐)”。


2.在“保存 TPM 所有者密码”对话框中,单击“保存密码”。


3.在“另存为”对话框中,选择保存密码的位置,然后单击“保存”。密码文件将另存为 .tpm。


重要事项
强烈建议将 TPM 所有者密码保存到可移动介质上。



4.如果要打印一份密码的硬拷贝,请单击“打印密码”。


重要事项
强烈建议打印一份 TPM 所有者密码的硬拷贝,并将其存放在一个安全的地方。



5.单击“初始化”。初始化 TPM 的过程可能需要几分钟才能完成。


6.单击“关闭”。


注意
请勿丢失密码。如果丢失了密码,您将无法更改 TPM,因为这需要所有者的密码,除非您清除了 TPM。



5.启用 BitLocker:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”

对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“启用 BitLocker”。


6.自定义并运行附录 B:重置恢复密码中的脚本,以重置恢复密码。

7.复制恢复密码:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“管理 BitLocker 密钥”。


5.在“BitLocker 驱动器加密”对话框中,单击“复制恢复密码”。


无效的系统状态
必须执行多个步骤才能确保 BitLocker 在每次启动计算机时不会继续进入恢复模式。

防止由于无效的系统状态而导致恢复的步骤
1.检查恢复控制台中的错误消息,如果可以,请执行此处详细列出的步骤。

2.自定义并运行附录 B:重置恢复密码中的脚本,以重置恢复密码。

3.复制恢复密码:

1.单击「开始」按钮,然后单击“控制面板”。


2.在“控制面板”中,单击“安全”,然后单击“Bitlocker 驱动器加密”。


3.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


4.在 BitLocker 控制面板项中,单击“管理 BitLocker 密钥”。


5.在“BitLocker 驱动器加密”对话框中,单击“复制恢复密码”。


使用其他恢复信息
除了 48 位 BitLocker 恢复密码,其他类型的恢复信息也存储在 Active Directory 中。本部分介绍可以如何使用这些其他信息。

BitLocker 密钥数据包
如果恢复方式(曾在本文的前面部分讨论)没有解除卷的锁定,可以使用 BitLocker 修复工具以块级解密卷。该工具使用 BitLocker 密钥数据包帮助从严重损坏的驱动器恢复加密数据。即使正确的恢复密码已经无法对损坏的卷解除锁定,您仍然可以使用此恢复的数据挽救加密的数据。建议您仍然保存恢复密码。在没有相应恢复密码的情况下无法使用密钥数据包。

必须通过 BitLocker 修复工具来使用 BitLocker 密钥数据包。有关如何获取和使用 BitLocker 修复工具的详细信息,请参阅 Microsoft 知识库中的文章 928201 (https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=91736)。

BitLocker 密钥数据包与恢复密码保存在同一 AD DS 位置。也可以从工作卷导出密钥数据包。有关如何导出密钥数据包的详细信息,请参阅附录 C:检索 BitLocker 密钥数据包。

TPM 信息
可以将 TPM 所有者密码保存在 AD DS 中。但是,与 BitLocker 恢复密码不同,每台计算机只能保存一则 TPM 信息。存储的 TPM 信息也称为 TPM 所有者授

权,因为它使管理员可以执行需要 TPM 所有者批准的操作。例如,管理员可以使用 TPM 所有者授权来清除位于远程网路且已解除授权的计算机组中的 TPM。没有保存的 TPM 信息是不可能执行此类操作的。

有关 TPM 管理方案的详细信息,请参阅“Windows 受信任的平台模块管理循序渐进指南”(https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=82830)(可能为英文网页)。

有关编写用于 TPM 的脚本的详细信息,包括需要 TPM 所有者授权的受支持方法列表,请参阅 TPM WMI 提供商文档 (https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=91734)(可能为英文网页)。

有关如何保存 TPM 信息的详细信息,请参阅附录 D:保存 TPM 信息。

附录 A:委派权限
使用组策略设置访问控制的组织可能希望委派权限给不是域管理员的用户(如“支持人员”支持工作人员的成员)。

域管理员可以向用户委派阅读 BitLocker 恢复密码的权限(通常用户没有此权限),或者向用户委派阅读已存储的 TPM 所有者信息的权限。

本部分通过三个步骤介绍如何委派权限:

1.新建用户组。


2.将成员添加到组(例如,“支持人员”工作人员的成员)。


3.向组分配控制访问和读取属性权限。


要新建用户组并将成员添加到组,请参阅“管理组”(https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=91737)(可能为英文网页)。

例如,在提升的命令提示符下键入以下命令可以在 https://www.wendangku.net/doc/6317092556.html, 域内创建名为 BitLocker Recoverer 的全局安全组。

dsadd group "cn=BitLocker Recoverers,cn=Users,dc=test,dc=contoso,dc=com" -desc "Users with access to BitLocker recovery passwords stored in Computer objects." -secgrp yes -scope g

可以以域管理员的身份运行脚本以向组分配控制访问和读取属性权限。有关如何使用脚本来管理 Active Directory 安全的详细信息,请参阅“使用脚本管理 Active Directory 安全”(https://www.wendangku.net/doc/6317092556.html,/fwlink/?LinkId=79652)(可能为英文网页)。

通过以下示例脚本,BitLocker Recoverer 用户组可以读取当前域的 BitLocker 恢复密码。

运行以下示例脚本的步骤
1.将每个示例脚本都保存在 VBScript 文件中。如:DelegateBitLocker.vbs。

2.打开提升的命令提示符窗口:

1.单击「开始」按钮,键入 cmd,右键单击 cmd.exe,然后单击“以管理员身份运行”。


2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


3.在命令提示符下,键入与下列内容类似的命令:

cscript DelegateBitLocker.vbs

如果您创建了使用其他名称的用户组,或需要参考其他域的用户组,请更改以下示例脚本的第一行。如,将“BitLocker Recoverers”更改为“DOMAIN\Help Desk Staff”。

'To re

fer to other groups, change the group name (ex: change to "DOMAIN\Help Desk Staff")
strGroupName = "BitLocker Recoverers"

' --------------------------------------------------------------------------------
' Access Control Entry (ACE) constants
' --------------------------------------------------------------------------------

'- From the ADS_ACETYPE_ENUM enumeration
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5 'Allows an object to do something

'- From the ADS_ACEFLAG_ENUM enumeration
Const ADS_ACEFLAG_INHERIT_ACE = &H2 'ACE applies to target and inherited child objects
Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8 'ACE does NOT apply to target (parent) object

'- From the ADS_RIGHTS_ENUM enumeration
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100 'The right to view confidential attributes
Const ADS_RIGHT_DS_READ_PROP = &H10 ' The right to read attribute values

'- From the ADS_FLAGTYPE_ENUM enumeration
Const ADS_FLAG_OBJECT_TYPE_PRESENT = &H1 'Target object type is present in the ACE
Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2 'Target inherited object type is present in the ACE

' --------------------------------------------------------------------------------
' BitLocker schema object GUID's
' --------------------------------------------------------------------------------

'- ms-FVE-RecoveryInformation object:
' includes the BitLocker recovery password and key package attributes
SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION = "{EA715D30-8F53-40D0-BD1E-6109186D782C}"

'- ms-FVE-RecoveryPassword attribute: 48-digit numerical password
SCHEMA_GUID_MS_FVE_RECOVERYPASSWORD = "{43061AC1-C8AD-4CCC-B785-2BFAC20FC60A}"

'- ms-FVE-KeyPackage attribute: binary package for repairing damages
SCHEMA_GUID_MS_FVE_KEYPACKAGE = "{1FD55EA8-88A7-47DC-8129-0DAA97186A54}"

'- Computer object
SCHEMA_GUID_COMPUTER = "{BF967A86-0DE6-11D0-A285-00AA003049E2}"

'Reference: "Platform SDK: Active Directory Schema"

' --------------------------------------------------------------------------------
' Set up the ACE to allow reading of all BitLocker recovery information properties
' --------------------------------------------------------------------------------

Set objAce1 = createObject("AccessControlEntry")

objAce1.AceFlags = ADS_ACEFLAG_INHERIT_ACE + ADS_ACEFLAG_INHERIT_ONLY_ACE
objAce1.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objAce1.Flags = ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT

objAce1.Trustee = strGroupName
objAce1.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS + ADS_RIGHT_DS_READ_PROP
objAce1.InheritedObjectType = SCHEMA_GUID_MS_FVE_RECOVERYINFORMATION

' Note: ObjectType is left blank above to allow reading of all properties

' --------------------------------------------------------------------------------
' Connect to Discretional ACL (DACL) for domain object
' --------------------------------------------------------------------------------


Set objRootLDAP = GetObject("LDAP://rootDSE")
strPathToDomain = "LDAP://" & objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com

Set objDomain = GetObject(strPathToDomain)

WScript.Echo "Accessing object: " + objDomain.Get("distinguishedName")

Set objDescriptor = objDomain.Get("ntSecurityDescriptor")
Set objDacl = objDescriptor.DiscretionaryAcl

' --------------------------------------------------------------------------------
' Add the ACEs to the Discretionary ACL (DACL) and set the DACL
' --------------------------------------------------------------------------------

objDacl.AddAce objAce1

objDescriptor.DiscretionaryAcl = objDacl
objDomain.Put "ntSecurityDescriptor", Array(objDescriptor)
objDomain.SetInfo

WScript.Echo "SUCCESS!"
要分离读取 BitLocker 和 TPM 恢复信息的权限,请创建可以访问 TPM 所有者信息的其他用户组。请注意,需要访问 BitLocker 恢复密码的支持人员通常不需要访问 TPM 所有者信息。

通过以下示例脚本,TPM 所有者用户组可以读取当前域的 TPM 所有者信息:

'To refer to other groups, change the group name (ex: change to "DOMAIN\TPM Owners")
strGroupName = "TPM Owners"

' --------------------------------------------------------------------------------
' Access Control Entry (ACE) constants
' --------------------------------------------------------------------------------

'- From the ADS_ACETYPE_ENUM enumeration
Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT = &H5 'Allows an object to do something

'- From the ADS_ACEFLAG_ENUM enumeration
Const ADS_ACEFLAG_INHERIT_ACE = &H2 'ACE applies to target and inherited child objects
Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8 'ACE does NOT apply to target (parent) object

'- From the ADS_RIGHTS_ENUM enumeration
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100 'The right to view confidential attributes
Const ADS_RIGHT_DS_READ_PROP = &H10 ' The right to read attribute values

'- From the ADS_FLAGTYPE_ENUM enumeration
Const ADS_FLAG_OBJECT_TYPE_PRESENT = &H1 'Target object type is present in the ACE
Const ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT = &H2 'Target inherited object type is present in the ACE

' --------------------------------------------------------------------------------
' TPM and FVE schema object GUID's
' --------------------------------------------------------------------------------

'- ms-TPM-OwnerInformation attribute: SHA-1 hash of the TPM owner password
SCHEMA_GUID_MS_TPM_OWNERINFORMATION = "{AA4E1A6D-550D-4E05-8C35-4AFCB917A9FE}"

'- Computer object
SCHEMA_GUID_COMPUTER = "{BF967A86-0DE6-11D0-A285-00AA003049E2}"

'Reference: "Platform SDK: Active Directory Schema"


' --------------------------------------------------------------------------------
' Set up the ACE to allow reading of TPM owner information
' ----------------------------------------

----------------------------------------

Set objAce1 = createObject("AccessControlEntry")

objAce1.AceFlags = ADS_ACEFLAG_INHERIT_ACE + ADS_ACEFLAG_INHERIT_ONLY_ACE
objAce1.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
objAce1.Flags = ADS_FLAG_OBJECT_TYPE_PRESENT + ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT

objAce1.Trustee = strGroupName
objAce1.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS + ADS_RIGHT_DS_READ_PROP
objAce1.ObjectType = SCHEMA_GUID_MS_TPM_OWNERINFORMATION
objAce1.InheritedObjectType = SCHEMA_GUID_COMPUTER


' --------------------------------------------------------------------------------
' Connect to Discretional ACL (DACL) for domain object
' --------------------------------------------------------------------------------

Set objRootLDAP = GetObject("LDAP://rootDSE")
strPathToDomain = "LDAP://" & objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com

Set objDomain = GetObject(strPathToDomain)

WScript.Echo "Accessing object: " + objDomain.Get("distinguishedName")

Set objDescriptor = objDomain.Get("ntSecurityDescriptor")
Set objDacl = objDescriptor.DiscretionaryAcl


' --------------------------------------------------------------------------------
' Add the ACEs to the Discretionary ACL (DACL) and set the DACL
' --------------------------------------------------------------------------------

objDacl.AddAce objAce1

objDescriptor.DiscretionaryAcl = objDacl
objDomain.Put "ntSecurityDescriptor", Array(objDescriptor)
objDomain.SetInfo

WScript.Echo "SUCCESS!"
附录 B:重置恢复密码
应该在提供和使用恢复密码后使其无效。重置恢复密码是解决恢复出现的根本原因的一部分。

可以使用以下两种方式重置恢复密码:

在卷中关闭 BitLocker(解密)然后打开(重新加密)BitLocker。解密完成后将删除原来的恢复密码。BitLocker 设置过程将创建一个新恢复密码并提示用户保存该密码。


运行脚本。可以运行脚本以重置密码而不需要解密卷。以下示例脚本说明了此功能。此示例脚本创建了新的恢复密码并使其他所有密码无效。


运行示例恢复密码脚本的步骤
1.将下列示例脚本保存到 VBScript 文件中。例如:ResetPassword.vbs。

2.打开提升的命令提示符窗口:

1.单击「开始」按钮,键入 cmd,右键单击 cmd.exe,然后单击“以管理员身份运行”。


2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


3.在命令提示符下,键入与下列内容类似的命令:

cscript ResetPassword.vbs

重要事项
此示例脚本配置为仅用于 C 卷。必须自定义脚本以使其与要测试密码重置的卷相匹配。



备注
要管理远程计算机,您可以指定该远程计算机的名称,而不是本地计算机的名称。



可以使用以下示例脚本创建一

个 VBScript 文件来重置恢复密码。

' Target drive letter
strDriveLetter = "c:"

' Target computer name
' Use "." to connect to the local computer
strComputerName = "."


' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------

strConnectionStr = "winmgmts:" _
& "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
& strComputerName _
& "\root\cimv2\Security\MicrosoftVolumeEncryption"


On Error Resume Next 'handle permission errors

Set objWMIService = GetObject(strConnectionStr)


If Err.Number <> 0 Then
WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
Wscript.Echo "Ensure that you are running with administrative privileges."
WScript.Quit -1
End If

On Error GoTo 0

strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)


If colTargetVolumes.Count = 0 Then
WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " & strDriveLetter & " on computer " & strComputerName & "."
WScript.Quit -1
End If


' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
set objVolume = objFoundVolume
Next


' objVolume is now our found BitLocker-capable disk volume


' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------


' Add a new recovery password, keeping the ID around so it doesn't get deleted later
' ----------------------------------------------------------------------------------

nRC = objVolume.ProtectKeyWithNumericalPassword("Recovery Password Refreshed By Script", , sNewKeyProtectorID)

If nRC <> 0 Then
WScript.Echo "FAILURE: ProtectKeyWithNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' Removes the other, "stale", recovery passwords
' ----------------------------------------------------------------------------------

nKeyProtectorTypeIn = 3 ' type associated with "Numerical Password" protector

nRC = objVolume.GetKeyProtectors(nKeyProtectorTypeIn, aKeyProtectorIDs)

If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' Delete those key protectors other than the one we just added.

For Each sKeyProtectorID In aKeyProtectorIDs

If sKeyProtectorID <> sNewKeyProtectorID Then
nRC = objVolume.DeleteKeyProtector(sKeyProtectorID)

If nRC <> 0 Then
WScript.Echo "FAILURE: DeleteKeyProtector on ID " & sKeyProtectorID & " failed with return code 0x" & Hex(n

RC)
WScript.Quit -1
Else
' no output
'WScript.Echo "SUCCESS: Key protector with ID " & sKeyProtectorID & " deleted"
End If
End If

Next

WScript.Echo "A new recovery password has been added. Old passwords have been removed."

' - some advanced output (hidden)
'WScript.Echo ""
'WScript.Echo "Type ""manage-bde -protectors -get " & strDriveLetter & " -type recoverypassword"" to view existing passwords."
附录 C:检索 BitLocker 密钥数据包
可以使用两种方法检索密钥数据包,如使用其他恢复信息中所述:

从 AD DS 导出以前保存的密钥数据包。必须具有对存储在 AD DS 中的 BitLocker 恢复密码的读取权限。


从未锁定的 BitLocker 加密卷导出新的密钥数据包。必须在出现任何损坏前拥有对工作卷的本地管理员访问权限。


以下示例脚本从 AD DS 导出所有以前保存的密钥数据包。

运行示例密钥数据包检索脚本的步骤
1.将下列示例脚本保存到 VBScript 文件中。例如:GetBitLockerKeyPackageADDS.vbs。

2.打开提升的命令提示符窗口:

1.单击「开始」按钮,键入 cmd,右键单击 cmd.exe,然后单击“以管理员身份运行”。


2.如果出现“用户帐户控制”对话框,请确认所显示的是您要执行的操作,然后单击“继续”。


3.在命令提示符下,键入与下列内容类似的命令:

cscript GetBitLockerKeyPackageADDS.vbs -?

可以使用以下示例脚本创建 VBScript 文件以从 AD DS 检索 BitLocker 密钥数据包。

' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------

Sub ShowUsage
Wscript.Echo "USAGE: GetBitLockerKeyPackageAD [Path To Saved Key Package] [Optional Computer Name]"
Wscript.Echo "If no computer name is specified, the local computer is assumed."
Wscript.Echo
Wscript.Echo "Example: GetBitLockerKeyPackageAD E:\bitlocker-ad-key-package mycomputer"
WScript.Quit
End Sub

' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------

Set args = WScript.Arguments

Select Case args.Count
Case 1
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strFilePath = args(0)
' Get the name of the local computer
Set objNetwork = CreateObject("https://www.wendangku.net/doc/6317092556.html,work")
strComputerName = https://www.wendangku.net/doc/6317092556.html,puterName
End If

Case 2
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strFilePath = args(0)
strComputerName = args(1)
End If
Case Else
ShowUsage

End Select



' --------------------------------------------------------------------------------
' Get path to Active Directory computer object associated with the comp

uter name
' --------------------------------------------------------------------------------

Function GetStrPathToComputer(strComputerName)

' Uses the global catalog to find the computer in the forest
' Search also includes deleted computers in the tombstone

Set objRootLDAP = GetObject("LDAP://rootDSE")
namingContext = objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com

strBase = ""

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("https://www.wendangku.net/doc/6317092556.html,mand")
objConnection.Provider = "ADsDSOOBject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

strFilter = "(&(objectCategory=Computer)(cn=" & strComputerName & "))"
strQuery = strBase & ";" & strFilter & ";distinguishedName;subtree"

https://www.wendangku.net/doc/6317092556.html,mandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 100
objCommand.Properties("Cache Results") = False

' Enumerate all objects found.

Set objRecordSet = objCommand.Execute
If objRecordSet.EOF Then
WScript.echo "The computer name '" & strComputerName & "' cannot be found."
WScript.Quit 1
End If

' Found object matching name

Do Until objRecordSet.EOF
dnFound = objRecordSet.Fields("distinguishedName")
GetStrPathToComputer = "LDAP://" & dnFound
objRecordSet.MoveNext
Loop


' Clean up.
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing

End Function


' --------------------------------------------------------------------------------
' Securely access the Active Directory computer object using Kerberos
' --------------------------------------------------------------------------------


Set objDSO = GetObject("LDAP:")
strPathToComputer = GetStrPathToComputer(strComputerName)

WScript.Echo "Accessing object: " + strPathToComputer

Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_SEALING = 64 '0x40
Const ADS_USE_SIGNING = 128 '0x80


' --------------------------------------------------------------------------------
' Get all BitLocker recovery information from the Active Directory computer object
' --------------------------------------------------------------------------------

' Get all the recovery information child objects of the computer object

Set objFveInfos = objDSO.OpenDSObject(strPathToComputer, vbNullString, vbNullString, _
ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)

objFveInfos.Filter = Array("msFVE-RecoveryInformation")

' Iterate through each recovery information object and saves any existing key packages

nCount = 1
strFilePathCurrent = strFilePath & nCount

For Each objFveInfo in objFveInfos

strName = objFveInfo.Get("name")

strRecoveryPassw

ord = objFveInfo.Get("msFVE-RecoveryPassword")
strKeyPackage = objFveInfo.Get("msFVE-KeyPackage")

WScript.echo
WScript.echo "Recovery Object Name: " + strName
WScript.echo "Recovery Password: " + strRecoveryPassword

' Validate file path
Set fso = CreateObject("Scripting.FileSystemObject")

If (fso.FileExists(strFilePathCurrent)) Then
WScript.Echo "The file " & strFilePathCurrent & " already exists. Please use a different path."
WScript.Quit -1
End If

' Save binary data to the file
SaveBinaryDataText strFilePathCurrent, strKeyPackage

WScript.echo "Related key package successfully saved to " + strFilePathCurrent


' Update next file path using base name
nCount = nCount + 1
strFilePathCurrent = strFilePath & nCount

Next


'----------------------------------------------------------------------------------------
' Utility functions to save binary data
'----------------------------------------------------------------------------------------

Function SaveBinaryDataText(FileName, ByteArray)
'Create FileSystemObject object
Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")

'Create text stream object
Dim TextStream
Set TextStream = FS.CreateTextFile(FileName)

'Convert binary data To text And write them To the file
TextStream.Write BinaryToString(ByteArray)
End Function

Function BinaryToString(Binary)
Dim I, S
For I = 1 To LenB(Binary)
S = S & Chr(AscB(MidB(Binary, I, 1)))
Next
BinaryToString = S
End Function

WScript.Quit

The following sample script exports a new key package from an unlocked, encrypted volume.

To run this script, start by saving the code into a VBS file (for example, GetBitLockerKeyPackage.vbs). Then, open an administrator command prompt and use “cscript” to run the saved file (for example, type "cscript GetBitLockerKeyPackage.vbs -?").



' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------

Sub ShowUsage
Wscript.Echo "USAGE: GetBitLockerKeyPackage [VolumeLetter/DriveLetter:] [Path To Saved Key Package]"
Wscript.Echo
Wscript.Echo "Example: GetBitLockerKeyPackage C: E:\bitlocker-backup-key-package"
WScript.Quit
End Sub

' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------

Set args = WScript.Arguments

Select Case args.Count
Case 2
If args(0) = "/?" Or args(0) = "-?" Then
ShowUsage
Else
strDriveLetter = args(0)
strFilePath = args(1)
End If
Case Else
ShowUsage

End Select

' --------------------------------------------------------------------------------
' Other Inputs
' --------------------------------------------------------------------------------



' Target computer name
' Use "." to connect to the local computer
strComputerName = "."

' Default key protector ID to use. Specify "" to let the script choose.

strDefaultKeyProtectorID = ""

' strDefaultKeyProtectorID = "{001298E0-870E-4BA0-A2FF-FC74758D5720}" ' sample


' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------

strConnectionStr = "winmgmts:" _
& "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
& strComputerName _
& "\root\cimv2\Security\MicrosoftVolumeEncryption"


On Error Resume Next 'handle permission errors

Set objWMIService = GetObject(strConnectionStr)


If Err.Number <> 0 Then
WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
Wscript.Echo "Ensure that you are running with administrative privileges."
WScript.Quit -1
End If

On Error GoTo 0

strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)


If colTargetVolumes.Count = 0 Then
WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " & strDriveLetter & " on computer " & strComputerName & "."
WScript.Quit -1
End If


' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
set objVolume = objFoundVolume
Next


' objVolume is now our found BitLocker-capable disk volume


' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------


' Collect all possible valid key protector ID's that can be used to get the package
' ----------------------------------------------------------------------------------

nNumericalKeyProtectorType = 3 ' type associated with "Numerical Password" protector

nRC = objVolume.GetKeyProtectors(nNumericalKeyProtectorType, aNumericalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

nExternalKeyProtectorType = 2 ' type associated with "External Key" protector

nRC = objVolume.GetKeyProtectors(nExternalKeyProtectorType, aExternalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If


' Get first key protector of the type "Numerical Password" or "External Key", if any
' ----------------------------------------------------------------------------------

if strDefaultKeyProtectorID = "" Then

' Save first numerical password, if exists
If UBound(aNumericalKeyProtectorIDs) <> -1 Then
strDefaultK

eyProtectorID = aNumericalKeyProtectorIDs(0)
End If

' No numerical passwords exist, save the first external key
If strDefaultKeyProtectorID = "" and UBound(aExternalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aExternalKeyProtectorIDs(0)
End If

' Fail case: no recovery key protectors exist.
If strDefaultKeyProtectorID = "" Then
WScript.Echo "FAILURE: Cannot create backup key package because no recovery passwords or recovery keys exist. Check that BitLocker protection is on for this drive."
WScript.Echo "For help adding recovery passwords or recovery keys, type ""manage-bde -protectors -add -?""."
WScript.Quit -1
End If

End If

' Get some information about the chosen key protector ID
' ----------------------------------------------------------------------------------

' is the type valid?

nRC = objVolume.GetKeyProtectorType(strDefaultKeyProtectorID, nDefaultKeyProtectorType)

If Hex(nRC) = "80070057" Then
WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " is not valid."
WScript.Echo "This ID value may have been provided by the script writer."
ElseIf nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorType failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' what's a string that can be used to describe it?

strDefaultKeyProtectorType = ""

Select Case nDefaultKeyProtectorType

Case nNumericalKeyProtectorType
strDefaultKeyProtectorType = "recovery password"

Case nExternalKeyProtectorType
strDefaultKeyProtectorType = "recovery key"

Case Else
WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " does not refer to a valid recovery password or recovery key."
WScript.Echo "This ID value may have been provided by the script writer."

End Select


' Save the backup key package using the chosen key protector ID
' ----------------------------------------------------------------------------------

nRC = objVolume.GetKeyPackage(strDefaultKeyProtectorID, oKeyPackage)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyPackage failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' Validate file path
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(strFilePath)) Then
WScript.Echo "The file " & strFilePath & " already exists. Please use a different path."
WScript.Quit -1
End If

Dim oKeyPackageByte, bKeyPackage
For Each oKeyPackageByte in oKeyPackage
'WScript.echo "key package byte: " & oKeyPackageByte
bKeyPackage = bKeyPackage & ChrB(oKeyPackageByte)
Next

' Save binary data to the file
SaveBinaryDataText strFilePath, bKeyPackage

' Display helpful information
' ----------------------------------------------------------------------------------

WScript.Echo "The backup key package has been saved to " & strFilePath & "."

WScript.Echo "IMPORTANT: To use this key package, the " & strDefaultKeyProtectorType & " must also be saved."

' Display the recovery password

相关文档
相关文档 最新文档