xref: /linux/Documentation/translations/zh_CN/security/snp-tdx-threat-model.rst (revision bbfd5594756011167b8f8de9a00e0c946afda1e6)
1*8d57fd6fSYuxian Mao.. SPDX-License-Identifier: GPL-2.0
2*8d57fd6fSYuxian Mao.. include:: ../disclaimer-zh_CN.rst
3*8d57fd6fSYuxian Mao
4*8d57fd6fSYuxian Mao:Original: Documentation/security/snp-tdx-threat-model.rst
5*8d57fd6fSYuxian Mao
6*8d57fd6fSYuxian Mao:翻译:
7*8d57fd6fSYuxian Mao
8*8d57fd6fSYuxian Mao 毛玉贤 Yuxian Mao <maoyuxian@cqsoftware.com.cn>
9*8d57fd6fSYuxian Mao
10*8d57fd6fSYuxian Mao==========================
11*8d57fd6fSYuxian MaoLinux中x86虚拟化的机密计算
12*8d57fd6fSYuxian Mao==========================
13*8d57fd6fSYuxian Mao
14*8d57fd6fSYuxian Mao.. contents:: :local:
15*8d57fd6fSYuxian Mao
16*8d57fd6fSYuxian MaoBy: Elena Reshetova <elena.reshetova@intel.com> and Carlos Bilbao <carlos.bilbao.osdev@gmail.com>
17*8d57fd6fSYuxian Mao
18*8d57fd6fSYuxian Mao动机
19*8d57fd6fSYuxian Mao====
20*8d57fd6fSYuxian Mao
21*8d57fd6fSYuxian Mao在x86虚拟环境中从事机密计算工作的内核开发人员,是基于一组与传统Linux内核
22*8d57fd6fSYuxian Mao威胁模型有所不同的假设条件下开展工作的。传统意义上,Linux威胁模型承认攻
23*8d57fd6fSYuxian Mao击者可以存在于用户空间,以及一小部分能够通过各种网络接口或有限的硬件特定
24*8d57fd6fSYuxian Mao暴露接口(如USB、Thunderbolt)与内核交互的外部攻击者。本文档的目的是解释
25*8d57fd6fSYuxian Mao在机密计算领域中出现的额外攻击向量,并讨论为 Linux 内核提出的保护机制。
26*8d57fd6fSYuxian Mao
27*8d57fd6fSYuxian Mao概述与术语
28*8d57fd6fSYuxian Mao==========
29*8d57fd6fSYuxian Mao
30*8d57fd6fSYuxian Mao机密计算(Confidential Computing,简称CoCo)是一个广泛的术语,涵盖了多种
31*8d57fd6fSYuxian Mao旨在保护数据在使用过程中(与静态数据或传输数据相比)的机密性和完整性的安
32*8d57fd6fSYuxian Mao全技术。从本质上讲,机密计算(CoCo)解决方案提供了一个受信任执行环境(TEE),
33*8d57fd6fSYuxian Mao在该环境中可以进行安全的数据处理,因此,它们通常根据预期在TEE中运行的软件
34*8d57fd6fSYuxian Mao来进一步划分为不同的子类型。本文档专注于一类针对虚拟化环境的机密计算技术
35*8d57fd6fSYuxian Mao(Confidential Computing, CoCo),这些技术允许在可信执行环境
36*8d57fd6fSYuxian Mao(Trusted Execution Environment, TEE)中运行虚拟机(VM)。从现在起,本文档
37*8d57fd6fSYuxian Mao将把这一类机密计算(CoCo)技术称为“虚拟化环境(VE)中的机密计算(CoCo)”。
38*8d57fd6fSYuxian Mao
39*8d57fd6fSYuxian Mao在虚拟化环境中,机密计算(CoCo)指的是一组硬件和/或软件技术,这些技术能够
40*8d57fd6fSYuxian Mao为在CoCo虚拟机(VM)内运行的软件提供更强的安全保障。具体来说,机密计算允许
41*8d57fd6fSYuxian Mao其用户确认所有软件组件的可信度,从而将其包含在精简的受信任计算基(TCB)中,
42*8d57fd6fSYuxian Mao这是基于机密计算具备验证这些受信组件状态的能力。
43*8d57fd6fSYuxian Mao
44*8d57fd6fSYuxian Mao虽然不同技术之间的具体实现细节有所不同,但所有现有机制都旨在为虚拟机的客户
45*8d57fd6fSYuxian Mao内存和执行状态(vCPU寄存器)提供更高的机密性和完整性,更严格地控制客户中断
46*8d57fd6fSYuxian Mao注入,并提供一些额外机制来控制客户与宿主机之间的页映射。有关x86特定解决方案
47*8d57fd6fSYuxian Mao的更多细节,可以参考
48*8d57fd6fSYuxian Mao:doc:`Intel Trust Domain Extensions (TDX) </arch/x86/tdx>` 和
49*8d57fd6fSYuxian Mao`AMD Memory Encryption <https://www.amd.com/system/files/techdocs/sev-snp-strengthening-vm-isolation-with-integrity-protection-and-more.pdf>`_.
50*8d57fd6fSYuxian Mao
51*8d57fd6fSYuxian Mao基本的机密计算(CoCo)客户布局包括宿主机、客户机、用于客户机与宿主机之间通信
52*8d57fd6fSYuxian Mao的接口、能够支持CoCo虚拟机(VM)的平台,以及一个在客户VM和底层平台之间充当安
53*8d57fd6fSYuxian Mao全管理员的可信中介。宿主机侧的虚拟机监视器(VMM)通常由传统VMM功能的一个子集
54*8d57fd6fSYuxian Mao组成,并仍然负责客户机生命周期的管理,即创建或销毁CoCo虚拟机、管理其对系统资
55*8d57fd6fSYuxian Mao源的访问等。然而,由于它通常不在CoCo VM的可信计算基(TCB)内,其访问权限受到
56*8d57fd6fSYuxian Mao限制,以确保实现安全目标。
57*8d57fd6fSYuxian Mao
58*8d57fd6fSYuxian Mao在下图中,"<--->" 线表示机密计算(CoCo)安全管理员与其余组件之间的双向通信通
59*8d57fd6fSYuxian Mao道或接口,这些组件包括客户机、宿主机和硬件(数据流)::
60*8d57fd6fSYuxian Mao
61*8d57fd6fSYuxian Mao    +-------------------+      +-----------------------+
62*8d57fd6fSYuxian Mao    | CoCo guest VM     |<---->|                       |
63*8d57fd6fSYuxian Mao    +-------------------+      |                       |
64*8d57fd6fSYuxian Mao      | Interfaces |           | CoCo security manager |
65*8d57fd6fSYuxian Mao    +-------------------+      |                       |
66*8d57fd6fSYuxian Mao    | Host VMM          |<---->|                       |
67*8d57fd6fSYuxian Mao    +-------------------+      |                       |
68*8d57fd6fSYuxian Mao                               |                       |
69*8d57fd6fSYuxian Mao    +--------------------+     |                       |
70*8d57fd6fSYuxian Mao    | CoCo platform      |<--->|                       |
71*8d57fd6fSYuxian Mao    +--------------------+     +-----------------------+
72*8d57fd6fSYuxian Mao
73*8d57fd6fSYuxian Mao机密计算(CoCo)安全管理器的具体细节在在不同技术之间存在显著差异。例如,在某
74*8d57fd6fSYuxian Mao些情况下,它可能通过硬件(HW)实现,而在其他情况下,它可能是纯软件(SW)实现。
75*8d57fd6fSYuxian Mao
76*8d57fd6fSYuxian Mao现有的Linux内核威胁模型
77*8d57fd6fSYuxian Mao=======================
78*8d57fd6fSYuxian Mao
79*8d57fd6fSYuxian Mao当前Linux内核威胁模型的总体组件包括::
80*8d57fd6fSYuxian Mao
81*8d57fd6fSYuxian Mao     +-----------------------+      +-------------------+
82*8d57fd6fSYuxian Mao     |                       |<---->| Userspace         |
83*8d57fd6fSYuxian Mao     |                       |      +-------------------+
84*8d57fd6fSYuxian Mao     |   External attack     |         | Interfaces |
85*8d57fd6fSYuxian Mao     |       vectors         |      +-------------------+
86*8d57fd6fSYuxian Mao     |                       |<---->| Linux Kernel      |
87*8d57fd6fSYuxian Mao     |                       |      +-------------------+
88*8d57fd6fSYuxian Mao     +-----------------------+      +-------------------+
89*8d57fd6fSYuxian Mao                                    | Bootloader/BIOS   |
90*8d57fd6fSYuxian Mao                                    +-------------------+
91*8d57fd6fSYuxian Mao                                    +-------------------+
92*8d57fd6fSYuxian Mao                                    | HW platform       |
93*8d57fd6fSYuxian Mao                                    +-------------------+
94*8d57fd6fSYuxian Mao
95*8d57fd6fSYuxian Mao在启动过程中,引导加载程序(bootloader)和内核之间也存在通信,但本图并未明确
96*8d57fd6fSYuxian Mao表示这一点。“接口”框表示允许内核与用户空间之间通信的各种接口。 这包括系统调用、
97*8d57fd6fSYuxian Mao内核 API、设备驱动程序等。
98*8d57fd6fSYuxian Mao
99*8d57fd6fSYuxian Mao现有的 Linux 内核威胁模型通常假设其在一个受信任的硬件平台上执行,并且所有固件
100*8d57fd6fSYuxian Mao和启动加载程序都包含在该平台的受信任计算基(TCB)中。主要攻击者驻留在用户空间
101*8d57fd6fSYuxian Mao中,来自用户空间的所有数据通常被认为是不可信的,除非用户空间具有足够的特权来
102*8d57fd6fSYuxian Mao执行受信任的操作。此外,通常还会考虑外部攻击者,包括那些能够访问启用的外部网络
103*8d57fd6fSYuxian Mao(例如以太网、无线网络、蓝牙)、暴露的硬件接口(例如 USB、Thunderbolt),以及
104*8d57fd6fSYuxian Mao能够离线修改磁盘内容的攻击者。
105*8d57fd6fSYuxian Mao
106*8d57fd6fSYuxian Mao关于外部攻击途径,值得注意的是,在大多数情况下,外部攻击者会首先尝试利用用户空
107*8d57fd6fSYuxian Mao间的漏洞,但攻击者也可能直接针对内核,特别是在宿主机具有物理访问权限的情况下。直
108*8d57fd6fSYuxian Mao接攻击内核的例子包括漏洞 CVE-2019-19524、CVE-2022-0435 和 CVE-2020-24490。
109*8d57fd6fSYuxian Mao
110*8d57fd6fSYuxian Mao机密计算威胁模型及其安全目标
111*8d57fd6fSYuxian Mao============================
112*8d57fd6fSYuxian Mao
113*8d57fd6fSYuxian Mao机密计算在上述攻击者列表中增加了一种新的攻击者类型:可能存在行为不当的宿主机
114*8d57fd6fSYuxian Mao(这可能包括传统虚拟机监视器VMM的部分组件或全部),由于其较大的软件攻击面,
115*8d57fd6fSYuxian Mao通常被置于CoCo VM TCB之外。需要注意的是,这并不意味着宿主机或VMM是故意恶意的,
116*8d57fd6fSYuxian Mao而是强调拥有一个较小的CoCo VM TCB具有安全价值。这种新型的攻击者可以被视为一种
117*8d57fd6fSYuxian Mao更强大的外部攻击者,因为它位于同一物理机器上(与远程网络攻击者不同),并且对
118*8d57fd6fSYuxian Mao客户机内核与大部分硬件的通信具有控制权::
119*8d57fd6fSYuxian Mao
120*8d57fd6fSYuxian Mao                                 +------------------------+
121*8d57fd6fSYuxian Mao                                 |    CoCo guest VM       |
122*8d57fd6fSYuxian Mao   +-----------------------+     |  +-------------------+ |
123*8d57fd6fSYuxian Mao   |                       |<--->|  | Userspace         | |
124*8d57fd6fSYuxian Mao   |                       |     |  +-------------------+ |
125*8d57fd6fSYuxian Mao   |   External attack     |     |     | Interfaces |     |
126*8d57fd6fSYuxian Mao   |       vectors         |     |  +-------------------+ |
127*8d57fd6fSYuxian Mao   |                       |<--->|  | Linux Kernel      | |
128*8d57fd6fSYuxian Mao   |                       |     |  +-------------------+ |
129*8d57fd6fSYuxian Mao   +-----------------------+     |  +-------------------+ |
130*8d57fd6fSYuxian Mao                                 |  | Bootloader/BIOS   | |
131*8d57fd6fSYuxian Mao   +-----------------------+     |  +-------------------+ |
132*8d57fd6fSYuxian Mao   |                       |<--->+------------------------+
133*8d57fd6fSYuxian Mao   |                       |          | Interfaces |
134*8d57fd6fSYuxian Mao   |                       |     +------------------------+
135*8d57fd6fSYuxian Mao   |     CoCo security     |<--->| Host/Host-side VMM |
136*8d57fd6fSYuxian Mao   |      manager          |     +------------------------+
137*8d57fd6fSYuxian Mao   |                       |     +------------------------+
138*8d57fd6fSYuxian Mao   |                       |<--->|   CoCo platform        |
139*8d57fd6fSYuxian Mao   +-----------------------+     +------------------------+
140*8d57fd6fSYuxian Mao
141*8d57fd6fSYuxian Mao传统上,宿主机对客户机数据拥有无限访问权限,并可以利用这种访问权限来攻击客户虚
142*8d57fd6fSYuxian Mao拟机。然而,机密计算(CoCo)系统通过添加诸如客户数据保密性和完整性保护等安全
143*8d57fd6fSYuxian Mao特性来缓解此类攻击。该威胁模型假设这些安全特性是可用且完好的。
144*8d57fd6fSYuxian Mao
145*8d57fd6fSYuxian Mao这个 **Linux内核机密计算虚拟机(CoCo VM)的安全目标** 可以总结如下:
146*8d57fd6fSYuxian Mao
147*8d57fd6fSYuxian Mao1. 保护CoCo客户机私有内存和寄存器的机密性和完整性。
148*8d57fd6fSYuxian Mao
149*8d57fd6fSYuxian Mao2. 防止宿主机特权升级到CoCo客户机Linux内核。虽然宿主机(及主机端虚拟机管理程序)
150*8d57fd6fSYuxian Mao   确实需要一定的特权来创建、销毁或暂停访客,但防止特权升级的部分目标是确保这些
151*8d57fd6fSYuxian Mao   操作不会为攻击者提供获取客户机内核访问权限的途径。
152*8d57fd6fSYuxian Mao
153*8d57fd6fSYuxian Mao上述安全目标导致了两个主要的**Linux内核机密计算虚拟机(CoCo VM)资产**:
154*8d57fd6fSYuxian Mao
155*8d57fd6fSYuxian Mao1. 客户机内核执行上下文。
156*8d57fd6fSYuxian Mao2. 客户机内核私有内存。
157*8d57fd6fSYuxian Mao
158*8d57fd6fSYuxian Mao宿主机对CoCo客户机资源具有完全控制权,并可以随时拒绝访问这些资源。资源的示例包
159*8d57fd6fSYuxian Mao括CPU时间、客户机可以消耗的内存、网络带宽等。因此,宿主机对CoCo客户机的拒绝服务
160*8d57fd6fSYuxian Mao(DoS)攻击超出了此威胁模型的范围。
161*8d57fd6fSYuxian Mao
162*8d57fd6fSYuxian MaoLinux CoCo虚拟机攻击面是指从CoCo客户机Linux内核暴露到不受信任的主机的任何接口,
163*8d57fd6fSYuxian Mao这些接口未被CoCo技术的软硬件保护所覆盖。这包括所有可能的侧信道攻击以及瞬态执
164*8d57fd6fSYuxian Mao行侧信道攻击。显式(非旁道)接口的示例包括访问端口I/O、内存映射I/O(MMIO)和
165*8d57fd6fSYuxian Mao直接内存访问(DMA)接口、访问PCI配置空间、特定于虚拟机管理程序(VMM)的超调用
166*8d57fd6fSYuxian Mao(指向主机端VMM)、访问共享内存页、主机允许注入到访客内核的中断,以及特定于
167*8d57fd6fSYuxian MaoCoCo技术的超调用(如果存在)。此外,在CoCo系统中,宿主机通常控制创建CoCo客户机
168*8d57fd6fSYuxian Mao的过程:它有方法将固件和引导程序镜像、内核镜像以及内核命令行加载到客户机中。所有
169*8d57fd6fSYuxian Mao这些数据在通过证明机制确认其完整性和真实性之前,都应视为不可信的。
170*8d57fd6fSYuxian Mao
171*8d57fd6fSYuxian Mao下表显示了针对CoCo客户机Linux内核的威胁矩阵,但并未讨论潜在的缓解策略。该矩阵涉
172*8d57fd6fSYuxian Mao及的是CoCo特定版本的客户机、宿主机和平台。
173*8d57fd6fSYuxian Mao
174*8d57fd6fSYuxian Mao.. list-table:: CoCo Linux客户机内核威胁矩阵
175*8d57fd6fSYuxian Mao   :widths: auto
176*8d57fd6fSYuxian Mao   :align: center
177*8d57fd6fSYuxian Mao   :header-rows: 1
178*8d57fd6fSYuxian Mao
179*8d57fd6fSYuxian Mao   * - 威胁名称
180*8d57fd6fSYuxian Mao     - 威胁描述
181*8d57fd6fSYuxian Mao
182*8d57fd6fSYuxian Mao   * - 客户机恶意配置
183*8d57fd6fSYuxian Mao     - 一个行为不当的主机修改了以下其中一个客户机的配置:
184*8d57fd6fSYuxian Mao
185*8d57fd6fSYuxian Mao       1. 客户机固件或引导加载程序
186*8d57fd6fSYuxian Mao
187*8d57fd6fSYuxian Mao       2. 客户机内核或模块二进制文件
188*8d57fd6fSYuxian Mao
189*8d57fd6fSYuxian Mao       3. 客户机命令行参数
190*8d57fd6fSYuxian Mao
191*8d57fd6fSYuxian Mao       这使得宿主机能够破坏在CoCo客户虚拟机内部运行代码的完整性,从而违反了机密计算
192*8d57fd6fSYuxian Mao       (CoCo)的安全目标。
193*8d57fd6fSYuxian Mao
194*8d57fd6fSYuxian Mao   * - CoCo客户机数据攻击
195*8d57fd6fSYuxian Mao     - 一个行为不当的宿主机对CoCo客户虚拟机与宿主机管理的物理或虚拟设备之间传输的数
196*8d57fd6fSYuxian Mao       据拥有完全控制权。这使得宿主机可以对这类数据的保密性、完整性和新鲜性进行任何攻击。
197*8d57fd6fSYuxian Mao
198*8d57fd6fSYuxian Mao   * - 格式错误的运行时输入
199*8d57fd6fSYuxian Mao     - 一个行为不当的宿主机通过客户机内核代码使用的任意通信接口注入格式错误的输入。
200*8d57fd6fSYuxian Mao       如果代码没有正确处理这些输入,这可能导致从宿主机到客户机内核的特权提升。这包
201*8d57fd6fSYuxian Mao       括传统的侧信道攻击和/或瞬态执行攻击路径。
202*8d57fd6fSYuxian Mao
203*8d57fd6fSYuxian Mao   * - 恶意运行时输入
204*8d57fd6fSYuxian Mao     - 一个行为不当的宿主机通过客户机内核代码使用的任意通信接口注入特定的输入值。与之前
205*8d57fd6fSYuxian Mao       的攻击向量(格式错误的运行时输入)不同,这个输入并非格式错误,而是其值被精心设
206*8d57fd6fSYuxian Mao       计以影响客户机内核的安全性。这类输入的例子包括向客户机提供恶意的时间或向客户机
207*8d57fd6fSYuxian Mao       的随机数生成器提供熵值。此外,如果它导致客户机内核执行特定操作(例如处理主机注
208*8d57fd6fSYuxian Mao       入的中断),此类事件的时序本身也可能成为一种攻击路径。这种攻击是对提供的宿主机输
209*8d57fd6fSYuxian Mao       入具有抵抗性的一种方式。
210