Azure IoT Edge 安全管理器

适用于:IoT Edge 1.4 checkmark IoT Edge 1.4

Azure IoT Edge 安全管理器是一种界限明确的安全内核,用于通过抽象化安全硅硬件来保护 IoT Edge 设备及其所有组件。 安全管理器是增强安全性的重点,为原始设备制造商 (OEM) 提供技术集成点。

安全管理器在 IoT Edge 设备上抽象化安全硅硬件,并提供适用于其他安全服务的扩展性框架。

IoT Edge 安全管理器旨在保护 IoT Edge 设备和所有固有软件操作的完整性。 安全管理器会转换来自基础硬件信任根(如果可用)的信任,以便启动 IoT Edge 运行时并监视持续进行的操作。 IoT Edge 安全管理器是与安全硅硬件(如果可用)结合使用的软件,以帮助提供最高安全保证。

此外,IoT Edge安全管理器通过主机级别模块提供适用于安全服务扩展的安全框架。 这些服务包括安全监视和更新,要求设备内的代理具有对设备某些组件的特权访问权限。 扩展性框架可确保此类集成一致地维护整体系统安全性。

IoT Edge 安全管理器的职责包括但不限于:

  • 启动 Azure IoT Edge 设备。
  • 通过公证服务控制对设备硬件信任根的访问。
  • 监视运行时 IoT Edge 操作的完整性。
  • 预配设备标识和管理信任转换(如果适用)。
  • 确保服务的客户端代理的安全操作(包括 Device Update for IoT Hub 和 Microsoft Defender for IoT)。

1.2 和更高版本中的更改

在 IoT Edge 版本 1.0 和 1.1 中,名为“安全守护程序”的组件负责安全管理器的逻辑安全操作。 更新到版本 1.2 时,向 Azure IoT 标识服务安全子系统委派了多个主要职责。 从安全守护程序中删除这些基于安全的任务后,其名称不再有意义。 为了更好地反映此组件在版本 1.2 及更高版本中进行的工作,我们将其重命名为“模块运行时”。

设计原理

IoT Edge 遵循两个核心原则:最大程度地提高操作完整性,并最大程度地减小膨胀和改动。

最大程度地提高操作完整性

IoT Edge 模块运行时会在任何给定硬件信任根的防御功能内尽可能以最高完整性运行。 通过适当集成,硬件信任根以静态方式度量并监视安全守护程序,并在运行时抵御篡改。

恶意物理访问设备始终是 IoT 中的一种威胁。 硬件信任根对于保护 IoT Edge 设备的完整性起重要作用。 硬件信任根分为两类:

  • 用于保护敏感信息(如机密和加密密钥)的安全元素。
  • 用于保护机密(如密钥)和敏感工作负载(如机密机器学习模型和计量操作)的安全 enclave。

存在两种类型的可以使用硬件信任根的执行环境:

  • 标准或丰富执行环境 (REE),依赖于使用安全元素来保护敏感信息。
  • 受信任的执行环境 (TEE),依赖于使用安全 enclave 技术来保护敏感信息并对软件执行提供保护。

最大程度地减小膨胀和改动

IoT Edge 模块运行时的另一个核心原则是最大程度地减小改动。 对于最高的信任级别,IoT Edge 模块运行时可与设备硬件信任根紧密结合,并作为本机代码运行。 在这些情况下,通常可通过硬件信任根的安全更新路径(而不是操作系统的更新机制,这可能比较困难)来更新 IoT Edge 软件。 虽然建议为 IoT 设备进行安全续订,但更新需求过多或更新有效负载过大会以多种方式扩展威胁面。 例如,你可能想要跳过某些更新,从而使设备可用性达到最高。 因此,IoT Edge 模块运行时的设计简洁明了,保持独立的受信任计算基础较小,以鼓励频繁更新。

体系结构

IoT Edge 模块运行时充分利用任何可用硬件信任根技术来增强安全性。 此外,在硬件技术提供受信任的执行环境的情况下,它还允许在标准/丰富执行环境 (REE) 和受信任的执行环境 (TEE) 之间进行分字运算。 特定于角色的接口可启用 IoT Edge 的主要组件,确保 IoT Edge 设备及其操作的完整性。

Azure IoT Edge module runtime architecture

云接口

云接口允许访问补充设备安全性的云服务。 例如,此接口允许访问设备预配服务,以便进行设备标识生命周期管理。

管理 API

在创建/启动/停止/删除 IoT Edge 模块时,IoT Edge 代理会调用管理 API。 模块运行时存储所有活动模块的“注册”。 这些注册将模块的标识映射到该模块的某些属性。 例如,这些模块属性包括容器中运行的进程的进程标识符 (pid) 和 docker 容器内容的哈希值。

工作负荷 API 使用这些属性(如下所述)来验证调用方是否有权执行某一操作。

管理 API 是一个特权 API,仅可从 IoT Edge 代理进行调用。 IoT Edge 模块运行时启动后,它会启动 IoT Edge 代理并验证 IoT Edge 代理是否未被篡改,然后就可以为 IoT Edge 代理创建隐式注册。 工作负载 API 使用的相同证明过程也会将管理 API 的访问权限限制为仅供 IoT Edge 代理使用。

容器 API

容器 API 会与正在使用的容器系统(例如 Moby 或 Docker)交互,以便进行模块管理。

IoT Edge 模块运行时使用证明过程来保护此 API。 当模块调用此 API 时,模块运行时尝试查找标识的注册。 如果成功,则其使用注册的属性来度量该模块。 如果度量过程的结果与注册匹配,则生成新的标识证明。 相应 CA 证书(信任捆绑包)也返回到模块。 该模块使用此证书来连接到 IoT 中心、其他模块或启动服务器。 当签名令牌或证书即将到期时,模块有责任请求新的证书。

集成和维护

Azure 维护 GitHub 上的 IoT Edge 模块运行时Azure IoT 标识服务的主要代码库。

读取 IoT Edge 代码库时,请记住模块运行时是从安全守护程序演变而来的。 代码库可能仍包含对安全守护程序的引用。

安装和更新

IoT Edge 模块运行时的安装和更新通过操作系统的程序包管理系统进行管理。 具有硬件信任根的 IoT Edge 设备应通过安全启动和更新管理系统来管理模块运行时的生命周期,从而进一步增强其完整性。 设备制造商应该根据各自的设备功能来探索这些方法。

版本控制

IoT Edge 运行时可跟踪和报告 IoT Edge 模块运行时的版本。 该版本报告为 IoT Edge 代理模块报告的属性的 runtime.platform.version 特性

IoT Edge 安全管理器旨在标识并隔离保护 Azure IoT Edge 平台的安全性和完整性的组件,以增强自定义。 第三方(如设备制造商)应使用其设备硬件提供可用的自定义安全功能。

了解如何使用软件或虚拟 TPM 通过受信任的平台模块 (TPM) 强化 Azure IoT 安全管理器:

LinuxWindows 上的 Linux 上使用虚拟 TPM 创建和预配 IoT Edge 设备。

后续步骤

若要详细了解如何保护 IoT Edge 设备,请阅读以下博客文章: