Spectre v2 的软件缓解

信息安全 幽灵 海合会
2021-09-04 20:57:18

我将Debian作为我的操作系统,将 Guix作为我的包管理器。我还运行(大约)使用 Guix 构建的最新内核。根据spectre-meltdown-checker,我的内核对 v1、v2 和 v3 有缓解。

然而,最新的稳定版 GCC (7.3) 实现了三个新标志,即-mindirect-branch=选择-mfunction-return=选择-mindirect-branch-register. 启用所有这些标志来重建世界是个好主意吗?如果是这样,我应该选择哪个?有四个选项可供选择,keepthunk-extern显然不适用,因为前者是无操作的,而后者需要用户提供的 thunk。谁能解释thunkthunk-inline之间的区别?

最后,Binutils的gold似乎也引入了一个新标志它也应该启用吗? -z retpolineplt

1个回答

您是否应该在启用这些标志的情况下重新编译您的软件?一般来说,没有。

普通人使用的大多数软件都不会受到 Spectre 的严重威胁。这是一种非常难以实施的攻击,并且要求攻击者已经能够在您的计算机上运行任意代码。此外,Phoronix 的基准测试表明,性能可能会受到很大影响(有时高达 40%),而且这种影响通常出现在对性能敏感但不处理秘密信息的视频游戏中。如果您感到偏执,您可能会考虑使用这些标志重新编译您的内核、Web 浏览器和密码管理器,但除此之外,安全增益不值得缺点。

如果,另一方面,你正在运行一个共享的主机服务,或者运行一个中等有价值的网站(如电子商务)一个共享的托管服务,你应该考虑重新编译软件幽灵缓解启用。在这种情况下,来自未知用户的任意代码一直在您的计算机上运行。此外,您可能正在处理足够有价值的信息来证明进行 Spectre 攻击所需的时间是合理的。

“thunk”、“thunk-external”和“thunk-inline”之间的区别基本上是性能与大小的权衡:“thunk”为每个输入文件创建一个 thunk 部分,“thunk-inline”为每个间接分支创建一个或函数返回,并且“thunk-external”为整个程序使用一个 thunk 部分。Thunk-inline通常是最快的,但如果它导致代码增长到足以溢出可用缓存空间,它可能会导致显着的减速。