You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenBSD默认未启用的额外内存加固机制技术问询

OpenBSD 默认未启用的内存加固机制(除指定项外)

针对你提到的需求,除了malloc.conf的"S"选项、调大kern.stackgap_random和移除wxallowed挂载选项外,OpenBSD还有这些默认未启用的内存相关加固机制——不少思路确实源自grsecurity,但因兼容性问题(大量端口应用会因代码不规范崩溃)默认关闭:

  • malloc.conf的F与J选项(内存填充与释放后标记)

    • F会在分配内存前用0xff填充,释放后也用0xff覆盖,能有效检测未初始化内存使用和释放后重用的漏洞;J则是在分配的内存块前后加入随机化的 guard 区域,防止缓冲区溢出越界。
    • 开启方式:在/etc/malloc.conf中添加FJ,或设置环境变量MALLOC_OPTIONS=FJ。
    • 兼容性问题:部分老旧应用依赖未初始化内存的默认零值,或直接访问内存块边界外的区域,开启后会崩溃。
  • 内核编译选项options GCCRELR

    • 让内核使用相对重定位(RELR)替代传统的绝对重定位,彻底消除内核中的绝对内存地址,大幅提升ROP攻击的难度——这和grsecurity的RELRO加固思路一致。
    • 开启方式:修改/usr/src/sys/arch/$(uname -m)/conf/GENERIC配置文件,添加options GCCRELR,然后重新编译安装内核。
    • 兼容性问题:少数闭源驱动或老旧内核模块依赖绝对地址,无法正常加载。
  • 内核编译选项options PAEXEC

    • 这是OpenBSD对标grsecurity PaX EXEC的实现,会强制严格执行内存页的WX规则,甚至拦截应用试图通过`mprotect`或`mmap`将数据页设置为可执行的操作,比默认的WX机制更严格。
    • 开启方式:在GENERIC内核配置中添加options PAEXEC,重新编译内核。
    • 兼容性问题:大量依赖JIT(即时编译)的应用(如部分JavaScript引擎、游戏模拟器)会因无法生成可执行代码而崩溃。
  • 内核编译选项options SSP_STRONG

    • 增强版的栈溢出保护,会对内核中几乎所有函数应用栈保护(Stack Smashing Protector),而默认仅对高危函数启用。这能有效防范内核栈溢出漏洞。
    • 开启方式:在GENERIC配置中添加options SSP_STRONG,重新编译内核。
    • 兼容性问题:部分内核代码(尤其是第三方驱动)因栈布局不规范,会触发保护机制导致内核 panic。
  • 内核编译选项options NOEXEC_USERSTACK

    • 强制用户空间栈不可执行,即使应用尝试通过系统调用修改栈的执行权限也会被内核拒绝,进一步阻断栈溢出后的代码执行攻击。
    • 开启方式:在GENERIC配置中添加options NOEXEC_USERSTACK,重新编译内核。
    • 兼容性问题:一些老旧的自修改代码、手写汇编的应用(如部分复古游戏)会直接崩溃。

内容的提问来源于stack exchange,提问作者Hessnov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:20:53