News Hacker|极客洞察

24 67 天前 offlinemark.com
🤔Linux 内核:/proc/self/mem 如何写入不可写内存(绕过 MMU 与页表保护)
内核都能仿真绕过保护,硬件安全还有用吗?

🎯 讨论背景

这则讨论源自一篇 2021 年关于 Linux 内部实现的文章,核心问题是 /proc/self/mem(允许进程访问自身内存的伪文件)为什么能写入在页表中被标记为不可写的内存。关键实现点在于内核处理此类写操作时绕过 MMU(硬件地址翻译),在内核中以软件方式模拟地址转换和缺页中断,从而忽视页表的写权限。评论把这个实现放到更广的硬件与虚拟化语境中,提到 Memory Protection Keys、NPT/EPT、SEV、SGX、IOMMU、MKTME、TPM 等不同层级的保护与它们的假设与局限(并引用 TEE.fail 等已知漏洞集合)。讨论不仅是技术实现细节,也涉及云环境中信任边界、重启/物理访问攻击场景以及安全性与向后兼容之间的权衡。

📌 讨论焦点

内核通过软件仿真绕过硬件地址翻译

当用户向 /proc/self/mem 写入时,内核会绕过 MMU(Memory Management Unit,硬件地址转换),在内核中以软件方式模拟地址翻译并模拟缺页中断(page faults),因此可以忽视页表(page tables)中的写权限。内核在处理这类写操作时能直接以内核权限操作物理内存或通过仿真路径完成写入,等同于绕过用户空间的写保护。这正是为何某些本应不可写的页仍能被 /proc/self/mem 修改的根本原因,也是文章讨论的核心实现细节。

[来源1]

CPU/平台级别的多种内存保护机制

评论列举了多种 CPU/平台级别的访问控制:Memory Protection Keys(MPK,按键快速切换线程对内存页访问)、NPT/EPT(虚拟化下的二级页表)、SEV(AMD 的虚拟机内存加密)、SGX(Intel 的 enclave 隔离)以及类似 TDX 的范围寄存器等,这些机制在不同层级限制内核或宿主机访问特定内存。它们并非仅由传统页表实现,而是通过硬件特性或额外地址翻译层提供额外隔离或加密保护。评论强调这些机制能在多数场景增强安全,但各自有适用边界与部署复杂性,不能简单用“页表权限”概念覆盖所有硬件/虚拟化情形。理解 /proc/self/mem 行为时需要把这些硬件特性也一并考虑。

[来源1]

云/虚拟化环境的信任边界与防护限制

讨论扩展到云/虚拟化环境中能否真正阻止宿主访问 VM 内存:IOMMU(I/O 内存管理单元)可以为 DMA 提供隔离,云提供商据此承诺宿主被攻破时无法触及客户内存;MKTME(多密钥整机内存加密)配合平台 TPM(可信平台模块)的 attestation 可以在运行时加密内存并证明未被篡改,从而提高对宿主层攻击的抗性。反方指出这些保证依赖于特定假设:重启时注入恶意代码、物理访问或实现缺陷(参考 TEE.fail 收集的漏洞)仍可破坏保证,因此并非对所有威胁模型都万无一失。评论中的讽刺性建议(把服务器放家里并用 Tor 隐藏)反映出对云端“无法触及内存”承诺的现实怀疑与部署复杂性的担忧。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]

社区认知与内核接口变更的权衡

有评论指出这种通过 /proc/self/mem 绕过写保护的行为在社区并非新鲜事,内核维护者曾尝试修改相关行为但并不一定出人意料。讨论因此涉及在安全性与向后兼容/调试功能之间的权衡:强制封禁可能破坏现有工具或兼容性,而保留则继续存在滥用或安全隐患。由此可见,关于是否以及如何改变此类接口的争论,既有技术实现细节也有更宽泛的政策与可用性考量。

[来源1]

📚 术语解释

MMU: MMU(Memory Management Unit,内存管理单元):负责虚拟地址到物理地址的硬件翻译并执行基于页表的权限检查。

page tables: page tables(页表):操作系统维护的数据结构,记录虚拟页与物理页映射及每页的权限位(可读/可写/可执行)。

IOMMU: IOMMU(Input–Output Memory Management Unit,I/O 内存管理单元):为设备 DMA 提供地址转换和隔离,能防止设备或宿主通过 DMA 直接访问/篡改客机内存。

Memory Protection Keys (MPK): Memory Protection Keys(MPK):CPU 特性,允许将内存页分配到不同“密钥”,线程在寄存器层面快速切换访问权限而无需修改页表。

NPT/EPT: NPT/EPT(Nested/Extended Page Tables,虚拟化的二级页表):提供虚拟化环境中的第二级地址转换,用于隔离来宾和宿主的地址空间。

SEV: SEV(AMD Secure Encrypted Virtualization):AMD 的虚拟机内存加密技术,用于在宿主/Hypervisor 层提供对客机内存的加密隔离。

SGX: SGX(Intel Software Guard Extensions):Intel 的 enclave 隔离技术,用于在处理器内创建对操作系统不可见的受保护内存区域。

MKTME: MKTME(Multi-Key Total Memory Encryption,多密钥整机内存加密):为不同主体使用不同运行时内存加密密钥,配合平台 attestation 可增强内存机密性证明。

TPM: TPM(Trusted Platform Module,可信平台模块):硬件安全模块,用于安全存储密钥并生成启动测量与 attestation 签名,以证明系统启动状态和代码完整性。