近日,南方科技大学计算机科学与工程系张殷乾教授荣获计算机安全领域顶级会议ACM CCS的“Test-of-Time Award”(时间检验)奖项,该奖项用于表彰张教授于2012年发表的论文“Cross-VM Side Channels and Their Use to Extract Private Keys”。据了解,CCS的“时间检验奖”自2012年开始设立,主要用于表彰十年前发表在CCS上具有长期影响和重大影响的论文。十年间仅有18篇论文获得该奖项。
该论文的核心贡献是在跨虚拟机场景下首次实现了能够提取数字签名私钥的微架构侧信道攻击。2012年之前,云计算方兴未艾。虚拟化技术(virtualization)是实现云计算平台上用户之间隔离的核心技术之一。它利用CPU、内存、以及I/O的虚拟化,实现了虚拟机之间的隔离。在该论文发表之前,一般认为由于CPU和内存的虚拟化,以及当时云平台普遍采用的多核CPU架构,攻击者很难进行跨虚拟机的微架构侧信道攻击来窃取私钥信息。
为了研究公有云中多租户共享云平台场景下的安全问题,该论文首次在多核CPU上实现了跨虚拟机的细粒度缓存侧信道攻击,并成功地从当时最新版本的libgcrypt开源密码库窃取了完整的ElGamal数字签名算法私钥。在攻击实现的过程中,文章克服了一系列挑战,包括如何提高侧信道观测粒度、如何应对侧信道的噪声干扰、以及如何处理虚拟机vCPU在多核CPU中迁移等等问题。
如何提高侧信道观测粒度
虚拟机管理器的CPU调度方式使得缓存侧信道攻击极具挑战。为了实现细粒度的侧信道攻击,攻击者VM必须与被攻击VM在同一CPU核上频繁地交替执行,攻击者两次执行之间的间隔被称为侧信道观测粒度。为了能够以更细的粒度观测被攻击VM在执行过程中在缓存上留下的信息,以便能够观测到密码算法中密钥的每一个比特所对应的信息,攻击者必须提高侧信道观察粒度。
在当时,尚没有针对虚拟化的CPU调度场景实现跨虚拟机的细粒度观测技术。面对这个挑战,论文提出利用攻击者VM的多个vCPU之间的处理器间中断(Inter-Processor Interrupt),从攻击者控制的一个vCPU频繁地向发动侧信道攻击的vCPU发送IPI,使得攻击vCPU可以非常频繁地获得物理CPU的控制权,实现细粒度的侧信道观测。
如何应对侧信道的噪声干扰
文章使用了基于Prime+Probe攻击方法的L1指令缓存进行侧信道攻击。通过观测被攻击VM执行的指令在L1指令缓存中的映射,攻击者可以推测出被攻击VM的代码执行顺序,并且进一步推测出VM中签名算法的密钥。Prime+Probe对rdtsc指令的精确度非常敏感,导致缓存侧信道本身由于测量存在显著的噪声,此外,VM管理器在执行调度时也使用L1缓存,进一步加剧了侧信道噪声。
为了滤除缓存中因硬件和软件的影响而产生的众多噪声源,文章使用机器学习算法,利用支持向量机(Support Vector Machine,SVM)将L1缓存侧信道的观测结果与被攻击VM中的密码学原语(例如大整数乘法和平方)关联起来。为了纠正SVM对部分代码路径的分类错误,文章借助于每个密码学原语生成的冗余的观察结果,以及关于受害者代码路径集的先验知识,利用隐马尔可夫模型(Hidden Markov Model,HMM)纠正SVM的错误输出(如图1所示)。实验结果展示,SVM+HMM的组合学习方法能够很准确地通过侧信道信息识别密码算法原语。
图1 HMM模型示例
如何处理虚拟机vCPU在多核CPU中迁移
由于云平台多采用多核CPU,虚拟机管理器的CPU调度算法会频繁地把虚拟机的vCPU在多个核上迁移,实现负载均衡。由于论文采用了L1缓存,攻击只能在同一个CPU核上进行,一旦vCPU发生迁移,攻击将被中断。在同一次数字签名过程中会发生多次vCPU迁移,导致一次侧信道攻击无法提取完整密钥。
为了解决上述挑战,文章提出了一种动态规划算法,通过侧信道对被攻击VM的多次数字签名过程进行攻击,收集足够多的候选代码“序列”,利用动态规划算法将SVM+HMM输出的多个代码路径片段“缝合”在一起,从而构建更完整的代码“序列”。最后,经过自动化的筛选,得到精度十分高的完整代码路径,可以得到完整的签名私钥。
图2 跨VM侧信道攻击主要步骤
利用上述技术,文章提出了跨虚拟机缓存侧信道攻击并自动提取完整密钥的流程(如图2所示)。第一步,跨虚拟机的缓存Probing,通过频繁的IPI实现细粒度的L1指令缓存侧信道观测。第二步,利用SVM对侧信道读取的信息进行分类,识别出密码学原语(大整数乘法或平方)的代码段。第三步,利用HMM消除侧信道攻击的噪声。第四步,利用多次攻击的结果进行动态规划拼接代码“序列”并提取完整签名私钥。实验表明,攻击者可以通过几个小时的侧信道信息采集,实现对4096比特安全强度的ElGamal数字签名私钥的窃取过程。
该论文虽然在多个维度进行了技术创新,当然也存在着一定的时代局限性。例如,论文中实验用的CPU是当时Intel主流的Core处理器,并没有采用inclusive的缓存包含策略(cache inclusive policy),也就是末级缓存(Last Level Cache,LLC)不会强制包含L1缓存的内容,所以没有办法进行基于LLC的缓存侧信道攻击。后续的Intel处理器多采用inclusive包含策略,使得基于LLC的缓存侧信道攻击变得可能,也使得跨虚拟机攻击变得容易,不需要复杂的机器学习工具。
尽管如此,该工作首次实现公有云场景下跨虚拟机的缓存侧信道攻击,受到了学术界与工业界的广泛关注,在2012年被主流IT媒体广泛报道,被称为“2012年最重要的云安全事件”之一。该工作也是最早结合侧信道攻击和机器学习方法的文章之一,论文至今被引用近千次,对后续的云安全研究、微架构侧信道研究、以及近年来的瞬态执行漏洞研究都有重要的影响。至今,该论文已经被耶鲁大学、芝加哥大学、马里兰大学、宾夕法尼亚大学等世界名校的计算机课程引用作为阅读材料。