从"侧"信道讲起

PS:今日收到某同学询问是否有什么相关书籍推荐,突然想起本系列的初衷就是因为相关书籍太少且质量不高。且个人认为最有价值的问题就是侧信道部分。那不妨从后面开始更新吧。

不同于计算域内安全已经被研究几十年了,已经有很多不错的材料了。但是侧信道安全,特别是针对于CPU微架构的侧信道攻击,是近些年才被发现和研究的,因此材料较少,优秀的分析也十分有限。

废话少说,进入正题。

什么是侧信道

“侧信道攻击”定语是“侧信道”,那首先就要了解什么叫做“侧信道”。按照惯例,我们先去检索一下对于侧信道攻击的定义,很遗憾,中文互联网上又难以找到较为完整的解释。

在中文检索结果中,最正式的定义为:

Note

侧信道攻击——是一种利用计算机不经意间释放出的信息信号(如电磁辐射,电脑硬件运行声)来进行破译的攻击模式。

这个“不经意间”多少有点拟人了,让我甚至有了中计算机是有自主意识的错觉。甚至检索到的中文综述论文中,也未在开头给出侧信道攻击的定义,而是直接开始讲侧信道攻击可以如何如何了。

Wikipedia中,定义为:

Note

In computer security, a side-channel attack is any attack based on extra information that can be gathered because of the fundamental way a computer protocol or algorithm is implemented, rather than flaws in the design of the protocol or algorithm itself (e.g. flaws found in a cryptanalysis of a cryptographic algorithm) or minor, but potentially devastating, mistakes or oversights in the implementation.

这个定义就较为有逻辑了:首先,侧信道攻击是一类攻击,特征是基于一些可被收集的额外信息(即“侧信道”)。这些信息的存在是因为计算协议或者算法的实现方法。(而不是设计本身的问题。)从这个定义中就可以看到,这种攻击发生在协议和算法以外的空间内。那在什么样的空间中呢?文中举出了一些例子:

Note

Timing information, power consumption, electromagnetic leaks, and sound are examples of extra information which could be exploited to facilitate side-channel attacks.

可以看到,常见的“侧信道”有:时间信息(一般指计算/信息传递的时长),能量消耗,电磁泄露和声音。如果读者关注过一些侧信道的论文,就会发现其实各种奇葩的侧信道攻击都存在:硬盘灯,电源电压,硬盘工作的声音等等。那么,“侧信道”的共性是什么呢?为什么他们都是一些物理特性呢?而为什么最近几年的新型侧信道貌似又和物理性质无关呢?其实,答案就在“侧信道”三个字当中,“侧”意味着这是一些额外信息,而不是计算本身;而“信道”意味着这是一个可以传递信息的通道,而什么可以传递信息呢?

答案是一切可以被测量的量。

当然,可以被测量的量太多了,那么什么量能够构成攻击呢?计算机攻击目的无非两种,跨越权限的读,或者跨越权限的写。显然,测量是无法完成写的,只能用来完成读。这意味着,被测量的量必须要实现跨越权限的读。那么一切都非常明朗了:

假设有某种可被测量的量C,同时,有一个秘密信息I,对C的测量可以得到I的信息,就构成了一种侧信道。

意味着,存在某种(类)函数关系,因为秘密信息I的值的不同,而导致可被测量的量C的不同,即 f(I) = C ,且存在其逆函数 f'(C) = I, 可以使观测者可以从C反推出I。

回到系列开始中举的例子,如果一个同行想去偷另一家百年老(饭)店的祖传秘方,那你除了直接进后厨参观,或者收买厨子(直接信道)以外,你还可以去偷偷观察他们各种材料的进货比例,泔水桶里面的物质比例来推断其原材料及其比例。通过他们煤气费用和电费来推断其厨具的加热时间和厨具是使用种类等。显然,这种方式明显会比直接去参观或者收买厨子得到的信息不确定更高,推理过程也更加复杂,但是也更难以防御。这在计算机的侧信道攻击也是完全一样的道理~

基于CPU微架构的侧信道攻击

其实,侧信道攻击由来已久,但是一般都在密码学中比较常见。但是最近几年的(2017~至今)突然热门的CPU微架构的侧信道攻击其实是一个非常有趣的领域,有几个特点:

  • 因为目前CPU微架构做出了非常复杂的预测执行和Cache方法,因此,其侧信道信息种类十分丰富,而且与原信息的函数关系比较丰富。
  • 因为CPU本身对于性能调优的诉求,其对自身相关侧信道的测量精度十分高。不需要额外的“测量”成本。
  • CPU本身有着非常严格的权限管控,侧信道可以直接这些已有的权限设计,使得原本非常复杂且有效的安全手段直接失效。
  • 还是因为CPU对于性能优化的诉求,非常多可以构成侧信道的弱点,仍然会在商用CPU上长期存在。
    • 读者不要忘记,虽然表面上“安全”是一个底线需求,应该在性能优化的优先级之前。但是实际上,任何安全设计都是对成本的考量,目的是放大攻击者的成本。当攻击成本相对于攻击收益(受害者损失)非常高时,安全设计就是足够的,这时就要以性能为主了。参见章节威胁模型和攻击向量
    • 其实在另一个方向上,性能更决定了客户是否买单,而安全一般是其次的。例如,如果苹果手机的性能如果明显弱于安卓手机,只强调其安全性更高,消费者是不会出钱的😊。 参见面向人做技术

这也是CPU微架构侧信道最有趣的地方:有些风险非常高,但仍然在CPU上长期存在;有些风险其实不高,但是舆论影响却很大。毕竟让一般新闻读者去区分侧信道漏洞间的区别实在是过于强人所难了。

对一个CPU安全架构师来说,(好的吧,我承认我知道我的读者大概率不是),如何鉴别这些风险的实际影响,如何避免出现高危的侧信道漏洞,如何明确不同风险的处理方式,如何看待学术界在该方向上的研究,甚至如何去研究其他CPU设计中的侧信道漏洞,就是这一岗位的挑战和乐趣所在了。

卖个关子,下一章节我们再进入正题。

故障注入攻击

这里,如果细心的朋友可能已经发现前文的逻辑前提或许可以质疑了:

Note

计算机攻击目的无非两种,跨越权限的读,或者跨越权限的写。显然,测量是无法完成写的,只能用来完成读。

这里只说了测量,但是这些侧信道不仅可以测量啊,还可以直接操控啊。例如,比起测量电压,我可以主动改变电压;比起测量温度,我可以主动改变温度;比起测量时间,我可以……砸,瓦鲁多!

The World

不好意思,好像操控时间上还有些难度。但是改变电压,改变温度,注入激光,震动等还是非常容易的。那么,其实在“侧信道”上,我们还可以直接注入一些变化。这些变化一般都具有一些随机性,因此在最后被攻击系统中会体现为出现了一些“故障”,基于这些“故障”就一样可以窃取秘密信息(例如辅助泄露密钥),或者真正的跨越权限写,或者更常见的,绕过权限检查(那不过是数字电路中的一个bit罢了)。

这就是故障注入攻击的概念了,它的形式与侧信道攻击经常比较类似,但是概念上又非常不同。