本文档介绍 Confidential Space 的安全控制措施以及系统设计可如何缓解各种威胁。Confidential Space 旨在让各方与工作负载共享机密数据(例如受监管的数据或个人身份信息 (PII)),同时保留该数据的机密性和所有权。Confidential Space 有助于创建隔离,以便数据仅对工作负载和数据的原始所有者可见。
在以下情况下,您可以使用 Confidential Space:您无法与工作负载操作员建立信任,或者无法在创建机密数据的原始方之间建立信任。例如,金融机构可以使用 Confidential Space 相互协作,以识别欺诈或分析洗钱活动。Confidential Space 允许跨客户数据集进行分析,同时保持客户身份的私密性。
Confidential Space 系统的组件
Confidential Space 使用可信执行环境 (TEE),后者旨在仅将 Secret 发放给授权工作负载。证明流程和安全强化型操作系统映像有助于保护工作负载以及工作负载处理的数据免遭不受信任的操作员的侵害。
Confidential Space 系统有三个核心组件:
- 工作负载:具有安全强化型操作系统的容器化映像,在基于云的 TEE 中运行。您可以将机密计算用作提供硬件隔离和远程证明功能的 TEE。
- 证明服务:OpenID Connect (OIDC) 令牌提供商。您可以使用此服务来验证 TEE 的证明引用以及发放身份验证令牌。这些令牌包含工作负载的标识特性。
- 受保护的资源:代管式云资源,例如 Cloud Key Management Service 密钥或 Cloud Storage 存储桶。该资源受允许政策(授予对已授权联合身份令牌的访问权限)的保护。使用工作负载身份池的中间步骤将 OIDC 令牌转换为 IAM 可以使用的联合身份令牌。
该系统有助于确保仅向授权工作负载授予对受保护资源的访问权限。此外,Confidential Space 有助于在证明前后保护工作负载免遭检查和篡改。
在 Confidential Space 系统中,包含三方:
- 工作负载作者,创建容器化映像,其中包含有权访问受保护资源的应用。作者无权访问数据或结果。此外,作者无法控制对数据或结果的访问权限。
- 工作负载操作员,在 Google Cloud 项目中运行工作负载。操作员通常拥有项目的完全管理权限。操作员可以管理 Google Cloud 资源(例如 Compute Engine 实例、磁盘和网络规则),并且操作员可以与处理这些资源的任何 Google Cloud API 进行交互。操作员无权访问数据或结果,也无法影响或修改代码或执行环境。此外,操作员无法控制对数据或结果的访问权限。
- 资源所有者(或数据协作者),拥有受保护资源。资源所有者可以访问自己的数据、设置自己的数据权限,还可以访问结果。他们无法访问其他资源所有者的数据,也无法自行修改代码。
Confidential Space 支持信任模型,其中工作负载作者、工作负载操作员和资源所有者是独立的相互不信任的各方。
下图显示了系统组件和各方。工作负载与受保护的资源位于不同的项目中。
安全数据处理示例
Confidential Space 可帮助您在共享数据时保护用户的隐私。下表介绍了三个示例使用场景。
使用场景 | 示例场景 |
---|---|
函数加密模型 | 在函数加密模型中,Alice 希望与 Bob 共享其机密数据的结果,但不披露整个数据集。Alice 加密了自己的数据集,并保护了其项目中 Cloud KMS 内的数据加密密钥 (DEK)。Alice 编写了一个实现工作负载的程序,并与 Bob 共享二进制文件。Alice 配置 KMS,以向该程序授予对 DEK 的访问权限。工作负载在 Bob 的 Confidential Space 中运行,解密并处理 Alice 的数据集,并将结果写入 Bob 的 Cloud Storage。 |
多方计算 | 在多方计算中,Alice 和 Bob 希望彼此共享结果,同时保护输入数据集的机密性。与函数加密模型类似,Alice 和 Bob 加密了各自的数据集,并保护其项目中 Cloud KMS 实例内的 DEK。他们共同编写了用于确定结果的程序,并在 Confidential Space 中运行该程序。Alice 和 Bob 配置 KMS 以向该程序授予对 DEK 的访问权限。该程序读取和处理两个数据集,并将结果写入共享的 Cloud Storage 存储桶。 |
密钥共享 | 更复杂的方案使用密钥共享这一概念。密钥共享是一个在 Alice、Bob 和其他所有者之间拆分的私钥,使得知晓个别共享不会授予对加密数据集的访问权限。在此方案中,信任会在多个所有者之间拆分。私钥仅在受限 TEE 中由授权工作负载组建。 |
在这些示例中,只有工作负载可以访问和处理加密数据集。Confidential Space 有助于确保没有人可以对非自有数据执行未经审核的操作。数据所有者控制其数据的使用方式,以及哪些工作负载有权对其数据执行操作。
保护工作负载的完整性和机密性
为了帮助保护工作负载免受不受信任的工作负载操作员的影响,Confidential Space 实现了以下安全控制措施:
- 证明流程会检测对工作负载映像或其 TEE 的修改。此控制措施有助于保护工作负载的证明前完整性。
- 安全强化型基础映像有助于减少攻击面,并有助于防止工作负载操作员在运行时访问或危害实例。此控制措施有助于保护工作负载的证明后完整性和机密性。这些安全控制措施协同工作,有助于保护工作负载、其 Secret 及其处理的数据。
证明过程
证明过程基于安全强化型虚拟机测量的启动和扩展运行时测量。此过程会在虚拟可信平台模块 (vTPM) 设备中的受保护、仅扩展寄存器中捕获启动序列测量。
测量涵盖前期启动组件、已加载的内核和容器映像。此外,它们还包含环境属性,例如指示实例为机密虚拟机的标志。vTPM 使用证明服务信任的认证证明密钥对这些测量进行签名(或引用)。
下图展示了 Confidential Space 系统的组件以及每个组件如何参与证明过程。
证明过程取决于以下组件:
- 客机固件:一个不可变的组件,它是Google Cloud的一个可信部件。
- 经过证明的 Confidential Space 映像:基于 Container-Optimized OS 的安全强化型映像,可从挂接的启动磁盘读取。
- 前期启动组件:与 vTPM 交互的引导加载程序和内核,用于测量启动组件并将结果写入平台配置寄存器 (PCR)。
启动器:一个组件,用于从映像代码库下载工作负载二进制文件,并衡量容器及其配置并将结果写入 PCR 中。启动器从实例元数据服务器读取其配置。
证明处理代码:该代码负责准备 PCR 引用并返回 vTPM 的引用、证明密钥和完整的事件日志。
证明服务:该服务验证引用、重放事件日志、发出 OIDC 令牌并返回包含工作负载访问政策的特性的令牌。
安全强化型映像
Confidential Space 映像是一个最小的单一用途操作系统。映像会运行容器启动器,后者进而启动单个容器。Confidential Space 映像基于 Container-Optimized OS 的现有安全增强功能构建,并增加了以下优势:
- 具有完整性保护的加密磁盘分区:Confidential Space 映像包含以下分区:
- 经过身份验证的加密网络连接:启动器使用 TLS 对证明服务进行身份验证,并保护其通信链路。
- 各种启动测量:这些测量包括内核命令行参数、
root-fs
的dm-verity
配置和工作负载二进制文件。 停用远程访问和特定于云的工具:这些工具包括 sshd 和 OS Login。
减少状态转换次数:例如,启动器运行单个容器,然后终止。
威胁模型和缓解措施
本部分介绍 Confidential Space 可帮助缓解的威胁模型以及 Confidential Space 引入的新风险。
以下攻击不在本文档的探讨范围内:
- 针对客机统一可扩展固件接口 (UEFI) 固件、Confidential Space 映像引导加载程序和内核、容器运行时和工作负载的第三方依赖项实施的软件供应链攻击。数据协作者假定资源所有者在与允许政策共享其资源之前审核并审核了容器映像。
- 针对 Google Cloud的攻击,例如虚拟机逃逸。
可能的攻击
Confidential Space 在设计上可以防御三种可能的攻击:
- 恶意工作负载操作员:恶意工作负载操作员可能会在运行时修改磁盘内容、拦截网络连接并尝试破解 TEE。恶意操作员可能会扩大攻击面或限制运行时环境。例如,恶意操作员可能会添加串行控制台以引入新的攻击途径。再举一个例子,恶意操作员可能会限制资源,例如限制客机的内存大小、更改客机的磁盘空间或更改防火墙规则。这些限制条件可能会触发 I/O 错误,从而导致测试不良的错误案例。
- 恶意证明客户端:此攻击者会连接到证明服务,并发送格式错误但已签名的事件日志消息。
- 恶意资源所有者:恶意资源所有者可以完全控制工作负载使用的加密数据集。此攻击者可能会呈现格式错误的输入或有偏差的数据,并尝试触发解析工作负载中的漏洞,或试图规避工作负载的隐私控制。
攻击面
下表介绍了攻击者可以利用的攻击面。
攻击者 | 目标 | 攻击面 | 风险 |
---|---|---|---|
工作负载操作员 | TEE、工作负载 | 磁盘读取 |
从磁盘读取的任何内容都受攻击者控制。 多写入者永久性磁盘和动态磁盘附加等服务意味着攻击者可以根据意愿动态修改磁盘内容。 |
工作负载操作员 | TEE、工作负载 | 磁盘写入 | 攻击者可以看到写入磁盘的任何内容。请参阅磁盘快照和导入功能。 |
工作负载操作员 | TEE、工作负载 | 元数据服务器 | 从元数据服务器读取的实例特性受攻击者控制,包括启动脚本和环境变量。 |
工作负载操作员 | TEE、工作负载 | 网络 | 与映像代码库或证明服务的外部网络连接可能会被拦截。此攻击使用具有面向公众的 Cloud Router 实例的专用 VPC 来实施。 |
证明客户端 | 证明服务 | 事件日志和证明消息 | 证明服务具有复杂的加密密集型逻辑,难以进行防御性编写。 |
资源所有者 | 工作负载 | 加密数据集 | 攻击者可能会破坏工作负载的输入数据集,这意味着加密数据不一定是可信数据。 |
Google Cloud 基础架构
Google Cloud 包括 Compute Engine Hypervisor、机密虚拟机的 vTPM、客机 UEFI 固件和托管的证明服务。敏感密钥材料(例如 vTPM 和 OIDC 签名密钥)在设计上要进行安全保护。
Google 基础架构旨在从逻辑上将每个客户的数据与其他客户和用户的数据隔离开来,即使这些数据存储在同一台物理服务器上也是如此。支持人员和工程师的管理访问权限是受限的、须进行审核并且对于客户是透明的。此外,机密虚拟机中的内嵌内存加密功能有助于保护实例内存的机密性。内嵌内存加密功能导致直接检查或意外内存日志记录(内核崩溃日志)无效。如需详细了解我们如何保护我们的平台,请参阅 Google 安全概览。
威胁和缓解措施
具有完整性保护的加密文件系统旨在降低磁盘攻击的风险。此外,从磁盘读取代码后,系统会测量这些数据,并且绝不会再次从磁盘中重新读取这些数据。Secret 绝不会以纯文本形式披露给磁盘或任何外部设备(例如串行控制台)。
通过使用已通过身份验证的端到端加密渠道,可缓解网络攻击带来的风险。停用映像中的外部网络访问,例如 SSH。证明协议有助于保护从元数据服务器读取的启动序列和任何配置。最后,Confidential Space 工作负载应使用差分隐私控制措施来降低偏差数据集带来的风险。
下表介绍了威胁和缓解措施:
针对测量启动过程的攻击
下表介绍了与测量启动过程相关的潜在威胁和缓解策略。
威胁 | 缓解措施 | 缓解措施实施 |
---|---|---|
攻击者使用不支持测量启动的旧固件启动安全强化型虚拟机。 如果成功,攻击者可能会播放任意测量,并使远程证明失效。 |
此威胁通过 Google Cloud 控制平面缓解。 Confidential Space 增加了 vTPM 设备和最新的 UEFI 固件。此外,Confidential Space 还支持测量启动,而测量启动不能停用。 |
在 Google Cloud 基础架构中 |
攻击者会覆盖客机物理内存中的 UEFI 固件,重新启动客机(这会重置 vTPM 寄存器)并执行修改后的固件。 如果成功,攻击者可能会播放任意测量,并使远程证明失效。 |
此威胁通过 Hypervisor 缓解。客机重新启动时,Hypervisor 会将 UEFI 固件的干净副本加载到客机内存。先前在客机内存中的修改将被舍弃。此外,客机重新启动是重置 vTPM 的唯一事件。 | 在 Google Cloud 中并通过启用机密计算 |
攻击者修改未测量的配置文件,这会对程序执行产生负面影响。 | 此威胁通过证明过程缓解。在运行之前,系统会完全测量所有可执行的二进制文件和相应的配置文件。 具体而言,会测量安全启动变量、grub 配置和内核命令行参数。 安全审核发现,证明过程中未错过任何测量结果。 |
在 Confidential Space 映像内 |
攻击者会在前期启动组件中触发内存损坏漏洞,并获取代码执行权限。 | 前期启动组件是使用 C 语言编写的。这些组件会处理不受信任的用户数据,并且可能容易受到内存损坏问题影响。如需查看近期示例,请参阅 BootHole。
此风险通过证明过程缓解:前期启动组件必须先测量所有用户控制的数据,然后才能对其进行处理。BootHole 攻击使用修改后的
但是,在 Confidential Space 系统中,该攻击无法通过证明,因为 相关风险来自复杂的文件系统逻辑。诸如 Sequoia 之类的过去漏洞表明文件系统驱动程序会处理复杂的数据结构,可能容易受到内存损坏问题影响。
此风险通过使用块级 |
在 Confidential Space 映像内 |
攻击者会在读取和测量磁盘上的早期启动二进制文件之后、但在读取和执行这些二进制文件之前来修改这些二进制文件(磁盘 TOCTOU)。 | 前期启动组件专为裸机而构建,预计不会使用云动态环境。启动组件可能会假设磁盘内容在执行期间无法更改,但对于云环境而言,这种假设不正确。 此风险通过使用防御性编程来缓解:只使用读取、测量、执行模式读取磁盘内容一次。 对 Confidential Space 映像的安全审核在前期启动组件(如 UEFI、Shim或 GNU GRUB)中未识别 TOCTOU 问题。 |
在 Confidential Space 映像内 |
加载内核后,攻击者会修改磁盘上的设备驱动程序和用户模式服务。 | 此威胁通过具有完整性保护功能的根文件系统缓解。
Confidential Space 映像中的 |
在 Confidential Space 映像内 |
针对容器启动器的攻击
下表介绍了与启动器相关的潜在威胁和缓解策略。
威胁 | 缓解措施 | 缓解措施实施 |
---|---|---|
攻击者会拦截启动器或映像代码库的网络连接。 | 与映像代码库的连接受经过身份验证的加密 TLS 连接保护。 攻击者可能会更改映像网址并控制工作负载二进制文件。但是,这些操作会在证明日志中反映。 映像代码库并非使用访问权限列表控制,因此假定映像可供所有人查看。您必须确保工作负载容器映像不包含任何 Secret。 |
在 Confidential Space 映像内 |
下载并测量磁盘上的工作负载映像后,攻击者会对其进行修改。 | 此威胁通过加密且其完整性受保护的可写入分区缓解。
工作负载映像及其临时数据由
|
在 Confidential Space 映像内 |
攻击者会修改元数据服务器中的启动器配置,并控制映像代码库网址。 | 证明过程会检测加载非原装映像的不安全配置。 | 在证明服务内 |
针对证明服务的攻击
下表介绍了与证明服务相关的潜在威胁和缓解策略。
威胁 | 缓解措施 | 缓解措施实施 |
---|---|---|
攻击者会拦截启动器或证明服务的网络连接,并从线路中读取 Secret 令牌。 | 此威胁通过经过身份验证的加密 TLS 连接来缓解。此连接有助于防止令牌受到被动窃听。 攻击者无法冒充该服务,因为他们缺少 TLS 密钥。即使冒充成功,攻击者也无法创建有效的 OIDC 令牌。 攻击者无法冒充有效的客户端,因为客户端身份由证明协议保证。 |
在工作负载与证明服务之间的网络内。 |
攻击者利用解析差异,从而导致证明过程中检测不到的更改。 | 出现此威胁的原因是测量事件日志被序列化并发送到证明服务,在证明服务中会解析和处理事件日志。 如果服务和运行时操作系统不同意日志的语义,就会发生解析差异。
例如,如果
此风险通过使用可正确反映操作系统行为的解析引擎来缓解。具体而言, |
在 Confidential Space 映像内 |
攻击者使用所有服务资源,进而导致拒绝服务 (DoS) 攻击。为其他 Confidential Space 用户中断服务。 | 此可靠性风险通过使用分布式弹性服务(可根据需要轻松复制和横向扩容)来缓解。 代码可以防止恶意客户端耗尽资源。 |
在工作负载中 |
针对工作负载的攻击
下表介绍了与工作负载相关的潜在威胁和缓解策略。
威胁 | 缓解措施 | 缓解措施实施 |
---|---|---|
攻击者会从可写分区中读取运行时 Secret。 |
此威胁通过加密文件系统来缓解。可写文件系统是使用 作为一项纵深防御技术,限定 OIDC 令牌的范围并使它的有效期短。 |
在 Confidential Space 映像内 |
攻击者会从串行控制台中读取运行时 Secret。 | 此威胁在 Confidential Space 映像中缓解,因为不会将凭据和令牌绝输出到串行控制台。此外,停用 Cloud Logging。 | 在 Confidential Space 映像内 |
攻击者会使用 OSLogin 软件包更新授权 SSH 密钥,然后连接到正在运行的实例。 |
此威胁在 Confidential Space 映像中缓解,因为默认 systemd 服务被遮盖,包括 sshd 。 |
在 Confidential Space 映像内 |
攻击者会更新元数据服务器中的启动脚本,这些脚本将由访客代理自动加载。 | 此威胁在 Confidential Space 映像中缓解,因为客机代理软件包已停用。 | 在 Confidential Space 映像内 |
攻击者会使用 OS Config 代理将坏的软件包推送到虚拟机。 | 此威胁在 Confidential Space 映像中缓解,因为 OS Config 代理已停用。 | 在 Confidential Space 映像内 |
攻击者会将格式错误的加密数据集传递给工作负载。 | 此威胁通过在工作负载中使用防御性解析代码来缓解。 | 在工作负载中 |
攻击者将有偏差或下了毒的数据集传递给工作负载,并尝试从其他各方获取有关数据集的信息。 | 此威胁通过在工作负载中实现差分隐私控制措施来缓解。 | 在工作负载中 |
安全测试
Confidential Space 经过了 Google 的全面安全审核流程。此安全审核流程包含以下测试和审核:
负流端到端集成测试
这些测试验证了证明在坏的测量中失败,例如代码在意外的 TEE 环境中运行时或启动被修改过的工作负载容器时。
手动审核测量启动过程
该审核侧重于确定缺失的测量和重复读取错误。测试验证了在编写时代码遵循了安全性方面的最佳做法,并在出现故障时代码会关闭(关停)。
手动审核 Confidential Space 映像和启动器逻辑的构建流程:
该审核侧重于移除软件包和减少攻击面。
手动审核证明服务
该审核侧重于实现正确的证明协议,并避免解析问题。
由网络安全专家进行的加密审核
该审核侧重于证明协议、文件系统加密和完整性解决方案。
由隐私设置专家进行的隐私权审核
该审核侧重于由 Google 编写的工作负载中的差分隐私控制。
持续模糊测试
这些测试涵盖安全关键组件,例如 vTPM 和证明服务。
NCC Group(一个外部渗透组织)对系统执行渗透测试。NCC 已审核 Confidential Space ,认为它是一个安全的计算平台。
后续步骤
- 如需开始使用 Confidential Space,请参阅使用 Confidential Space 分析机密数据。
- 如需收听我们的 Next 2022 演示,请参阅机密计算有哪些新变化?。
- 如需阅读我们的公告博客,请参阅介绍 Confidential Space 以帮助发掘安全数据协作的价值。
如需详细了解如何保护使用中的数据,请参阅机密计算。
如需详细了解 Google 基础架构安全,请参阅 Google 基础架构安全设计概览。