2. AMD EPYC平台安全架构解析

AMD EPYC 的安全能力并非单一模块的附加功能,而是从 Zen 微架构、片上安全处理器、平台安全处理器(PSP)、硬件信任根到启动链验证逐层构建的纵深体系。理解这条链的关键,是分清“谁先被信任、谁验证谁、验证失败会怎样”。本节按信任建立顺序展开,先讲各层职责,再落到可观察的启动与验证过程。

Zen 架构中的安全底座

Zen 核心本身提供多项与安全直接相关的基础机制。首先是 SMEP/SMAP(Supervisor Mode Execution/Access Prevention),防止内核态代码执行或访问用户态页,抑制提权攻击中的跳转利用。其次是 SMAP 与 KPTI 配合,在页表层面隔离用户与内核地址空间。第三是 内存加密引擎(SME/SEV),SME 对整机内存加密,SEV 则按虚拟机粒度加密,使 Hypervisor 也无法读取 Guest 明文。第四是 控制流强制技术(CET) 的硬件支持,通过影子栈校验返回地址,缓解 ROP 类攻击。

这些特性属于“被动防护”,需要固件与操作系统正确启用。例如 SEV 需要在 BIOS 中开启 SME,并在 Guest 启动时由 Hypervisor 下发加密标志;若未启用,内存仍以明文存在。因此 Zen 安全特性是能力集,不是默认生效的开关。

平台安全处理器(PSP)与安全处理器

EPYC SoC 内嵌一个基于 ARM Cortex-A5 的 平台安全处理器(PSP),它独立于 x86 核心运行,拥有自己的 ROM、SRAM 和密钥存储区。PSP 是整颗芯片的“安全管家”,负责:上电初始化、固件验证、密钥管理、SEV 虚拟机生命周期管理、安全协处理器命令处理。它运行的是 AMD 签名固件,外部无法直接读取其内部密钥。

与 PSP 并列的还有 安全处理器(Security Processor) 概念,在 EPYC 语境中通常指 PSP 及其固件子系统。PSP 内部包含一个只读的 片上信任根(Hardware Root of Trust),其中固化 AMD 公钥哈希。上电后,PSP 首先用该公钥验证自身固件签名,验证通过才继续执行;这一步是整个信任链的起点,无法被软件绕过。

AMD EPYC 信任根与启动链验证路径 片上硬件信任根 固化 AMD 公钥哈希 PSP 片上 ROM 验证 PSP 固件签名 PSP 固件运行 密钥管理 / SEV 控制 验证 BIOS/UEFI 固件 RSA/ECDSA 签名校验 · 失败则停机 验证启动加载器 / OS Loader Secure Boot 策略链 操作系统内核启动 SME/SEV 内存加密生效 验证失败处理 拒绝执行 · 记录事件 · 平台停机 信任链核心原则 ① 每一级只信任上一级验证结果 ② 验证对象为固件镜像的签名摘要 ③ 公钥哈希固化于片上 ROM,不可改 ④ 任一环节失败即终止启动 ⑤ PSP 独立于 x86 核心,先于核心运行 ⑥ 信任根不可被软件替换或绕过

信任根与启动链验证机制

EPYC 的启动链遵循“逐级验证、失败即停”的原则。上电后,x86 核心尚未执行任何指令,PSP 已从片上 ROM 启动。ROM 代码用固化公钥验证 PSP 固件镜像的签名;通过后,PSP 固件接管,继续验证 BIOS/UEFI 固件。BIOS 验证通过后,再由 BIOS 验证启动加载器与操作系统内核。每一级只信任上一级的验证结果,形成一条不可跳过的信任链。

验证对象通常是固件镜像的 数字签名与哈希摘要。以 BIOS 验证为例,AMD 平台使用 RSA-2048 或 ECDSA P-384 签名,PSP 计算镜像哈希并与签名解密后的摘要比对。若不一致,PSP 拒绝释放 x86 核心复位,平台停留在停机状态,同时可通过 BMC 或串口读取事件日志。这一机制意味着:即使攻击者替换了 BIOS 芯片,没有 AMD 私钥签名也无法通过验证。

SEV 与启动链的衔接

SEV 的安全前提是启动链可信。PSP 在验证完固件后,才允许 Hypervisor 创建加密 Guest。每个 Guest 拥有独立的 VM 加密密钥(VEK),由 PSP 生成并保存在芯片内,Hypervisor 只能看到密文。Guest 启动时,PSP 度量其初始内存镜像,生成 度量值(Measurement),供远程证明使用。远程证明方将度量值与预期基线比对,判断 Guest 是否被篡改。

实际部署中,可通过以下命令查看 SEV 状态与度量:

# 查看 SEV 固件与平台状态
sudo dmesg | grep -i sev
# 输出示例:
# SEV: SEV firmware version 1.55 build 0
# SEV: SEV API version 1.55
# SEV: SNP enabled

# 查看 SEV Guest 度量(需在 Guest 内执行)
sudo sevctl measurement build
# 输出包含 measurement 字段,用于与基线比对

若 dmesg 中未出现 SEV 相关行,通常说明 BIOS 未开启 SME/SEV,或 PSP 固件版本过低。此时应先升级 BIOS 与 PSP 固件,再在 BIOS 中启用 SME Control 与 SEV-ES/SEV-SNP 选项。

关键配置与检查要点

要让上述安全机制真正生效,需要关注以下配置项:

  • BIOS 中启用 Secure Boot,并确认平台密钥(PK)、密钥交换密钥(KEK)已正确写入。
  • 启用 SME/SEV,在 BIOS 的 Memory Encryption 菜单中设置;SEV-SNP 需较新固件支持。
  • 保持 PSP 固件为最新,AMD 会通过 BIOS 更新包发布 PSP 固件,旧版本可能存在已知漏洞。
  • 检查启动链日志,通过 BMC 的 SEL 日志或 AMD 提供的工具读取验证失败事件。
  • 远程证明基线管理,记录正常 Guest 的度量值,作为后续比对的参考。
在虚拟化环境中,SEV 的加密粒度是虚拟机,而 SME 是整机内存加密。若同时启用,Guest 内存受 SEV 保护,Hypervisor 内存受 SME 保护,两者互不冲突。部署前应确认 CPU 型号支持的具体 SEV 版本,例如 EPYC 7002 系列支持 SEV-ES,7003 系列进一步支持 SEV-SNP。

整体来看,EPYC 的安全架构以 PSP 和片上信任根为锚点,向上串联固件验证、启动加载器验证与操作系统启动,向下支撑 SEV 虚拟机加密与远程证明。理解这条链的每一环,才能在配置和排障时准确判断问题出在信任根、固件签名、BIOS 设置还是 Guest 度量环节。