在 Windows 10 IoT 核心版上启用安全启动、BitLocker 和 Device Guard

Windows 10 IoT 核心版包括安全功能产品/服务,例如 UEFI 安全启动、BitLocker 设备加密和 Device Guard。 这些产品/服务将帮助设备构建者创建完全锁定的 Windows IoT 设备,以便复原多种不同类型的攻击。 这些功能结合在一起,可带来出色的保护功能,确保平台以定义的方式启动,同时锁定未知的二进制文件并通过使用设备加密来保护用户数据。

启动顺序

需要先了解 Windows 10 IoT 核心版设备上的启动顺序,然后才能深入了解为 IoT 设备提供安全平台的单个组件。

从打开 IoT 设备一直到操作系统内核加载和执行安装的应用程序的整个过程中,会经历以下三个主要阶段。

  • 平台安全启动
  • 统一可扩展固件接口 (UEFI) 安全启动
  • Windows 代码完整性

Boot Order

请参阅此处,了解有关 Windows 10 启动过程的其他信息。

锁定 IoT 设备

要锁定 Windows IoT 设备,必须注意以下事项。

平台安全启动

第一次启动设备时,整个启动过程中的第一步就是加载并运行固件启动加载程序,它们会初始化设备上的硬件并提供紧急刷写功能。 然后,系统将加载 UEFI 环境并移交控制权。

这些固件启动加载程序是 SoC 特定的,因此你需要与相应的设备制造商合作,以便在设备上创建这些启动加载程序。

UEFI 安全启动

UEFI 安全启动是 UEFI 中的第一个策略强制执行点。 它将系统限制为仅允许执行由指定的颁发机构(如固件驱动程序、选项 ROM、UEFI 驱动程序或应用程序)和 UEFI 启动加载程序所签名的二进制文件。 此功能可防止在平台上执行未知的代码,潜在地削弱这种代码的安全风险。 安全启动降低了对设备进行预启动恶意软件攻击的风险,例如 rootkit。

OEM 公司需要在生产时将 UEFI 安全启动数据库存储在 IoT 设备上。 这些数据库包括签名数据库 (db)、吊销的签名数据库 (dbx) 和密钥注册密钥数据库 (KEK)。 这些数据库存储在设备的固件永久性 RAM (NV-RAM) 中。

  • 签名数据库 (db):这列出了允许在设备上加载的操作系统加载程序、UEFI 应用程序和 UEFI 驱动程序的签名程序或图像哈希

  • 吊销的签名数据库 (dbx):这列出了不再受信任且不允许在设备上加载的操作系统加载程序、UEFI 应用程序和 UEFI 驱动程序的签名程序或图像哈希

  • 密钥注册密钥数据库 (KEK):包含一个签名密钥列表,其可用于更新签名数据库和吊销的签名数据库。

创建这些数据库并将数据库添加到设备后,OEM 会在编辑中锁定固件,并生成平台签名密钥 (PK)。 此密钥可用于对 KEK 的更新进行签名或禁用 UEFI 安全启动。

下面是 UEFI 安全启动所执行的步骤:

  1. 启动设备后,系统会根据平台签名密钥 (PK) 逐一检查每个签名数据库。
  2. 如果固件不受信任,则 UEFI 固件必须启动 OEM 特定的恢复过程,以还原受信任的固件。
  3. 如果 Windows 启动管理器无法加载,固件将尝试启动 Windows 启动管理器的备份副本。 如果此操作仍然失败,则 UEFI 固件必须启动 OEM 特定的补救过程。
  4. Windows 启动管理器运行并验证 Windows 内核的数字签名。 如果受信任,Windows 启动管理器会将控制权传递给 Windows 内核。

请单击此处,了解有关安全启动的详细信息以及密钥创建和管理指南。

Windows 代码完整性

Windows 代码完整性 (WCI) 通过在每次将驱动程序或应用程序加载到内存时验证其完整性来提高操作系统的安全性。 CI 包含两个主要组件:内核模式代码完整性 (KMCI) 和用户模式代码完整性 (UMCI)。

可配置代码完整性 (CCI) 是 Windows 10 的一项功能,它允许设备构建者锁定设备,并且仅允许其运行和执行已签名和受信任的代码。 为此,设备构建者可以在“黄金”设备上创建代码完整性策略(最终版硬件和软件),然后保护并在工厂现场的所有设备上应用此策略。

要了解有关部署代码完整性策略、审核和强制执行的详细信息,请查看此处的最新 technet 文档。

下面是 Windows 代码完整性所执行的步骤:

  1. 在加载之前,Windows 内核将为签名数据库验证所有其他组件。 这包括驱动程序、启动文件和 ELAM(提前启动反恶意软件)。
  2. Windows 内核将在启动过程中加载受信任的组件,并禁止加载不受信任的组件。
  3. 加载 Windows 10 IoT 核心版操作系统和任何已安装的应用程序。

BitLocker 设备加密

Windows 10 IoT 核心版还实现了 BitLocker 设备加密的轻型版本,保护 IoT 设备免受离线攻击。 此功能与平台上的 TPM 存在很强的依赖性,包括 UEFI(在其中执行必要测量)中的必要预安装操作系统协议。 这些预安装操作系统测量可以确保操作系统以后可以明确记录其本身的启动方式;但是,这不会强制执行任何执行限制。

提示

使用 Windows 10 IoT 核心版上的 BitLocker 功能,可以在将所有可用的 NTFS 数据卷绑定到基于 NTFS 的操作系统卷的同时,自动加密该卷。 为此,必须确保 EFIESP 卷 GUID 设置为 C12A7328-F81F-11D2-BA4B-00A0C93EC93B。

Windows IoT 核心上的 Device Guard

大多数 IoT 设备被构建为固定功能的设备。 这意味着设备构建者明确知道哪些固件、操作系统、驱动程序和应用程序应在给定设备上运行。 反过来,通过仅允许执行已知和受信任的代码,此信息就可用于完全锁定 IoT 设备。 Windows 10 IoT 核心版上的 Device Guard 可以确保未知或不受信任的可执行代码无法在锁定的设备上运行,从而帮助保护 IoT 设备。

IoT 核心版统包安全

为了便于在 IoT 核心板设备上轻松启用密钥安全功能,Microsoft 为设备构建者提供了一个支持构建完全锁定 IoT 设备的统包安全包。 该包将有助于:

  • 在支持的 IoT 平台上预配安全启动密钥并启用该功能
  • 使用 BitLocker 设置和配置设备加密
  • 启动设备锁定以仅允许执行已签名的应用程序和驱动程序

以下步骤将引导完成使用统包安全包创建锁定映像的过程

Create lockdown image

先决条件

  • 运行 Windows 10 企业版的电脑(所提供的脚本不支持其他 Windows 版本的电脑
  • Windows 10 SDK - 生成证书所必需
  • Windows 10 ADK - 生成 CAB 生成所必需
  • 引用平台 - 需要随附固件、操作系统、驱动程序和应用程序的版本硬件才能进行最终锁定

开发 IoT 设备

Windows 10 IoT 核心版可以使用数百个设备中使用的各种芯片。 在建议的 IoT 开发设备中,以下提供了现有的固件 TPM 功能,以及安全启动、标准启动、BitLocker 和 Device Guard 功能:

  • 高通龙板 410c

    若要启用安全启动,可能需要预配 RPMB。 在 eMMC 与 Windows 10 IoT 核心版一起刷入后(按照此处的说明),在启动时同时按下设备上的 [电源] + [音量 +] + [音量 -],并从 BDS 菜单中选择“预配 RPMB”。 请注意,这是不可逆的步骤。

  • Intel MinnowBoardMax

    对于 Intel MinnowBoard Max,固件版本必须是 0.82 或更高版本。(获取最新固件)。 若要启用 TPM 功能,请使用附加键盘和显示器为板加电,然后按 F2 进入 UEFI 设置。 转到“设备管理器”->“系统设置”->“安全配置”->“PTT”,然后将其设置为“启用”。 按 F10 保存更改,并继续重新启动平台。

注意

Raspberry Pi 2 和 3 不支持 TPM,因此我们无法配置锁定方案。

生成锁定包

按照以下两个链接中的说明操作:

测试锁定包

可以测试此处 <YOUR_IOT_ADD_ON_WORKSPACE>\生成<ARCH><OEM_NAME>生成的安全包。Security.* .cab> 以下步骤在解锁的设备上手动安装它们

  1. 使用解锁的映像(上一步中用于扫描的映像)刷写设备。

  2. 使用 SSHPowerShell 连接到设备

  3. 将以下 .cab 文件复制到设备的如下目录中:c:\OemInstall

    • OEM.Custom.Cmd.cab
    • OEM.Security.BitLocker.cab
    • OEM.Security.SecureBoot.cab
    • OEM.Security.DeviceGuard.cab
  4. 发出以下命令,为生成的包启动暂存进程

    applyupdate -stage c:\OemInstall\OEM.Custom.Cmd.cab
    

    如果使用的是自定义映像,你必须跳过此文件,然后使用 Output\OEMCustomization\OEMCustomization.cmd 文件中提供的内容手动编辑 c:\windows\system32\oemcustomization.cmd

    applyupdate -stage c:\OemInstall\OEM.Security.BitLocker.cab
    applyupdate -stage c:\OemInstall\OEM.Security.SecureBoot.cab
    applyupdate -stage c:\OemInstall\OEM.Security.DeviceGuard.cab
    
    
  5. 最后,通过以下命令提交包:

    applyupdate -commit
    
  6. 设备将重新启动到更新操作系统(显示齿轮)以安装包,并将再次重新启动 MainOS。 设备重新启动回 MainOS 后,系统将启用安全启动,并且会使用 SIPolicy。

  7. 再次重新启动设备以激活 BitLocker 加密。

  8. 测试安全功能

    • SecureBoot:尝试 bcdedit /debug on,你将收到一个错误,说明值受安全启动策略保护
    • BitLocker:运行 start /wait sectask.exe -waitencryptcomplete:1,如果 ERRORLEVEL 为 -2147023436(ERROR_TIMEOUT),则加密不完整。 从 .cmd 文件运行 sectask.exe 时,请忽略 start /wait
    • DeviceGuard:运行任何未签名的二进制文件或使用非 SIPolicy 列表中的证书签名的二进制文件,并确认它无法运行。

生成锁定映像

根据前面定义的设置,在验证锁定包是否正常工作后,可以按照以下给定步骤将这些包加入到映像中。 有关自定义映像创建说明,请阅读 IoT 制造指南

  1. 在工作区目录中,从上面生成的输出目录中更新以下文件

    • SecureBoot:Copy ..\Output\SecureBoot\*.bin ..\Workspace\Common\Packages\Security.SecureBoot
      • SetVariable_db.bin
      • SetVariable_kek.bin
      • SetVariable_pk.bin
    • BitLocker:Copy ..\Output\Bitlocker\*.* ..\Workspace\Common\Packages\Security.Bitlocker
      • DETask.xml
      • Security.Bitlocker.wm.xml
      • setup.bitlocker.cmd
    • Device Guard:Copy ..\Output\DeviceGuard\*.* ..\Workspace\Common\Packages\Security.DeviceGuard
      • SIPolicyOn.p7b
      • SIPolicyOff.p7b
  2. 使用锁定包功能 ID 在 ProductName 目录下添加 RetailOEMInput.xml 和 TestOEMInput.xml

    • <Feature>SEC_BITLOCKER</Feature>
    • <Feature>SEC_SECUREBOOT</Feature>
    • <Feature>SEC_DEVICEGUARD</Feature>
  3. 重新生成映像

    • buildpkg all(这会基于上述策略文件生成新的锁定包)
    • buildimage ProductName test(or)retail(这会生成新的 Flash.ffu)
  4. 使用新的 Flash.ffu 刷写设备并验证安全功能。

请参阅 SecureSample,了解锁定 DragonBoard 配置的示例。

通过启用 CodeSigning Enforcement 进行开发

生成包并激活锁定后,需要在开发过程中适当地为引入映像的任何二进制文件签名。 确保使用密钥 *.\Keys\ **-UMCI.pfx 对用户模式二进制文件进行签名。 对于内核模式签名(例如适用于驱动程序的签名),你需要指定自己的签名密钥,并确保它们也包含在上述 SIPolicy 中。

解锁加密驱动器

在开发与测试期间,当尝试离线读取加密设备(例如用于 MinnowBoardMax 的 SD 卡或 DragonBoard 的使用 USB 大容量存储模式的 eMMC)的内容时,可能要使用“diskpart”将驱动器号分配到 MainOS 和数据卷(假设 v: 代表 MainOS,w: 代表数据)。 卷将显示为锁定状态,需要手动解锁。 可在任何安装了 OEM-DRA.pfx 证书的计算机(随附在 DeviceLockDown 示例中)上执行此操作。 安装 PFX,然后从管理 CMD 提示符运行以下命令:

  • manage-bde -unlock v: -cert -cf OEM-DRA.cer
  • manage-bde -unlock w: -cert -cf OEM-DRA.cer

如果需要频繁脱机访问内容,可以使用以下命令在初始解锁后为卷设置 BitLocker 自动锁定:

  • manage-bde -autounlock v: -enable
  • manage-bde -autounlock w: -enable

禁用 BitLocker

如果需要暂时禁用 BitLocker,请与 IoT 设备初始化远程 PowerShell 会话并运行以下命令: sectask.exe -disable

注意

除非已禁用计划的加密任务,否则系统将在后续设备启动上重新启用设备加密。