意大利面化的DRAM
通过DRAM重新洗牌解锁CPU上的一切——PSP、C6、微码、SMM,以及规格表遗漏的任何内容。&x == &x。通常。戳一下DRAM控制器,地址可以在内存中落到你想要的任何地方。skitter-creek-bath-salts深入内存层次结构的最深处,重新连接物理DRAM地址转换,以打乱平台内存并释放其最受保护的秘密——甚至对内核都是不可见的专用区域。当转换打破时,基于它们构建的壁垒倒塌,我们解锁一切。TL;DR解锁你的平台安全处理器解锁系统管理模式解锁C6 DRAM解锁你的CPU微码目标在AMD Family 16h CPU上开发和测试,这是最后一代文档记录了DRAM控制器的转换寄存器的处理器——并显示它们不能被锁定。17h及更高版本简单地遗漏了这些信息。*p的奥德赛在不同代和架构之间是相似的,基础转换甚至扩展到ARM、RISC-V等,skitter-creek-bath-salts仅向我们展示了如何开始。*p的奥德赛走得很远。内存建立在深层次的抽象层次之上,以至于变得几乎荒谬。当你的代码解引用*p时,它似乎访问了DRAM上的p。实际上并没有——p是一个虚拟地址,在触碰任何DRAM的单个比特之前,它必须通过以下的考验:── CPU核心 / MMU ───────────────────────────────────────────────── ┌─ VA ← 64位虚拟地址来自加载/存储 │ └> 规范形式检查 ──────────────────────┐ ← 从位47处符号扩展的位[63:48] ┌─ 段基址添加 <─────────────────────────┘ ← FS.base / GS.base (MSR_FS_BASE, MSR_GS_BASE) │ └> TLB探测 ─────────────────────────────────┐ ← PCID(宿主)/ VPID(来宾)命中 → 物理地址k │ 未命中 → 启动硬件页面步进器 │ ┌─ 页面遍历(来自CR3) <─────────────────────┘ ← 仅在TLB未命中时进行遍历 │ PML5[VA 56:48] ← 仅当CR4.LA57 │ PML4[VA 47:39] │ PDPT[VA 38:30] ← 可能是1 GiB叶子 │ PD [VA 29:21] ← 可能是2 MiB叶子 │ PT [VA 20:12] │ PTE ← R/W · U/S · NX · A/D · PAT · PCD · PWT · G │ └> 每层检查 ──────────────────────────┐ ← 在遍历的每一层评估权限(U/S) │ ← CPL与PTE.U/S写入(R/W) │ ← + CR0.WP执行(NX) │ ← EFER.NXE SMEP / SMAP │ ← CR4.SMEP · CR4.SMAP · EFLAGS.AC保护密钥 │ ← PKRU(用户)· IA32_PKRS(监督) ┌─ A/D位更新 <───────────────────────────┘ ← 锁定的RMW在PTE上 │ └> 如果是来宾:EPT / NPT重新遍历 ───────────────┐ ← 每个来宾-PA以上一个重新遍历 EPT-PML4 → EPT-PDPT → EPT-PD → EPT-PT │ ← + EPT内存类型覆盖 ⇒ ~5×每个单个来宾遍历的遍历 │ ┌─ TLB清空IPIs <───────────────────────┘ ← 以invlpg广播给对等vCPU │ │ ── IOMMU(芯片组/I/O架构) ────────────────────────────────── │ └> 如果由设备发起,IOMMU页面遍历 ──────┐ ← VT-d / AMD-Vi:设备-ID → 域 → 表 │ ┌── **物理地址k** <─────────────────┘ │ │ ── CPU核心 / MMU — 内存类型解析 ──────────────────────── │ └> MTRR范围匹配 ──────────────────────────┐ ← IA32_MTRR_DEF_TYPE + 固定/可变MTRR ┌─ PAT条目选择 <─────────────────────────┘ ← IA32_PAT[PTE.PAT:PCD:PWT] │ └> 有效内存类型 ─────────────────────┐ ← { WB, WT, WC, WP, UC-, UC } │ ── CPU非核心 — 缓存和一致性 ──────────────────────────────── │ ┌─ L1-D探测 <───────────────────────────────┘ ← VIPT,每核心 │ └> L2探测 ──────────────────────────────────┐ ← 每核心/每CCX ┌─ LLC探测 + 目录查询 <────────────┘ ← 共享,划分 │ └> 查询/一致性 ─────────────────────────┐ ← MESI / MOESI广播同插槽 │ ← 广播给对等核心跨插槽 │ ← QPI · UPI · 无限结构 · CXL.cache主节点目录响应 │ ← 数据 | 干预 | 中止 │ ── 系统数据结构/互连 ────────────────────────────── │ ┌─ 如果为MMIO范围或小于4 GiB MMIO孔 <─────┘ ← 非核心/数据结构发布/非发布事务 │ → 设备BAR;完成 │ └> 否则受限于DRAM:数据结构/网格 ───────┐ ← AMD DF · Intel网格或环非核心 │ ┏━━ ── MCT / IMC(内存控制器) ──────────────────────────────── W ┃ ┌─ DRAM孔重映射 <──────────────────────────┘ ← 高内存重映射高于TOM E ┃ │ ┃ └> 内存区域排除重映射 ─────────────┐ ← 保留/受保护范围 ┃ ┌─ 通道交错哈希 <──────────────────┘ ← 选定PA位的XOR → 通道A ┃ │ R ┃ └> 排干交错哈希 ──────────────────────┐ ← 选定PA位的XOR → 排干 E ┃ ┌─ 银行交错哈希 <─────────────────────┘ ← 选定PA位的XOR → 银行 ┃ │ ┃ └> 银行换位/XOR混淆 ───────────────┐ ← 供应商和BIOS可配置 H ┃ ┌─ 芯片选择归一化(DCT) <──────────────┘ ← 每个排名CS线 E ┃ │ 排名 → CS映射 R ┃ │ E ┃ └> 子通道选择 ────────────────────────┐ ← 仅DDR5/LPDDR5 ┗━━ │ │ DRAM坐标 <─────────────────────────┘ ← 银行组·银行·行(RAS)·列(CAS)该项目在*p管道的最深层上工作,MCT/DC
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡