Mozilla开发者们已经为Firefox浏览器加入了OpenBSD的W^X安全特性,以应对基本的缓冲区溢出和内存泄露问题。“W^X” 是“写异或执行”(Write XOR Execute)的缩写,作为OpenBSD中富有代表性的安全特性,Mozilla的开发者们已经将它移植到了Firefox的JIT代码编译器中。 Jan de Mooij指出,该功能在Firefox底层运行,并且影响在浏览器内执行的代码是如何与系统内存交互。
W^R内存保护机制的原则是,一个进程(比如Firefox中的一个网页)不能够同时写或执行。该功能会从Firefox 46每夜构建版开始部署,网页将能够使用内存写入或执行的代码,但不能够同时进行这两种操作。
通过延缓执行时间,W^X内存保护机制可组织某些类型的缓冲区溢出攻击,以及确保流程执行堆栈中的任意动态代码——即使让Firefox崩溃,也不再会盲目地运行潜在的恶意代码。
在加入W^X支持之前,Firefox给予了网页完整的“读与写”(Read-Write-Execute, 简称RWX)许可。但为了安全,Firefox此举也会小幅影响到自身的性能表现。
Jan de Mooij解释到:“RWX使得某些bug很容易被利用,所有现代操作系统都会存储执行代码但内存不可写,且数据通常是无法执行的,这点可参考W^X与DEP”。
对于普通用户来说,在切换可写可执行内存状态之前,Firefox会通过特殊的内部功能来触发,而这肯定会带来一定的延迟。
根据Mozilla开发者的内部测试,根据基准测试套件的不同,其性能影响介于1%到4%之间。考虑到影响并不明显,所以团队最终还是决定启用R^W内存保护功能。
在排除了严重缺陷和其它不可预见的性能问题之后,Firefox终将默认启用这一功能。