谷歌的“Spectre攻击”修补方案Retpoline,可避免性能影响

华盟原创文章投稿奖励计划

1 月 5 日,谷歌团队公开一种避免 Spectre 攻击的技巧“Retpoline”,且对性能的影响可以忽略不计。据谷歌团队表示,这是一种避免分支目标注入的二进制修改技巧。利用这种方法任何开发者都可以应用并部署在计算机中,用以防范 Spectre 攻击

谷歌表示,他们给这个编程技巧,取名为Retpoline,而这种方法对计算机性能的影响“微乎其微”(如果与在过去的几天中发布的其他补丁对CPU性能影响程度进行对比的话)。

修补方案的作者是 Paul Turner,他是谷歌基础设施技术部门的高级工程师。而在谷歌公司内部,他们已经应用这种技巧对私有数据中心的 Linux 服务器进行了安全更新,只造成微小的性能损耗。具体内容可以在《Retpoline:一个避免分支目标注入的软件结构》一文中查看。

Retpoline.png

在 Linux 中应用 Retpoline

作者 Turner 同时也向 Linux Kernel 项目提出了完善建议,他建议在 Linux 中加入 Retpoline 技巧。在向其他Linux 开发者解释他的方案时,他详细描绘了这种方案的性能消耗。

Retpoline平均会在内部工作量中增加了0-1.5%范围内的总体开销,这其中也包括了一些特别高的数据包处理内容。

Retpoline 技巧也对 Intel 开发者有帮助,Andi Kleen 表示,

如果我们想在内核中避免非直接调用,Retpoline 方法就可以做到不运用推测(speculation)且间接调用。

linux-kernel1.png

如何避免推测执行

Kleen 所说的“推测执行”,我们在前几天的报道(123)中已经提过,这是一种所有现代CPU都会应用的代码优化技巧,也是 Meltdown 和 Spectre 漏洞出现的主要根源。

Retpoline 是一个软件结构,可以让间接分支从推测执行中分离出来,可以应用在保护敏感二进制文件(操作系统和管理程序),避免分支目标注入对间接分支造成的影响。

而 Retpoline 的名字则是源自于“回归”(return)和“trampoline”(蹦床),这意味着这是一个使用返回操作进行来回反弹的结构,形象地表现出在需要保护的内容中,相关的推测执行是通过“无休止地”反弹而避免被窥探到。

屏幕快照 2018-01-08 上午11.19.12.png

按照其他开发者对这个修复技巧的评价来看,Retpoline创建了类似于实际代码中永远不会调用的无限循环之类的东西,这可以阻止 CPU 进入推测执行环节。

开发人员可以在他们的应用程序二进制代码中应用 Retpoline 技巧,防止他们的应用程序讲内存信息暴露给 Spectre 攻击

这也可以应用在操作系统内核中,系统程序、库和其他软件如有需要,也可以添加。

目前除了 Linux Kernel 项目,GCC 和 LLVM 项目也正在添加对该方案的支持。

更详细的内容可以查看【谷歌公告

*编译整理Elaine,参考bleeping,转载请注明FreeBuf.COM

本文原创,作者:AlexFrankly,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/190657.html

发表评论