写点什么

PTI 中的 SMEP 模拟技术解析

作者:qife
  • 2025-08-10
    福建
  • 本文字数:799 字

    阅读完需:约 3 分钟

PTI 中的 SMEP 模拟

近期内核页表隔离补丁(CONFIG_PAGE_TABLE_ISOLATION)带来了一项额外优势:当内核模式运行时,可见的用户空间页表缺少可执行位。这使得不具备 SMEP CPU 特性的系统(Ivy-Bridge 之前的处理器)能"免费"获得该特性的模拟实现。

非 SMEP 系统测试案例

关闭 PTI 的情况(使用"pti=off"启动参数):


# grep smep /proc/cpuinfo# dmesg -c | grep isolation[    0.000000] Kernel/User page tables isolation: disabled on command line.# cat <(echo EXEC_USERSPACE) > /sys/kernel/debug/provoke-crash/DIRECT# dmesg[   17.883754] lkdtm: Performing direct entry EXEC_USERSPACE[   17.885149] lkdtm: attempting ok execution at ffffffff9f6293a0[   17.886350] lkdtm: attempting bad execution at 00007f6a2f84d000
复制代码


系统未崩溃!内核成功执行了用户空间内存。


开启 PTI 的情况


# grep smep /proc/cpuinfo# dmesg -c | grep isolation[    0.000000] Kernel/User page tables isolation: enabled# cat <(echo EXEC_USERSPACE) > /sys/kernel/debug/provoke-crash/DIRECTKilled# dmesg[   33.657695] lkdtm: Performing direct entry EXEC_USERSPACE[   33.658800] lkdtm: attempting ok execution at ffffffff926293a0[   33.660110] lkdtm: attempting bad execution at 00007f7c64546000[   33.661301] BUG: unable to handle kernel paging request at 00007f7c64546000[   33.662554] IP: 0x7f7c64546000...
复制代码

未来优化方向

只需稍加改进,就能在内核模式下完全取消用户空间页表的映射,仅在 copy_to_user()/copy_from_user()时临时映射——这与 ARM 架构通过 ARM64_SW_TTBR0_PAN(或 arm32 的 CONFIG_CPU_SW_DOMAIN_PAN)实现的方式类似。




© 2018, Kees Cook. 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
PTI中的SMEP模拟技术解析_内核安全_qife_InfoQ写作社区