CXL 内存池信任污染

摘要 Compute Express Link(CXL)3.0 通过 Type 3 内存扩展设备实现了多主机共享内存池,为云原生架构提供了前所未有的内存弹性。然而,共享意味着信任边界的扩张:当多个虚拟机(VM)通过 CXL 交换机共享同一物理内存池时,内存页的生命周期管理与安全隔离完全依赖于主机侧的内存分配器和 CXL 设备固件。如果设备在页释放后未执行可靠的清零或加密边界切换,攻击者便可在合法 VM 释放共享页后,立即从另一台主机申请分配同一物理页,读取前一个租户的残留数据——包括加密密钥、凭证和模型参数。更严重的是,部分 CXL 设备固件未严格验证主机发来的 HDM 地址范围,允许跨域访问。 CXL内存池 CXL协议与Type 3设备 CXL 构建在 PCIe 物理层之上,提供三种协议:CXL.io(用于配置和控制)、CXL.cache(用于缓存一致性)和 CXL.mem(用于内存访问)。Type 3 设备(如内存扩展卡)仅实现 CXL.io 和 CXL.mem,不参与缓存一致性,主要提供大容量内存扩展。 在 CXL 3.0 中,多主机共享内存池成为可能。通过 CXL 交换机和 Fabric Manager,多个主机(或虚拟机管理程序)可以访问同一块 Type 3 设备上的内存区域。这种架构允许动态分配和释放内存资源,提高数据中心的利用率。 多主机共享内存池 共享内存池打破了传统“一个主机一块内存”的边界。CXL 设备上的物理内存被划分为多个主机物理地址空间(Host Physical Address Space, HPAS),每个主机通过 HDM(Host-managed Device Memory)解码器将其分配给自己的地址空间。 安全性挑战在于: 内存释放后的数据残留:当一台主机释放一块 CXL…

Keystone Enclave 页面故障信道

摘要 Keystone 是 RISC-V 上最成熟的开源 TEE 框架,其安全模型依赖于机器模式安全监视器(SM)对物理内存保护(PMP)的独占控制。然而,在 Enclave 创建与首次进入之间的初始化窗口中,PMP 条目的锁定位可能未被全部置位,攻击者可以回滚或覆盖这些条目,将 Enclave 的私有物理页重新映射到攻击者控制的 S-mode 地址空间。一旦 Enclave 执行期间发生页面故障,SM 的处理器会基于被篡改的 PMP 配置错误地授予访问权限,攻击者即可利用页面故障处理路径作为侧信道,逐步提取 Enclave 内的加密密钥和敏感数据。 Keystone 架构与 PMP 信任模型 Keystone层次化隔离 Keystone 在 RISC-V 特权等级上构建了三个执行层: M-mode:安全监视器(SM),最高特权级,负责管理 Enclave 生命周期、内存隔离和证明。 S-mode:RISC-V 操作系统内核(如 Linux),运行不可信代码,可被攻击者控制。 U-mode:用户态应用,包括 Enclave 内部的用户代码(通过 libkeystone 加载)。 Keystone 采用 PMP 物理内存隔离 而非页表虚拟化来实现 Enclave 的内存保护。在 RISC-V 中,PMP 允许 M-mode 定义物理地址区域及其访问权限(R/W/X),对于 S-mode 及更低特权级强制执行。Keystone 利用 PMP…

Intel TDX MMIO 暗门

摘要 Intel Trust Domain Extensions 通过内存加密和 MRTD 测量为信任域提供硬件级隔离,使 VM 免受即使已被攻陷的 VMM 的侵害。然而,TD 与 VMM 之间共享内存的设计引入了一个根本性的信任悖论:TD 依赖 VMM 维护的 EPT 映射来访问共享页,而 EPT 由不可信的 VMM 完全控制。攻击者(即恶意 VMM)可在 TD 向共享页写入数据后、读取响应前的极短时间内,将 EPT 中的 GPA→HPA 映射切换到包含恶意数据的物理页,实现 L2 地址劫持。由于 TDX 的运行时 EPT 变更不会被证明报告捕获,该攻击可完全绕过远程验证。 TDX 的信任边界 信任域与不可信 VMM Intel TDX 将虚拟机封装为信任域,其内存由 MKTME(多密钥全内存加密)引擎使用 TD 私钥加密,VMM 无法解密读取。TD 的 CPU 状态、寄存器和缓存也被隔离。远程验证方通过 MRTD(TD 内容的 SHA-384 测量)确认…

AMD SEV-SNP测量欺骗

摘要 AMD SEV-SNP 通过启动测量生成 VM 初始状态的 SHA-384 哈希,并由平台安全处理器签名为远程证明报告,为机密计算提供信任根基。然而,测量的累积过程包含多个可变但可控的输入——OVMF 固件版本、内核命令行、initrd 内容——且测量日志在 VM 启动后可被恶意 VMM 篡改。攻击者可在合法 VM 完成测量后,利用迁移接口替换测量日志中的条目,将恶意启动配置伪装成预期值;更危险的是,若利用 SHA-384 的碰撞攻击在 OVMF 固件页中注入后门,测量值可保持不变,使得从密码学验证到真实安全之间存在一道无法闭合的鸿沟。 SEV-SNP 远程证明与启动测量的信任模型 SEV-SNP 的测量累积机制 SEV-SNP 的启动测量(Launch Measurement)并非一次性计算,而是在 VM 启动过程中逐步累积的。平台安全处理器(PSP)维护一个测量寄存器,每次向 VM 加载新的内存页(通过 sev_launch_update 调用)时,PSP 都会根据预设的顺序将页面内容或元数据哈希到累积测量中。测量内容包括: 初始 VMSA 页面(VM 状态) 客户页表 OVMF 固件代码 内核命令行参数 initrd 镜像内容 每个组件的测量顺序由启动协议决定,任何顺序错乱或内容变化都会导致最终测量值不同。启动完成后,PSP 生成一个签名的证明报告(Attestation Report),其中包含最终测量值、VM 配置(策略、ASID 等)和平台证书链,远程验证方据此判断 VM 的启动状态是否可信。 证明报告中的信任链 证明报告的签名由 PSP 内置的 SEV 签名密钥(VLEK…

iOS 的 FUSE 盲区

摘要 iOS 的 Live Photos 将一段 HEIC 静止帧与 MOV 视频封装在同一资产中,其视频轨道由 CoreMedia 框架解析。MOV 文件基于原子结构,其中 tkhd 原子包含一个 3×3 变换矩阵,CoreMedia 在读取该矩阵的旋转与缩放参数时,存在一个整数溢出漏洞:当矩阵的 a 或 d 字段被刻意设置为极大的 16.16 定点数时,随后进行的乘法运算可导致宽或高变为负值,进而触发越界堆写入。攻击者可将恶意制作的 MOV 嵌入 Live Photos 资产中,通过 QuickLook 预览或 iMessage 自动下载触发 quicklookd 解析,利用此漏洞打破相册沙箱的边界,读取其他照片、视频文件内容。 Live Photos 与 MOV 原子结构 Live Photos 的双轨资产 苹果的 Live Photos 在拍摄时同时记录一张 HEIC 格式的静止帧和一段约 3 秒的 MOV 视频(通常 1440×1080,15fps)。这两个文件被存储在一个名为 IMG_XXXX.photolibrary 或直接配对(IMG_XXXX.HEIC 与 IMG_XXXX.MOV)的包结构中。当用户通过 QuickLook 预览 Live Photos 或接收…

WebRTC 插入流音频劫持

摘要 WebRTC 通过 RTCRtpSender.setParameters() 允许动态调整编码参数,其 encodings 数组用于描述 simulcast 各层的 rid 和 active 状态。然而,Chromium 实现中,对该数组与底层 RTP 流同步源的映射更新并非原子操作——攻击者可在重协商信令阶段插入一个携带伪造 rid 的高优先级编码条目,调用 setParameters() 后,内部编码器可能为这个新条目分配独立的 SSRC,而该 SSRC 并未出现在远端 SDP 中。此时音频数据会被同时发送到合法接收者和攻击者控制的 SSRC,形成无声监听。更隐蔽的是,利用 RTCRtpContributingSource 统计信息无法及时反映这一变化,使得劫持长期隐匿。 Simulcast与RTCRtpEncodingParameters的映射关系 Simulcast 的 RID 与 SSRC WebRTC 的 Simulcast 允许一个发送器(RTCRtpSender)同时生成多个不同码率或分辨率的视频/音频流,每个流由一个独立的 SSRC 标识。 在 SDP 协商中,a=simulcast:send 属性声明了这些流的 rid(Restriction Identifier),接收方根据 rid 识别流。例如: a=simulcast:send low;medium;high a=rid:low send pt=96;max-br=100000 a=rid:medium send pt=96;max-br=500000 a=rid:high send pt=96;max-br=1000000 在发送方,RTCRtpSender.getParameters().encodings 返回一个数组,每个元素对应一个 simulcast 层,包含 rid、active、maxBitrate 等属性。底层媒体引擎根据这些参数创建独立的 RTP 编码流,每个流对应唯一的 SSRC,并且该 SSRC 会通过 a=ssrc: 属性在 SDP 中声明。正常情况下,rid 与 SSRC 的映射在 setParameters() 调用后保持不变,除非明确移除或禁用某层。 setParameters的非原子性 setParameters() 允许修改 encodings 数组的某些字段(在…