Trusted Computing Base(可信计算基)

Trusted Computing Base(可信计算基)初步理解

也可以看看这篇https://zhuanlan.zhihu.com/p/636986528

1. 定义:TCB 到底是什么?

  • 标准定义(DoD 5200.28-STD,即“橘皮书”):
    “TCB 是硬件、固件、软件的集合,它们共同负责执行安全策略;系统对安全策略的信任完全依赖于这个集合的正确性。”
  • 一句话记忆:TCB 是“可信根”的放大版——除了根本身,还加上所有必须被信任的组件(操作系统内核、具有特权的驱动、安全协处理器、BIOS/UEFI、虚拟化层等)。
  • 关键属性
    • 必须在最小化原则下构建(越小越容易验证)。
    • 必须提供隔离、引用监控机(Reference Monitor)、完整性度量、身份鉴别四个机制。

2. 作用:为什么非要 TCB?

攻击面无 TCB 的后果TCB 的防护方式
内核 Rootkit 全系统沦陷 内核代码段只读、运行时完整性度量
恶意设备驱动 提权、DMA 攻击 驱动数字签名、IOMMU 隔离
供应链篡改 固件/微码植入后门 启动链度量(Boot Guard、DRTM)
虚拟化逃逸 云租户互窜 虚拟机监控器作为 TCB 一部分,强制 VM Exit 检查
一句话总结:TCB 是“安全假设”的边界;边界外的代码可以出错,边界内的代码不能出错,否则安全模型崩塌。

3. 典型架构:怎么落地 TCB?

  1. 硬件层
    • Intel TXT / AMD SVM:提供 Dynamic Root of Trust for Measurement (DRTM)。
    • ARM TrustZone:把 SoC 切分为 Normal World / Secure World。
    • TPM 2.0 / TPCM:安全存储度量值、密钥、策略。
  2. 固件层
    • BIOS/UEFI + Boot Guard ACM:度量到 OS Loader。
    • S-CRTM(Static Core Root of Trust for Measurement):上电即开始度量。
  3. 内核 / 虚拟化层
    • 微内核设计(seL4、MINIX 3、Qubes OS):
      内核仅提供 IPC、调度、页表;驱动、文件系统全部用户态。
    • 虚拟机监控器(Xen, KVM, Hyper-V):把“VM 逃逸”风险缩小到 VMM 本身。
  4. 应用层
    • Intel SGX / AMD SEV-SNP:把 TCB 缩小到一个 enclave 或 VM 内部。
    • Google OpenTitan、Apple T2:专用安全芯片把 TCB 外移到独立硅片。

4. 开发 & 评估:如何“证明”TCB 可信?

方法说明对应标准
形式化验证 用数学证明内核或关键函数无缺陷 seL4 已证明内存安全;CC EAL7
渗透测试 + 模糊测试 找实现缺陷 US DoD STIG、NIST SP 800-53
供应链签名 固件/驱动/微码来源可追溯 UEFI Secure Boot、Reproducible Build
漏洞赏金 把未知缺陷转化为已知缺陷 Microsoft SGX Bounty、Apple Security Research Device

5. 2024-2025 年热点

  • CXL 2.0/3.0 安全扩展:把内存池化也纳入 TCB 边界,防止“跨主机的 DMA 攻击”。
  • 机密计算联盟(CCC):推动 TCB 向“可验证远程执行”演进(attestation、TEE)。
  • AI 加速器 TCB:GPU/NPU 驱动、固件也被纳入可信边界,防止模型窃取。
  • RISC-V 开放 TCB:基于 OpenTitan + CVA6,打造可审计的硬件 TCB。

速查表(便于 PPT/报告)

  • 定义公式:TCB = {CPU 微码,固件,内核,VMM,驱动,可信外设} ∩ {必须被信任的代码}
  • 设计原则:最小化、可验证、不可绕过、防篡改。
  • 验证三板斧:形式化证明 + 运行度量 + 远程证明。
 
 

“硬件 → 固件 → 内核 → 系统服务 → 应用” 五条纵深链路

下面把 Trusted Computing Base(TCB)拆成 “硬件 → 固件 → 内核 → 系统服务 → 应用” 五条纵深链路,逐条、逐寄存器、逐代码段地展开。读完以后,你能:
  • 在 x86/ARM/TPM 上把 TCB 边界画到寄存器级;
  • 用 30 行以内的伪代码写出一个最小可启动的“可信链”;
  • 在 CC/CSfC/FIPS 三个评估框架里挑一条路径把系统送测。

1. 硬件层:把“硅”当成第一条 TCB 语句

1.1 x86 启动链寄存器快照

阶段关键寄存器/结构安全意义攻击示例
Reset Vector 0xFFFFFFF0 → 跳转到 Boot ROM 第一条指令必须来自不可写闪存 “Boot Guard” 关闭后跳转到恶意闪存
FIT (Firmware Interface Table) 0xFFFFFF80 开始的 16 字节条目 指向 ACM(Authenticated Code Module) FIT 指针被改 ⇒ ACM 不被加载
ACM 0x1000 开始的 128 KB 代码 度量 BIOS → PCR[0] 旧版 ACM 已知漏洞
TPM PCR0 收到 SHA256(BIOS) 以后任何 PCR 扩展都依赖它 BIOS 升级后未重新密封 BitLocker

1.2 两条可信根对比

  • Static CRTM:上电即开始度量,缺点是不能改;
  • Dynamic CRTM(DRTM):GETSEC[SENTER]/SKINIT 指令在 OS 运行时重新建立根,用于“Late Launch”。

1.3 ARM TrustZone 寄存器级视图

  • SCR.NS 位:决定 CPU 处于 Secure World(0)还是 Normal World(1)。
  • TZASC(TrustZone Address Space Controller):把 DDR 切成安全/非安全两块,粒度 4 KB。
  • BPMP(Boot and Power Management Processor)里的 TZRAM 保存密钥,通电即有 TCB 属性。

2. 固件层:把 BIOS/UEFI 拆成 5 个可度量模块

模块度量顺序存储典型大小备注
SEC (Security) 1 ROM 4 KB 第一条指令
PEI (Pre-EFI Init) 2 ROM → RAM 64 KB 初始化内存
DXE (Driver eXecution Env) 3 RAM 512 KB 加载 Option ROM
BDS (Boot Device Select) 4 RAM 256 KB 选择启动项
OS Loader 5 硬盘/SSD 1-2 MB 最终控制权移交
伪代码:UEFI 里的度量钩子
c
VOID TcgMeasurePeImage(IN EFI_HANDLE ImageHandle) {
    EFI_IMAGE_DOS_HEADER *Dos = LoadImage(ImageHandle);
    EFI_IMAGE_NT_HEADERS *Nt  = (EFI_IMAGE_NT_HEADERS*)((UINT8*)Dos + Dos->e_lfanew);
    UINT8 Hash[SHA256_DIGEST_SIZE];
    sha256(Dos, Nt->OptionalHeader.SizeOfImage, Hash);
    Tpm2PcrExtend(TPM2_PCR_KERNEL, Hash);
}
 
如果你把 Tpm2PcrExtend 换成 Tpm2PcrEvent 还能把“度量日志”留给 OS 解析。

3. 内核 / VMM:把 Linux 裁成 2.5 MB 的 TCB

3.1 最小 TCB 内核配置(x86_64)

CONFIG_EMBEDDED=y
CONFIG_TINY_RCU=y
CONFIG_EXPERT=y
# 驱动全部 =m,只有以下 =y
CONFIG_DRM_VIRTIO_GPU=y      # 显示
CONFIG_VIRTIO_NET=y          # 网络
CONFIG_VIRTIO_BLK=y          # 块设备
CONFIG_SECURITY_SELINUX=y    # MAC
CONFIG_IMA=y                 # Integrity Measurement Architecture
CONFIG_EVM=y                 # Extended Verification Module
 
编译后:make tinyconfig && make -j$(nproc)bzImage 2.5 MB。
eu-readelf -S vmlinux | grep .text 可以看到 .text 只有 1.2 MB。

3.2 形式化验证路线

  • seL4:已证明 C 代码级“内存安全 + 信息流转” → 可直接作为 TCB。
  • Linux 部分验证:
    • Data61:验证 eBPF JIT 无越界;
    • Meta-elfverify:用 CBMC 验证 copy_to_user() 无越权写。

4. 系统服务:把 systemd 拆成最小 initrd

  • initrd 内容:
    • /init → BusyBox 静态链接 800 KB;
    • /lib/modules/5.x/virtio.ko 200 KB;
    • /etc/ima/ima-policy 3 行规则:
      Copy
      measure func=FILE_CHECK mask=MAY_READ uid=0
      measure func=MMAP_CHECK mask=MAY_EXEC uid=0
      measure func=BPRM_CHECK mask=MAY_EXEC uid=0
       
  • TPM 2.0 密封密钥:
    bash
    systemd-cryptsetup attach luks0 /dev/vda2 - tpm2-device=auto
     
    依赖 PCR7(Secure Boot 状态)+ PCR9(initrd 度量值)。

5. 应用层:把 SGX enclave 当 TCB 子集

5.1 最小 enclave(C 伪代码)

c
// enclave.edl
enclave {
    trusted {
        public int add(int a, int b);
    };
};

// enclave.cpp
int add(int a, int b) { return a + b; }
 
编译:
bash
sgx_edger8r enclave.edl --trusted  
g++ enclave_t.c enclave.cpp -lsgx_trts -o enclave.so
 
度量值(MRENCLAVE)固定 32 字节;用 sgx_sign 生成 SIGSTRUCT。

5.2 远程证明流程(简化 8 步)

  1. 客户端生成 ECDH 临时密钥对;
  2. 向 enclave 发送 ECDH_PubKey,enclave 内生成共享密钥;
  3. enclave 发送 REPORT → Quoting Enclave → QUOTE
  4. 客户端把 QUOTE 发送给 SP(Service Provider);
  5. SP 用 IAS(Intel Attestation Service)验证;
  6. IAS 返回 AVR(Attestation Verification Report);
  7. SP 用共享密钥派生会话密钥;
  8. 双方建立 TLS 1.3 通道,TCB 边界缩小到 enclave 内 100 KB 代码。

6. 评估与合规:三条可落地的认证路径

框架目标关键文档典型周期备注
Common Criteria 国际通用 CC EAL4+ / EAL7 12-24 月 需形式化证明到 EAL7
NIST FIPS 140-3 密码模块 IG 7.15 对 TCB 定义 6-9 月 只测加密边界
CSfC 美国国家安全 Component List + MDM 9-12 月 需双 TCB 冗余

7. 30 行伪代码:一条“最小可信链”

c
// 1. 硬件复位
asm volatile("cli");
write_msr(IA32_FEATURE_CONTROL, 0x7); // 开启 VMX/SMX
// 2. DRTM Launch
asm volatile("GETSEC[SENTER]");
// 3. ACM 度量 BIOS
tpm_extend(PCR0, hash_blob(BIOS_START, BIOS_END));
// 4. OS Loader 度量内核
tpm_extend(PCR9, hash_blob(KERNEL_START, KERNEL_END));
// 5. 内核度量 initrd
tpm_extend(PCR9, hash_blob(INITRD_START, INITRD_END));
// 6. 远程证明
quote = tpm_quote(PCR0|PCR9, nonce);
send_to_verifier(quote);
 
 

TCB out of data是怎么回事,怎么解决

“TCB out of data” 不是内存溢出,也不是文件损坏,而是 Intel SGX 远程证明(attestation)流程里的一个专用错误码,表示
“平台当前可信计算基(TCB)的版本低于 Intel 目前已签发的最新 PCK 证书所要求的最低版本,因而被判定为过期。”
 
在日志里通常长这样:
ERROR: sgx_qe_get_quote … 0xe019 /* SGX_QL_TCB_OUT_OF_DATE */
 

一、为什么会出现 TCB out of date

  1. Intel 定期发布 微码(microcode)/ ME / uCode 更新,用来修补漏洞(如 INTEL-SA-00615、00657)。
  2. 这些补丁会提高 PCESVN / TCB SVN 的值。
  3. 远程验证方(IAS / DCAP QVL)拿到平台的 QUOTE 后,会比对 TCB Info。
    • 如果平台 PCESVN < 最新 PCK 证书里的要求 ⇒ 抛出 TCB_OUT_OF_DATE。

二、快速自检 3 步

检查项命令/方法期望结果
微码版本 dmesg | grep microcode ≥ Intel 最新发布值
PSW / DCAP 版本 apt list --installed | grep sgx ≥ Intel 发布页最新
PCESVN PCKIDRetrievalTool | grep "certPceSvn" ≥ 官方 TCB Info.json 所列

三、一次性根治 4 步曲

以 Ubuntu 20.04 + DCAP 为例,其他发行版同理。
  1. 升级 BIOS / 微码
    bash
    sudo apt update
    sudo apt install intel-microcode   # 或到主板/OEM 官网下载 BIOS
    sudo reboot
     
  2. 升级 SGX 软件栈
    bash
    sudo apt install sgx-dcap-client sgx-aesm-service
    # 版本参考 Intel 官网 release notes
     
  3. 重新获取 PCK 证书
    bash
    # 生成新的 PCK 证书请求
    sudo PCKIDRetrievalTool -f pckid.csv
    # 上传到 Intel PCS 或 Azure THIM,拿到新的 PCK cert chain
     
  4. 验证
    bash
    sudo QuoteGenerationSample
    # 应该返回 0x0000 (success),不再出现 0xe019
     

四、常见坑 & 对策

场景症状解决
云厂商 VM(Azure DCsv3) 无法直连 Intel PCS 改用 THIM(Azure 提供的缓存服务),见官方 Quickstart
PCESVN 只差 1 已升级微码仍报 TCB_OUT_OF_DATE 确认 BIOS 里 “SGX TME”/“Total Memory Encryption” 是否启用,某些 BIOS 选项会锁 PCESVN
老主板无新 BIOS 无法升级 只能关闭 SGX 远程证明或申请 “Out-of-Date TCB Allow List”(Intel 商务流程,周期长)

五、一句话速记

“TCB out of date = 平台固件太旧,配不上 Intel 的最新身份证。”
“升 BIOS → 升微码 → 升 PSW/DCAP → 重抓 PCK,99% 问题解决。”
 
 

TCB out of date影响

一句话结论:
把 “TCB out of date” 理解成 “平台固件过期 → 远程证明失败 → 机密数据/密钥拒绝下发” 即可;程序本身不会崩溃,但所有依赖 SGX 保密性的功能会立即不可用。

1. 对程序的 5 种直接影响

场景具体表现错误码/日志
首次启动 远程证明失败,enclave 无法获得密钥 sgx_qe_get_quote 0xe019
 
密钥密封 BitLocker / LUKS-SGX 无法解开磁盘 failed to unseal disk key
机密容器 Docker --security-opt=sgx 启动即退出 tcbStatus=OutOfDate
AI 推理 大模型权重拒绝加载到 enclave model service unavailable
密钥轮换 旧密封 blob 无法迁移到新机器 migration blocked

2. 对运维 / 业务的 4 级连锁反应

  1. 服务 SLA 下跌
    云函数或微服务因启动失败触发冷启动重试,P99 延迟飙升。
  2. 合规审计红灯
    金融/政务系统无法提供“有效远程证明报告”,直接打回。
  3. 自动扩缩容卡住
    Kubernetes HPA 发现新 Pod 一直 CrashLoopBackOff,不再扩容。
  4. 灰度发布受阻
    新镜像的 enclave 度量值与老 TCB 不匹配,金丝雀流量为 0。

3. 临时止血 vs. 根治

目标方案时长副作用
立刻恢复业务 在验证端 允许 Out-of-Date TCB(需 Intel/云厂商白名单) 5 min 合规风险高
根治 升 BIOS → 升微码 → 升 PSW/DCAP → 重抓 PCK 证书 30 min-2 h 需重启节点
优雅降级 把机密计算流量切到非 SGX 实例 1 min 性能/安全性下降

4. 一句话总结

“TCB out of date” 不会导致程序崩溃,但会让任何依赖 SGX 远程证明、密钥密封或机密计算的流程全部停摆,等于把 SGX 降级成普通 CPU。
线上环境请优先“升级固件+微码”根治,测试环境可临时放宽验证策略
 
 

Intel 官方文档给出的 TCB 生命周期(TCB-Recovery)

Intel 把 TCB 的“失效 → 修复 → 再信任”过程称为 TCB-Recovery,分为 3 个阶段 :

阶段官方动作客户侧动作交付物
Vulnerability Handling PSIRT 评估 CVE → 打补丁(微码 / BIOS / PSW) 订阅 Intel-SA 通告 新版 MCU、BIOS、PSW
Deployment & Disclosure 发布 Best Known Configuration (BKC) 按 BKC 升级 GitHub 微码包 + RDC 文档
Remote Attestation 更新 TCB Info & PCK Cert 重新获取 PCK 证书 新版 TCBInfo.json
Grace Period:Intel 会预留一个“宽限期”,在此期间未打补丁的平台仍被视为可信,但宽限期结束后远程证明会返回 TCB_OUT_OF_DATE
Intel 官方把 TCB 定义为“达到 SGX/TDX 安全目标所必须全部硬件-固件-软件集合”,并通过“TCB-Recovery”机制定期发布微码/BKC,确保平台始终满足远程证明要求。
 
 
 以上结果来自Kimi
posted @ 2025-09-01 14:54  云long  阅读(107)  评论(0)    收藏  举报