论蹭热度,今天要推荐的论文堪称个中高手。在商业上,它蹭上了在2020年因为疫情原因申请破产保护的全球租车巨头Hertz;在学术上,它蹭上了当年红极一时的炸子鸡漏洞HeartBleed。这就是我们今天要为大家介绍(可能朋友圈已经疯狂转发了)的论文——Hertzbleed: Turning Power Side-Channel Attacks Into Remote Timing Attacks on x86
一般来说能在投稿的同时申请一个网站进行宣传的学术论文都是很有商业头脑的,本文沿袭了前辈的风格,注册了 https://www.hertzbleed.com/ 提出了名为Hertzbleed Attack的新型侧信道攻击。这种攻击的背后是什么原理呢?我们首先去牙膏厂的主页上回顾一下相关知识 https://www.intel.cn/content/www/cn/zh/gaming/resources/turbo-boost.html
我们知道,CPU运行时频率不是一成不变的,更为严重的问题在于,运行频率的变化可能会和处理的数据内容具有相关性。但凡具有安全mindset的同学看到这句话,立马就会肾上腺素飙升了吧?是的,本文作者研究的就是这种隐秘的相关性产生的安全问题。由于处理的数据和CPU运行频率具有相关性,攻击者一旦能找到一种观察CPU运行频率的侧信道,就有可能揭示相关联的数据,这种威胁对于密码学软件来说是致命的!作者发现,Intel旗下的所有CPU,AMD的部分CPU(包括Zen 2和Zen 3系列产品)都受到Hertzbleed Attack的影响。更为严重的是,Hertzbleed Attack背后的深层次原因——CPU的动态频率调整已经在现代CPU的设计中广泛使用,所以ARM的CPU有可能也会遭殃(作者尚未研究清楚)。
回到技术细节上,在Hertzbleed Attack攻击中,主要利用了当前CPU中采用的Dynamic Voltage and Frequency Scaling(DVFS),也就是动态电压频率调节特性。现在的密码学软件代码通常会使用常量时间实现(constant-time programming)技术,防止代码在不同的(机密)输入下执行时间产生差异。但是,Hertzbleed Attack攻击揭示了现代CPU上的另一个运行特性,即使代码本身使用了常量时间实现,CPU在处理不同的数据(例如某个寄存器的值中为1的比特数更多时)运行频率也会有所差异(特别是现代CPU动辄上GHz的高频率),这种frequency side channel的出现,让传统意义上认为是常量时间运行的安全代码实现也变得不安全。
为了利用这种frequency side channel,本文作者深入研究并逆向了x86/64架构下CPU的电压/频率变化和所处理的数据之间的相关性,揭示出CPU在处理数据时,数据的汉明重量(Hamming weight,即各个bit位上值为1的多少)和运行频率之间有着直接的关系。此外,在不同计算过程之间,不同数据的汉明距离(Hamming distance)也会对运行频率产生影响(从物理学上这也很直观,bit翻转本身也是需要消耗能量的)。这两方面的因素共同作用在x86/64架构的CPU上,就导致了Hertzbleed Attack攻击。
为了体现本文的蹭热度能力,作者再一次重拳出击,打向了密码学的又一个当红小生——后量子密码。作者针对SIKE(https://www.microsoft.com/en-us/research/project/sike/),也就是亚马逊、微软等公司和一帮大学一起设计的一族后量子密码密钥封装协议( key encapsulation mechanism,KEM)开展了分析。所谓的KEM可以认为是介于密钥交换和公钥加密之间的一种设计,可以直接实现密钥交换,也可以转换成公钥加密。SIKE的实现基于一种叫做Supersingular Isogeny Diffie-Hellman (SIDH) 的密钥交换协议,听上去跟传统的DH有点关系,因此也可以扩展到椭圆曲线域上。这背后其实是后量子密码体制研究中的一个重要研究方向——基于椭圆曲线同源的密码体制(Isogeny-based Cryptography)。具体的理论知识小编也不懂,写多了就容易丢人,就此打住,我们还是继续看软件安全相关的内容。
为了观察CPU频率,作者通过观察相关的MSR寄存器(x86架构处理器中一系列用于控制CPU运行、功能开关、调试、跟踪程序执行、监测CPU性能等方面的寄存器)中的MSR_IA32_MPERF
和 MSR_IA32_APERF
来监视CPU的频率变化。同时,通过监视Running Average Power Limit(RAPL)接口的相关MSR寄存器来观察CPU能耗变化。作者对不同的Intel CPU做了测试(好像作者比较缺钱,没有测试Alder Lake长者湖?),使用了 stress-ng benchmark suite 中的int32-float
和int32
两组测试用例。
在下面的测试结果示意图中展现了非常重要的攻击细节:CPU在满负荷工作时,以最高频运行的时间是有限的(是男人就下一百层!),然后就会受到控制电路的约束,降频保平安(这里我们猜测一下作者为什么没有测试长者湖,因为可能还没来得及降频就过热死机了)。而这个降频变化发生的时间节点,就是攻击可以利用的点!攻击思路大致是这样:1)输入不同,CPU的运行负载就会不同;2)运行负载不同,降频的时间节点就不一样;3)根据降频的时间节点,并假定攻击者知道特定的运行程序及其输入范围,就能够通过观察频率变化来反推运行输入的内容!
后续的研究内容主要是详细分析了数据的汉明重量和不同数据的汉明距离对运行频率的定量影响,详细内容可以参考论文,我们就不在这里展开了。
由于公钥密码算法通常会涉及到很多密集的运算任务,因此直观上就很适合作为Hertzbleed Attack的攻击对象(作者敢不敢去攻击一下TEA算法哈哈哈),而且在这里小编还从论文中学了一个用法“SIKE is built on somewhat abstruse math”(这篇论文的作者经常用一些很不平易近人的英文),所以很多细节我们就不去深入了,希望懂后量子密码的同学能够和搞软件安全的同学通力合作来一起开展相关工作!用小学生能理解的语言来描述的话,相关的攻击是通过构造一系列请求去访问部署了SIKE的远程服务器,这里面有一些请求利用了作者所说的“深奥数学知识“,能够产生零点(汉明重量低),导致运算时功耗需求变少,频率就能飚上去,因此服务器返回响应的时间就会变少(注意这部分里面忽略了海量细节,理解上存在极大的偏差,请大家不要相信小编,而要仔细研读原文),以这样的测量方式来实施Hertzbleed Attack显然是可行的。
有了这么好的一个区分器,作者不仅展示了针对后量子密码的代码实现的攻击,还在论文中展示了针对KASLR的攻击,以及如何利用频率变化来构造一个covert channel用于秘密信息传输(在Section 6中介绍)。
针对Hertzbleed Attack,牙膏厂给了相关回复,受影响的密码库也进行了相关的防护:
https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00698.html
但是我们感觉这个问题可能会长期存在并影响很多用户,毕竟小编桌上的NUC经常会在Windows更新的时候风扇转个不停,为什么我就不能想到Hertzbleed Attack这样的思路呢?
GitHub项目
https://github.com/FPSG-UIUC/hertzbleed
论文PDF:
https://www.hertzbleed.com/hertzbleed.pdf
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...