默认情况下未启用的 OpenBSD 内存保护机制?

默认情况下未启用的 OpenBSD 内存保护机制?

除了“S”选项malloc.conf并不断增加kern.stackgap_random并删除允许的挂载选项,还有什么记忆相关OpenBSD 中的强化机制是可以打开的,但默认情况下不启用?

如果我们必须重新编译内核,并且需要最少的源代码修改,那么即使选项也会很有用。

通常他们不会启用它,因为许多应用程序(例如来自端口的应用程序)会因代码错误而崩溃。

尝试从 grsecurity 获取列表/想法(如果有的话,OpenBSD 中尚未使用),但是当您不是程序员时很难:https://grsecurity.net/features.php

答案1

“……OpenBSD 中还有哪些可以打开但默认未启用的与内存相关的强化机制?

如果我们必须重新编译内核[或我使用的程序],并且需要最少的源代码修改,那么即使选项也会很有用。”。

到目前为止我挖掘出的内容:

始终更新到内核的最新稳定版本。还看http://www.trustedbsd.org/。阅读参考文献,例如维基百科的 OpenBSD 安全功能网页

开放BSD记忆相关安全特性:

  • 地址空间布局随机化(ASLR): 设置 sysctlvm.randomize_mmap1(默认情况下应该是打开的,但它在 DragonflyBSD 中是关闭的,并且显然没有在 FreeBSD 中实现)。

  • 使用计时安全_bmp(3) 和timingsafe_memcmp(3) 而不是bcmp(3) 或memcmp(3)。

  • 使用显式_bzero(3)变体而不是 bzero(3) 来清除敏感内存(如密码变量)。

  • 位置无关的可执行文件 (PIE):链接至-馅饼或者--图片可执行文件

    创建位置无关的可执行文件。这是目前仅 ELF 支持平台。位置无关的可执行文件与共享库类似,因为它们由动态链接器重定位到操作系统为其选择的虚拟地址(该地址在调用之间可能有所不同)。与普通的动态链接可执行文件一样,它们可以被执行,并且可执行文件中定义的符号不能被共享库覆盖。

  • 随机化映射(2):不要使用 MAP_FIXED。使用 mquery 检查。

  • 替换随机():兰特(3),随机(3), 和兰特48(3)等替换为 BSD 的arc4随机(3)

  • 考虑使用重新分配数组(3)对于敏感数据,recallocarray(3) 和 freezero(3) 而不是 malloc(3)、calloc(3) 或 realloc(3)。

  • 堆栈崩溃保护(SSP):默认激活 GCC + Propolice (SSP) 以构建所有库和应用程序。

  • KERN_STACKGAPRANDOMkern.stackgap_random) 设置每次程序执行时添加到堆栈指针的随机值的范围。添加随机值是为了使缓冲区溢出利用变得更加困难。这数字越大越难暴力破解这种额外的保护,但这也意味着更大的内存浪费。默认:262144

  • 使用新的结构体py(3)和 strlcat(3) 而不是 strcpy(3)、strcat(3)、strncpy(3) 或 strncat(3) - 允许安全的字符串复制。

  • 使用斯特托纳姆(3)函数而不是 atoi(3) 和 strtol(3) 系列接口。

  • W^X政策:一个页面可以既可写又可执行,但不能同时可写和可执行。因此W^X。这个想法是创建一个.rodata仅具有 PROT_READ 属性的段,因此它丢失了 PROT_EXEC 属性。

相关内容