Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 1058

SMEP / SMAP

SMEP / SMAP 是什么?

SMEP / SMAPSMEP 与 SMAP 是阻止内核执行或访问用户空间页面的 CPU 特性,可阻断常见的本地提权技术。


SMEP(Supervisor Mode Execution Prevention)与 SMAP(Supervisor Mode Access Prevention)是 x86_64 的硬件扩展,Intel 分别于 Ivy Bridge(2012)和 Broadwell(2014)引入;ARM 提供对应的 PXN 与 PAN。SMEP 使 CPU 在内核试图从用户态页取指执行时触发异常,阻断 ret2usr 攻击。SMAP 则在内核读取或写入用户页时触发异常,除非代码通过 stac/clac 临时置位 EFLAGS.AC(Linux 中表现为 copy_from_user 等包装函数)。两者共同消除了大量将载荷放在用户内存的内核漏洞,与 KASLR、kCFI、KPTI 和 CET 协同形成纵深防御。

示例

  1. 01

    在 SMEP CPU 上,内核漏洞跳入用户态 shellcode 页时触发 #PF。

  2. 02

    Linux 的 copy_from_user 在 SMAP 下用 stac/clac 访问用户缓冲区。

常见问题

SMEP / SMAP 是什么?

SMEP 与 SMAP 是阻止内核执行或访问用户空间页面的 CPU 特性,可阻断常见的本地提权技术。 它属于网络安全的 应用安全 分类。

SMEP / SMAP 是什么意思?

SMEP 与 SMAP 是阻止内核执行或访问用户空间页面的 CPU 特性,可阻断常见的本地提权技术。

SMEP / SMAP 是如何工作的?

SMEP(Supervisor Mode Execution Prevention)与 SMAP(Supervisor Mode Access Prevention)是 x86_64 的硬件扩展,Intel 分别于 Ivy Bridge(2012)和 Broadwell(2014)引入;ARM 提供对应的 PXN 与 PAN。SMEP 使 CPU 在内核试图从用户态页取指执行时触发异常,阻断 ret2usr 攻击。SMAP 则在内核读取或写入用户页时触发异常,除非代码通过 stac/clac 临时置位 EFLAGS.AC(Linux 中表现为 copy_from_user 等包装函数)。两者共同消除了大量将载荷放在用户内存的内核漏洞,与 KASLR、kCFI、KPTI 和 CET 协同形成纵深防御。

如何防御 SMEP / SMAP?

针对 SMEP / SMAP 的防御通常结合技术控制与运营实践,详见上方完整定义。

SMEP / SMAP 还有哪些其他名称?

常见的别称包括: SMEP, SMAP, PXN, PAN。

相关术语