西奥·德·拉特
从 W^X 的工作开始,很明显这是一条漫长的道路,因为有大量的应用程序使用 JIT。 JIT 实现可以分为三类:
- 在W和X状态之间切换内存,接受系统调用的“成本”
保护 . - 在同一内存的一对 W 和 X 映射之间创建别名。
- 最“脏”的选项需要允许同时记录和执行的 W|X 内存模型。
目前,使用第三个选项的程序明显较少,而使用第一个和第二个选项的程序则较多。 然而,由于需要使用 W|X JIT(主要是 Chromium 和 Iridum)运行程序,因此添加了“wxallowed”文件系统挂载选项,该选项允许内存同时用于写入和执行,以防可执行 ELF文件标有“wxneeded”标记,并且应用程序本身还使用机制进行了额外保护
为了使此类应用程序中的漏洞利用进一步复杂化,建议对该机制进行补充
Chrome/Iridium 进程已经使用 Promise 和 Reveal 得到了相当可靠的保护,但是删除使用 write(2) 系统调用的能力显然有一些优势,因为它给攻击者带来了额外的困难。 但是,如果 JIT 实现使用 W|X 内存中的本机系统调用,也会出现困难。 然而,我们有理由希望情况不会如此,因为 ABI 已更改多次,但从未有人报告过问题。
这些更改已经在 OpenBSD-Current 分支的常规快照中提供,欢迎感兴趣的每个人进行测试。
关于 Chrome/Iridium 中该模式出现的相关新闻值得 Theo 单独评论
来源: opennet.ru