一种针对云平台的缓存侧信道攻击方法研究

2020-03-25 15:14陈小全
价值工程 2020年4期

陈小全

摘要:针对部分英特尔x86架构CPU产品设计上的漏洞,提出了一种新的通过衡量数据读取时间的信息获取方法。该方法利用数据从主存读取和从Cache读取的显著时间差异,对比阈值和读取花费时间的大小来标记数据来自Cache还是主存,进而采用侧信道攻击的方式获取目标进程的数据。实验结果显示,该方法在无噪声环境中数据恢复率可达到90%~100%,在低噪声的环境中数据恢复率也可达到72%左右,在高噪声环境中恢复率略低于45%。与当前其他的攻击方法相比,具有攻击实施的门槛较低,数据恢复成功率高的特点。

Abstract: Aiming at the vulnerability of some Intel x86 architecture CPU product design, this paper proposes a new information acquisition method by measuring the data reading time. The method utilizes the significant time difference between the data read from the main memory and the read from the Cache, compares the threshold and the time spent reading to mark the data from the Cache or the main memory, and then uses the side channel attack to acquire the data of the target process. The experimental results show that the data recovery rate of the proposed method can reach 90%~100% in a noise-free environment, and the data recovery rate can reach 72% in a low-noise environment. The recovery rate is slightly lower than 45% in a noisy environment. Compared with other current attack methods, the method in this paper has the characteristics of low threshold of attack implementation and high success rate of data recovery.

关键词:信息窃取;侧信道攻击;跨进程攻击;熔断漏洞;高级加密标准

Key words: data leak;side channel attack;cross-process attack;meltdown;AES

中图分类号:TN915.08                                  文献标识码:A                                  文章编号:1006-4311(2020)04-0269-05

0  引言

自1988年SUN微系统公司的合作创建者约翰提出云计算概念以来,云计算服務已经经历了三十多年的发展历程。在2005年亚马逊推出AWS(Amazon Web Services)后,IT界衍生出了新的服务模式——云计算服务。云计算服务中包含了虚拟化技术、自动化部署、分布式框架的广泛应用,对外表现出超强的计算能力和易扩展的特性。然而一个新的事物产生,必将带来新的安全隐患,这种计算速度远超脱机计算的解决方案,实则包含敏感数据泄露等安全问题。云计算服务的核心思想是将物理服务器资源完全虚拟化,分配给多个用户使用,不同的用户共享一个物理资源。但针对云计算服务的旁路检测攻击、拒绝服务攻击、侧信道窃取用户机密信息攻击等已经成为云计算面临的主要安全威胁。当前,云计算平台针对这些安全威胁所做的防护措施主要包括两方面:一方面是启用地址空间布局随机化技术(Address Space Layout Randomization,ASLR)[1],让攻击者难以确定攻击面的位置,从而加大实施攻击的难度。另一方面则是设置严格的边界检查,即不允许进程跨边界的信息读取。这两方面的防护措施在一定程度上保护了云计算平台的安全。此外,针对云平台中虚拟机的Cache缓存侧信道攻[2]击也都由于当前商业云平台中启用了Cache缓存隔离、定期清除缓存等防护措施而被有效地阻止。但不可否认的是,在网络空间中是没有绝对的安全的。可能在一定的时间和空间范围内,云计算平台处于安全的状态,但在另一个时间和空间范围之内就不一定安全了。有鉴于此,本文针对当前云平台现存的安全措施,基于CPU存在的漏洞,提出一种新的针对云计算平台的攻击方法。这种新的攻击方法可以绕过云平台现存的安全措施,实现云环境中虚拟机的跨进程信息窃取和信息恢复。实验结果证明,本文所提出的攻击方法与当前其他的虚拟机跨进程信息窃取方法相比,本方法适用范围广、执行效率高、实施条件门槛低的优点,在信息的恢复度上可以达到90%以上,在某些情况下甚至可以达到100%。

本文的组织如下:第一节介绍相关的背景知识和技术知识;第二节介绍攻击实施的假设场景;第三节对实施攻击的总体流程进行介绍;第四节将详细阐述本文提出的攻击方法的实施过程;第五节说明本文提出的方法的一些技术细节问题,包括数据来源的判定方法和数据恢复率的计算方法;第六节对本文提出的方法进行了总结。

1  相关背景介绍

在这一节,我们将对本文提出的方法涉及到的技术背景进行介绍,这将有助于对本方法的理解。

1.1 高速缓存

高速缓存存储器(Cache)位于CPU中,一般分为三个部分,L1缓存、L2缓存和L3缓存。其中,L3又称为LLC(Last Level Cache,LLC)缓存。高速缓存的加入是为了解决CPU从主存中读取数据速度过慢的瓶颈问题。通常情况下,Cache的引入解决了内存地址读取花费时间上的问题。CPU执行读取指定地址的内存命令时,将目标地址与缓存行中的内存地址作对比,如果目标地址在缓存行中,称为缓存命中,直接进行虚拟地址到物理地址的映射,则程序执行的速度会很快。反之,称为缓存未命中,CPU将访问内存中的映射表进行虚拟地址到物理地址的转换,在这种情况下,程序执行的速度会比较慢。

1.2 侧信道攻击

侧信道攻击(Side Channel Attack,SCA)是指通过监测设备运行中的能量消耗、时间消耗、功率变化水平等侧信道信息来实施攻击的一种方法。通过对信息进行能耗分析和数据分类,可对设备的加密过程造成严重的威胁。这种侧信道信息收集的方法,比传统通过数学分析密码更高效,攻击者很容易从收集到的信息中寻找到加密结果的特征信息。本文所提出的方法借鉴侧信道攻击手段,通过基于数据读取时间的探测,确定数据的来源。该方法的好处在于抛开了复杂的密码加密过程和结果归类分析过程,对加密结果直接提取特征分析从而泄露敏感信息。

1.3 熔断漏洞

CPU分支預测是提高CPU使用率的一种优化策略。目前计算机的现状为CPU性能过剩,由于调度算法的瓶颈和资源竞争的原因,导致CPU的使用率过低。这样,CPU制造商就通过添加分支预测技术,使CPU在一个周期内能执行更多的机器指令,提高CPU的使用效率。在执行分支预测的过程中,如果CPU在执行指令寄存器时遇到了多种选择,比如判断语句、选择语句,CPU就会通过广度优先或深度优先的搜索算法对所有可能进行试探,并将搜索结果保存在数据寄存器中。如果访问未授权空间则抛出异常,CPU将回滚到上一次断点,判定为分支异常。反之,判定为分支预测成功,并有效地提前存储了指令寄存器的执行结果。

在去年初被发现的熔断漏洞(Meltdown)[3-5]就是通过恶意使用CPU的分支预测策略,使用主动抛出异常指令的攻击方式,在异常指令后将目标数据写入到缓存中,从而避开了CPU对数据执行的检查,使得跨边界的数据读取变为现实。

1.4 Flush+Reload攻击

Flush+Reload攻击是一种基于Cache的侧信道攻击方法[6-8]。该攻击方法可以分为以下几个攻击过程。Flush过程,攻击者使用clflush指令清除内存数据对应的L1、L2、L3的缓存行内容,即将缓存行中的内存地址清除并重置映射表。Reload过程,攻击者先使用rdtsc指令获取计数器中的时间,将其存储到寄存器中,该时间我们记为T1。接下来执行读取数据的指令,之后获取寄存器中的时间值,该时间我们记为T2。最后计算T1和T2的差值,并将这个差值和提前设定的阈值做比较。若差值大于设定的阈值,则说明缓存未命中,数据存储在主存中。反之,则表示缓存命中,数据存储在Cache中,进而攻击者可以获取目标程序的机密数据。

1.5 AES加密算法

高级加密标准(Advanced Encryption Standard,AES)[9-11]是一种高级加密算法,用于替代先前的数据加密标准(Data Encryption Standard,DES)加密算法。英特尔在Clarkdale架构处理器上第一次使用了AES加密指令集,伴随云平台的迅猛发展趋势,AES被广泛应用于云计算、云桌面等云计算领域中。迄今为止,使用AES指令集加解密效率约为不使用情况下的200%。在Linux环境下,可通过命令查看是否支持AES加密指令集。

2  攻击场景假设

为了详细叙述本文提出的攻击方法,我们做以下的攻击场景假设。

假设1:实验环境中的云平台采用严格的防御措施保证用户程序的隔离性。云平台符合主流云平台的防御措施,提供部分内存、缓存共享。同时在云平台内部不存在任何威胁。

假设2:攻击者为云平台服务的使用者,具有虚拟机的高权限,以及拥有程序的执行权限,并使用OpenSSL1.1.1进行加密操作。其他版本的AES加密虽然没有测试,但从理论上来说,本文所提出的方法也都适用。

上述假设均符合实际应用场景,假设1中针对攻击者背景知识的假设也具有相当的普适意义。为了方便描述,下面将攻击者创建的进程称为攻击进程,将被攻击的进程称为目标进程。

3  攻击的实施过程

攻击进程通过基于OpenSSL的加密程序将明文信息进行密码分组链接(Cipher-Block Chaining,CBC)工作模式下的AES加密,并存储加密结果到内存中。需要注意的是,加密后的数据大小要和Cache中L1、L2、L3的缓存容量之和相同。因为如果加密后的数据大于缓存寄存器的总容量,会导致数据被覆写且不能保证恢复成功率。其次,需要在读取过程中持续的运行加密程序。这样才能使加密程序使用同一数据反复刷新Cache中的内容,以保证数据读取成功的机率维持在90%~100%的高水平范围之内。此外,如果系统开启了ASLR技术,将会导致程序入口地址的偏移量发生变化。为了解决此问题,可以使用暴力破解的方式获取表间转换的偏移量,再通过物理地址与虚拟地址之间的映射关系计算出进程的入口物理地址,进而读出指定物理地址的数据。经过我们的测算,该方法耗费的时间一般在几分钟和几个小时之内,时间花费虽然较长,但获取地址偏移量后,可以攻击的过程中重复使用。

本文提出的攻击方法的一个攻击过程由三个阶段组成。在第一阶段中,从映射表中剔除被监控的内存映射,在第二阶段,获取寄存器中的时间,对指定内存进行读取操作。在第三阶段,攻击进程重新载入内存,测量重新载入的时间。如果在等待的阶段,目标进程访问了指定的内存地址,内存地址就在Cache中有记录,读取所花费CPU周期小于阈值。如果目标没有访问指定的内存地址,则这个地址就需要从内存中查找,读取花费时间大于等于阈值。该算法意在验证通过Flush+Reload的攻击手段读取缓存中的敏感数据的可靠性。图1显示了攻击的三个阶段。

4  攻击方法的具体实现与实验测试

本节我们将详细介绍本文所提出方法的具体实现细节和实验测试的过程。我们的实验分别在国内某主流云平台和VMware vSphere 的Esxi 6.5、6.7虚拟化平台上进行。其中,国内某主流云平台的安全策略由云平台本身提供,在实验过程中不做任何改动。VMware vSphere Esxi 6.5和6.7的实验环境由一台Dell R720和两台Dell R420服务器组成集群来构成,并使用虚拟私有云(Virtual Private Cloud,VPC)来对云环境进行隔离。另外,Esxi 6.5和6.7中采用默认安全策略,也不做任何安全策略上的改动,因此我们的实验环境具有上述假设1中提到的普适意义。为了充分证明本文所提出方法的可行性和可靠性,实验中产生的数据由未知安全策略的云平台中采集,并制成统计图来显示。实验过程中的数据加密方式采用OpenSSL1.1.1进行加密。本文所提出方法的核心在于利用CPU从内存和缓存中读取数据花费的时间不同的特性,通过使用Flush + Reload方法读取内存地址,对比读取数据花费时间同阈值的大小关系,确定数据处于缓存中还是内存中。具体的攻击方法实现如下所示。

在步骤一中,将Cache行重置,确保最大可能性减少其他程序产生的噪声值干扰。在步骤二中,确保数据在Cache中。在步骤三和步骤四中,利用熔断漏洞的分支特性,将缓存数据读取到缓冲区,进而读取用户的机密信息。

下面我们将介绍本文所提出的攻击方法在实施过程中的一些实现细节。

4.1 基准测试

基准测试用于检测目标机的CPU是否受熔断漏洞的影响。根据实验结果表明,除了AMD R7和i9部分处理器不受熔断漏洞的影响之外,其他的CPU大都受该漏洞的影响。在本文的实验环境中,实验服务器是Dell R720服务器。该服务器使用的CPU的型号为E5-2603,受到熔断漏洞的影响,故基准测试通过。在国内某著名云平台进行实验时,该云平台使用的CPU同样受到熔断漏洞的影响,使用本文提出的方法可以获取目标程序的信息。但我们也经过实验证明,采用不定期清理Cache映射表的方法,可以部分的阻止该方法的成功实施。

4.2 数据读取工具

本文提出的方法用来读取数据的工具以目标程序的物理地址作为参数,将指定物理地址的数据进行转化读取,使用的读取方法类似于文献[4]中的方法,通过记录读取时间,以及从内存读取的时间和从缓存读取的时间显著差异来断定数据的来源。图2显示了实验结果的可靠性。

4.3 噪声降低

在实验过程中,系统当中的其他进程如Firefox、apt-get、Ping命令在发送网络请求时会产生噪声。关于这一点,可以使用手动关闭进程的方式减少噪声的产生。另外,为了减少本文提出的方法因刷新操作而产生的噪声,本文采用文献[5]中的方法使用rdtsc指令最小化的调用系统资源,从而降低因刷新而产生的噪声。为了说明CPU噪声对攻击进程的影响,本文使用不同CPU核心来模拟不同的负载环境,将结果制作成如图3、图4统计图。

由此可见,CPU的负载会影响数据恢复的成功率。在使用Dell R720服务器实验时,使用负载较高的CPU核心执行恢复程序的数据恢复可靠率较高。在Linux环境下,可以使用taskset指令单独调用一个CPU核心执行程序,从而增大指定序号CPU负载程度。

5  阈值衡量标准

5.1 阈值衡量标准公式

本文所提出的方法中,衡量Cache是否命中的阈值是判断数据来源的关键参数,将地址读取花费时间和阈值进行对比可以判断数据的来源。大于阈值,则證明数据来源于内存。反之数据来源于Cache缓存。通过阈值对比法判断数据来源的依据是CPU的一种硬件特性,计算的公式可以在CPU的开发手册中明确找到。本文所使用的阈值计算方法如下:

假设数据长度为a,执行第i(i=1,2,3……0

情况1 Fi+Ri>=v判定为数据来源于主存。

情况2 Fi+Ri

简而言之,该公式说明了阈值取值的可靠性。从而证明通过对比读取指令所需要的时间来判断数据存储的位置的可行性。

5.2 可靠率衡量公式

在实验过程中,通过反复读写数据确保了数据存储在Cache中。通过5.1中阈值衡量公式可以区分数据是否来源于Cache,记录读取时间是否小于阈值的为合法数据,并且设合法数据的总个数为count。将合法数据与源数据进行对比,如果数据一致,则可以认为是有效数据。可靠率的计算公式为:。通过该可靠率计算公式,就可以判断本文所提出的方法恢复数据的可靠程度,量化的表现出该方法的实施效果。

6  结语

本文所提出的攻击方法思路来自于主存读取数据和Cache读取数据的时间差异特性,并在其基础上进行了改进。最后以攻击AES加密算法为例证明了该方法跨进程恢复信息的可行性和可靠性,并提出了基于Flush+Reload算法提高恢复秘钥的准确率的算法,最后指出高负载对恢复信息可靠性的影响。

參考文献:

[1]Parikh V, Mateti P. ASLR and ROP Attack Mitigations for ARM-Based Android Devices[C]// International Symposium on Security in Computing & Communication. 2017.

[2]LIU, F., YAROM, Y., GE, Q., HEISER, G., AND LEE, R. B. Last-Level Cache Side-Channel Attacks are Practical. In IEEE Symposium on Security and Privacy – SP (2015), IEEE Computer Society, pp. 605-622.

[3]Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher,Werner Haas, Anders Fogh, Jann Horn, Stefan Mangard, Paul Kocher, Daniel Genkin, Yuval Yarom, and Mike Hamburg. Meltdown: Reading kernel memory from user space. In 27th USENIX Security Symposium (USENIX Security 18), Baltimore, MD, 2018. USENIX Association.

[4]Simakov N A, Innus M D, Jones M D, et al. Effect of Meltdown and Spectre Patches on the Performance of HPC Applications[J]. 2018.

[5]Trippel C, Lustig D, Martonosi M. MeltdownPrime and SpectrePrime: Automatically-Synthesized Attacks Exploiting Invalidation-Based Coherence Protocols[J]. 2018.

[6]Yarom Y , Falkner K . Flush+reload: a high resolution, low noise, l3 Cache side-channel attack[C]// Usenix Conference on Security Symposium. USENIX Association, 2014.

[7]Zhou P, Wang T, Lou X, et al. Efficient flush-reload cache attack on scalar multiplication based signature algorithm[J]. Science China Information Sciences, 2018, 61(3):039102.

[8]Yuan Z, Li Y, Sakiyama K, et al. Recovering Memory Access Sequence with Differential Flush+Reload Attack[M]// Information Security Practice and Experience. 2018.

[9]Neve M, Seifert J P. Advances on Access-Driven Cache Attacks on AES.[J]. Lecture Notes in Computer Science, 2006, 4356:147-162.

[10]Pammu A A, Chong K S, Ho W G, et al. Interceptive side channel attack on AES-128 wireless communications for IoT applications[C]// Circuits & Systems. 2017.

[11]Li-Dong X U, Wang M Q, Mathematics S O, et al. A meet-in-the-middle attack on 10-round AES-128[J]. Journal of Shandong University, 2018.