单条汇编指令引发的内存坐标坍塌
2026 年 8 月 14 日,知名安全研究员 Christopher Domas(@xoreaxeaxeax)公开了一项名为 skitter-creek-bath-salts 的硬件研究。攻击者仅需执行一条汇编指令 xor dword [0xf80c2094], 0x00400000,就能瞬间粉碎现代 CPU 建立在物理地址之上的一切安全隔离。
这条指令翻转了 AMD 内存控制器中的 bank-swizzle-mode 寄存器位。修改该标志位后,硬件层面的物理地址到 DRAM 物理单元的映射规则被重新编排,直接导致程序运行中出现 &x != &x 的现象。所有部署在 CPU 与物理内存交界处的安全防线,在内存控制器下方的坐标重排面前瞬间形同虚设。
该项目在 GitHub 发布后迅速引发社区震动,开源首日即获得 1.3k Stars 与 116 次 Fork。代码库中提供了完整的测试工具链,包括 dram_read、dram_poke 与 dram_dump。开源工具链的释放降低了硬件级漏洞的复现门槛,标志着芯片物理映射攻击从理论推演迈入自动化利用阶段。
图:翻转 DRAM 控制器标志位后同一逻辑变量指向不同物理单元。来源:GitHub 仓库 examples/
坐标变换与线性代数的漏洞求解
在内存映射链条中,物理地址经过 DRAM 控制器(DCT)与主内存控制器(MCT)后被转换为实际物理坐标。AMD 平台设计了 bank-swizzle-mode 机制,通过异或运算散列物理地址,优化内存通道的并发访问效率。
当控制寄存器 0xf80c2094 的第 22 位被翻转时,内存控制器会将相同的物理地址路由至完全不同的 DRAM 行、列与 Bank 物理单元。寄存器翻转修改了内存控制器在抽象层下方执行的坐标变换函数,发送至总线的物理地址本身保持不变。建立在旧物理地址空间上的安全组件依然正常发起读取,而底层硬件却悄然返回了另一个物理区域的存储数据。
为了精准控制重排后的内存映射,Christopher Domas 引入了线性代数求解工具。由于 DRAM 地址交错算法属于 GF(2) 伽罗瓦域上的线性映射,攻击者收集有限的(目标地址,别名地址)数据对后,即可使用 Z3 SMT 求解器算出转换矩阵。基于矩阵映射的逆向推导,攻击者能以 100% 的确定性精确定位任意受保护区域在物理 DRAM 中的交错坐标。
图:利用线性映射矩阵重排 DRAM 坐标的实验拓扑。来源:GitHub 仓库 examples/
穿透 PSP、SMM 与微码暂存区
DRAM 控制器映射的重排直接摧毁了硬件平台上最高权限的几道隔离屏障。首先受影响的是 AMD 的平台安全处理器 PSP(Platform Security Processor)。PSP 作为独立 ARM 核心运行,系统为其在 DRAM 中划分了专属的加密私有区域(Carveout)。在重排映射下,攻击者成功定位并提取了跑在 PSP 之上的 fTPM 核心例程 crAmd_ModExp。即使拥有独立 CPU 架构与专属总线,一旦依赖共享 DRAM 控制器,加密硬件的私有内存依然无法抵御底层的坐标颠覆。
其次被攻破的是处于系统最高权限 Ring -2 的系统管理模式(SMRAM / SMM)。在此前的安全架构中,SMRAMLocked 标志位锁死后,硬件级机制会拦截任何非 SMM 模式对 SMRAM 物理地址的访问。但在翻转内存控制器标志位后,攻击者从普通内核态物理地址发起读写,请求却被物理映射直接投递至 SMBASE+0x8000 的 SMI 处理函数入口。硬件总线层面的地址校验只作用于入口处的物理地址标签,无法识别内存控制器内部的物理单元转接。
更为深远的影响体现在对 CPU 架构状态与微码的任意读写。现代 CPU 进入 C6 低功耗电源门控状态时,必须将当前架构状态暂存至专属 DRAM 区域。通过重排映射,攻击者不仅导出了 IA32_APIC_BASE、CR3、MTRR 寄存器以及挂起的 RIP 指令指针,更直接触达了保存在 C6 暂存区中的 CPU 微码补丁内存(Microcode Patch RAM)。攻击者获得了直接修改 CPU 内部微码执行逻辑的能力,使芯片级的运行时防御彻底崩溃。
信任根架构的层次错位
这一漏洞的爆发揭示了现代计算机体系结构中一个长期被忽视的盲区:安全原语的定义层级与实际硬件转换层级存在倒错。过去数十年间,无论是一把锁死物理内存的 SMRAM 寄存器,还是基于地址范围做隔离校验的芯片组硬件,其逻辑前提均假设物理地址是绝对且唯一的数据坐标。
然而 DRAM 控制器恰好位于这些硬件安全围栏的下方。在硬件调用链中,CPU 保护机制在物理总线入口完成校验并予以放行,因为该物理地址完全合法;但进入 DRAM 控制器后,寄存器重新编排了映射电信号,将数据读写路由至受保护的绝对物理单元。物理地址在实际执行中仅作为供上层校验机制参考的逻辑标签。
Christopher Domas 在研究总结中写道:「平台上的每一个受保护内存区域,都可以通过计算器直接触达。」这一结论撕开了硬件信任根的伪装。当所有安全围栏都建在物理地址这一抽象层之上时,内存控制器底部的映射重写便掌握了定义物理现实的终极权力。硬件安全不能把信任根寄托在物理地址上,坐标变换层才是安全边界的真实起点。
闭合物理映射漏洞的技术代价
修复此类漏洞需要重构芯片底层的寄存器访问权限与地址映射机制。在 AMD Family 16h 架构中,DRAM 控制器的转换寄存器在芯片手册中公开标注且未设计硬件锁死机制,导致任意 root 权限均可触发翻转。而在 17h 及其后续微架构中,AMD 停止公开这些寄存器的详细定义并默认实施了写入限制。
封锁硬件寄存器仅切断了已知配置入口,底层映射交错带来的安全威胁依然存在。物理地址到内存通道、Bank 及单元的映射交错广泛存在于所有现代内存控制器中,包括 ARM 与 RISC-V 架构。只要内存控制器的配置接口存在漏锁、降级暴露或物理侧信道探针,针对物理坐标映射的攻击模式就能在新的芯片体系中复制。将寄存器锁死只是掩盖了配置入口,并没有从根本上改变 DRAM 坐标变换低于地址校验层的物理事实。
skitter-creek-bath-salts 研究所带来的真正警示,在于强迫行业重新审视硬件安全隔离的边界定义。在现代计算机体系中,物理地址已退化为一种被安全机制误以为绝对可靠的建议。当芯片设计者试图构筑不可突破的硬件围栏时,如果无法将信任边界延伸至内存控制器的坐标变换逻辑,那么再严密的地址隔离也将沦为可被计算求解的透视迷宫。
参考链接:
- GitHub 仓库 xoreaxeaxeax/skitter-creek-bath-salts
- Christopher Domas 关于 DRAM 控制器重排映射的研究报告