Cache Bank 冲突和 CacheBleed:有什么可担心的?

信息安全 tls openssl
2021-08-24 09:48:40

似乎研究人员已经宣布了另一个关于 OpenSSL 的漏洞,与DROWN 问题不同,称为CacheBleed您可以在此处查看研究论文

它是如何工作的,人们究竟应该担心什么?

1个回答

侧信道攻击目前风靡一时。概念上的核心思想是,虽然密码算法是一个数学对象,其输入和输出可以以抽象的方式表示,但它也将在某处的某些物理硬件上运行,并且执行可能会以各种方式留下痕迹,这可能会揭示位有关所处理数据的信息,特别是任何私钥。

这一切都始于1996 年 Paul Kocher发表针对 RSA 的定时攻击。在这种情况下,可以通过对 RSA 私有操作(解密)的执行时间进行一些精确测量并将其关联起来来重建 RSA 私钥与输入数据。

硬件泄漏信息的方式有很多种。嵌入式系统,尤其是智能卡,特别容易受到攻击,因为它们的电源甚至可能来自外部的时钟信号;而且,更一般地说,即使他们在攻击者的手中,他们也必须保守秘密。相对而言,软件平台(例如 Web 服务器)要容易得多。

在实验室条件下已经有很多关于如何将定时攻击应用于软件平台上的算法实现的演示。这里有两个级别:

  • 即使在算法执行的抽象模型中,该算法也可以具有导致执行时间变化的数据相关执行路径。这就是模幂运算的常用平方乘法算法所发生的情况。Kocher 的攻击就是关于这种算法的。

  • 该算法在抽象模型中可能都是“恒定时间”的,但由于其实现方式的原因,它仍会直接或间接地表现出与数据相关的执行时间变化。例如,基于窗口的平方和乘法优化可能仍然会泄漏信息,因为在内存中访问的元素将根据私钥位不同而不同,这意味着缓存的行为会有所不同。

CPU 缓存是所有现代硬件平台的普遍优化,除了最减少的(智能卡通常没有缓存,但仅此而已)。缓存的工作原理是将一些最近访问的数据元素的副本保存在一块特殊的 RAM 中,CPU 可以比普通 RAM 更有效地读取它。细节很大程度上取决于缓存技术(缓存行大小、对齐、缓存回写或直写、关联性......)。基于缓存的攻击是试图利用缓存行为的攻击。基本上,该算法在其整个执行过程中将访问一些数据元素,从缓存中驱逐一些其他数据,以便对被驱逐数据的下一次读取访问将触发到主 RAM 的往返,这将是可检测到的缓慢(在现代系统中,进入主 RAM 的 RAM 访问可能需要数百时钟周期)。

攻击者需要对硬件进行一些相当准确的访问才能进行基于缓存的措施。在大多数演示中,攻击者可以在相同的硬件上运行自己的代码。这可能是另一个进程(在大型机模型中),但如果攻击者运行另一个虚拟机,而该虚拟机恰好被安排在与目标系统相同的 CPU 上,它也可以工作。由于现代 CPU 是多核的,即使在声誉最好的云中,这也是正常现象。在一些罕见的情况下,已经运行了基于网络的缓存定时攻击的实验室级演示,方法是调用同一台机器上的另一个服务,该服务碰巧会执行相关的缓存行。在网络案例中,

防御侧信道攻击需要使用恒定时间代码基本上,对于所有可能的秘密值,内存访问模式应该是固定的。这适用于数据访问和代码(因为代码本身也可以从 RAM 访问)。因此,没有数据相关的条件分支。

编写恒定时间加密代码可能很难。然而,存在已知的有效实现,例如对于 AES可以进行良好、快速且恒定时间的 RSA 实现。

然而,OpenSSL 开发人员并没有走那么远。他们做出了努力,但他们试图偷工减料,结果适得其反。这就是 CacheBleed 的意义所在。OpenSSL 中的 RSA 实现不是上述意义上的恒定时间;它只是努力保持对高速缓存行的固定访问模式,而不是实际的内存插槽。因此,它们仅在某些非常特定的硬件上是恒定时间的,而不是在所有硬件上,基于缓存的定时攻击仍然是可能的。CacheBleed 使用“同一硬件上的攻击者代码”模型,其现在的主要实际化身是两个 VM 在同一云中运行。

不过不要惊慌,因为目前还不清楚基于缓存的定时攻击是否真的实用。我们有很多实验室演示,但从未发现在野外实际使用过。

需要考虑的重要一点是,基于缓存的攻击不限于加密算法。任何处理秘密数据的东西在概念上都是易受攻击的。如果一台机器正在处理加密,那么它肯定会操纵机密数据。密码学家倾向于关注加密密钥,因为密钥集中保密性并且是高价值目标;而且,这是他们的工作。但是,缓存定时攻击的范围更大。换句话说,如果缓存定时攻击完全适用于您的系统,那么您就有一个大问题,而密码层只是其中的一小部分。


你该怎么办 ?与往常一样:安装安全补丁它应该不言而喻。还需要说,真是尴尬。对你来说,我的意思是。

而且,在更一般的基础上,如果您打算“上云”并与完全陌生的人共享相同的硬件,那么请三思而后行。一个真正优秀的云提供商会为他们的大客户强制执行硬件分离,即确保(从合同和技术上)任何给定的机器永远不会同时运行来自不同客户的两个 VM。或者,关于私有云有很多好话要说。