除了“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_mmap到1(默认情况下应该是打开的,但它在 DragonflyBSD 中是关闭的,并且显然没有在 FreeBSD 中实现)。
使用计时安全_bmp(3) 和timingsafe_memcmp(3) 而不是bcmp(3) 或memcmp(3)。
使用显式_bzero(3)变体而不是 bzero(3) 来清除敏感内存(如密码变量)。
位置无关的可执行文件 (PIE):链接至-馅饼或者--图片可执行文件
创建位置无关的可执行文件。这是目前仅 ELF 支持平台。位置无关的可执行文件与共享库类似,因为它们由动态链接器重定位到操作系统为其选择的虚拟地址(该地址在调用之间可能有所不同)。与普通的动态链接可执行文件一样,它们可以被执行,并且可执行文件中定义的符号不能被共享库覆盖。
随机化映射(2):不要使用 MAP_FIXED。使用 mquery 检查。
考虑使用重新分配数组(3)对于敏感数据,recallocarray(3) 和 freezero(3) 而不是 malloc(3)、calloc(3) 或 realloc(3)。
堆栈崩溃保护(SSP):默认激活 GCC + Propolice (SSP) 以构建所有库和应用程序。
KERN_STACKGAPRANDOM(kern.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 属性。