Linux 内核 W^X 安全机制深度实战:从 NX bit 到内存保护与利用缓解
在 modern exploit 对抗中,"No-eXecute"(NX)技术是最坚固的防线之一。Linux 内核的 W^X(Write XOR Execute)策略——内存页要么可写要么可执行,不可同时具备二者——构筑了防止代码注入攻击的核心屏障。本文将从硬件 NX bit 出发,穿越 x86 PAE/XD、ARM64 PXN/PAN、内核页表管理、vm_flags 控制到生产环境调优,全面拆解 W^X 的实现机制与工程实践。
一、硬件基石:NX/XD bit 与分页架构
1.1 x86 的 Execute Disable Bit
AMD 在 2003 年率先引入 NX(No-eXecute)bit,Intel 随后推出等效的 XD(eXecute Disable)bit。在 x86-64 长模式下,NX 位于 page table entry(PTE)的第 63 位(即最高位)。当 NX=1 时,该页不可执行;当 NX=0 时允许执行。
// arch/x86/include/asm/pgtable.h
#define _PAGE_BIT_NX 63 // No-Execute bit (AMD) / eXecute Disable (Intel)
#define _PAGE_PRESENT (_AT(pteval_t, 1)

发表评论 取消回复