文章信息
- 王丽娜 , 章鑫 , 余荣威 , 徐来 , 徐一波 . 2016
- WANG Lina, ZHANG Xin, YU Rongwei, XU Lai, XU Yibo . 2016
- 云环境下基于内存总线的侧信道攻击检测方法
- Memory Bus Covert Channel Detection in Cloud Computing
- 武汉大学学报(理学版), 2016, 62(5): 418-424
- Journal of Wuhan University(Natural Science Edition), 2016, 62(5): 418-424
- http://dx.doi.org/10.14188/j.1671-8836.2016.05.003
-
文章历史
- 收稿日期:2015-08-03

2. 武汉大学 计算机学院,湖北 武汉 430072
2. School of Computer, Wuhan University, Wuhan 430072, Hubei, China
侧信道是指允许进程以危害系统安全策略的方式传输信息的隐蔽通信信道,是对安全信息系统的重要威胁,并普遍存在于安全操作系统、安全网络、安全数据库系统中.公有云环境下,不同机构之间物理隔离被虚拟化技术取代,虚拟边界从传统计算网络环境的传统、单一、显性向模糊、泛化、动态转变,导致侧信道攻击隐蔽性增强.传统的虚拟机间的隔离机制难以防御侧信道攻击,极易导致敏感信息泄露.
Wu等[1],于2012年提出,X86虚拟化平台上以内存总线为媒介的侧信道.这种侧信道的传输速率首次达到了TCSEC(Trusted Computer System Evaluation Criteria)给定的阈值.其可靠,易控制的特点使得这种侧信道攻击更加危险.针对这种攻击,Saltaformaggio等[2]提出了一种防御方案,他们将虚拟机发出的原子指令陷入hypervisor层,在不锁死内存总线的条件下执行相同的原子指令.但是,由于在hypervisor层模拟原子操作,导致云平台遭到内存总线侧信道攻击时负载较高且这种方法不能定位恶意进程.
近年来,侧信道攻击检测技术已取得了一定成果.Yu等[3]提出了一种在云环境中基于cache侧信道攻击的虚拟机同驻检测方法,该方法基于期望和熵分析了cache的负载特征,采用基于聚类的方法提取特征,通过同驻检测策略实现虚拟机同驻检测.Rezaei等[4]提出了一种用来模拟和评价侧信道攻击算法的自动化框架.Wu等[5]提出C2Detection,它在hypervisor层捕获信息流,结合马尔可夫模型和贝叶斯模型来检测隐通道.C2Detection检测的范围广,扩展性强,但该方法需要运行在Dom0的内核态,不易实施.另外,Page[6]等提出利用缓存划分(cache partition)技术来避免虚拟机缓存行的共享.Wang等[7, 8]提出了两种缓存随机化的方法来应对基于缓存的侧信道攻击.Keller等[9]主张只为每个处理器内核分配一台虚拟机,以此阻止基于缓存的侧信道攻击.然而,同一宿主机上驻留的虚拟机共享内存总线,目前的计算机系统架构下,不能物理分割内存总线,故此,该方法不能用来防御内存总线侧信道攻击.
为防止恶意用户滥用内存总线,本文设计了一种内存总线侧信道攻击检测方案.
1 威胁模型 1.1 攻击建模在x86平台上,内存总线是处理器与主存之间通信的主要通道,所有处理器共享内存总线.内存总线的阻塞会产生全系统内可观测到的访存延迟.以此为基础,可以构建一种基于内存总线阻塞的侧信道.
原子指令,一般用于并行计算的同步,如设置互斥锁和信号量等.内存原子指令要求处理器以独占的方式使用共享内存,因此内存原子指令会触发内存总线阻塞.早期的x86架构中处理器利用总线锁(bus lock)实现内存原子指令.设备申请独占内存时,系统会发出特殊的硬件信号来锁死内存总线.为了提高系统性能,现代x86处理器尽可能的从本地缓存(cache)中获取数据.内存原子指令触发时,只需要锁死相关的缓存行(cache line),而并不锁死内存总线.然而,对于未对齐的内存区域,缓存时可能会跨缓存行,这时要执行内存原子指令就必须触发内存总线锁.
综上所述,对一段未对齐的内存区域做原子操作(以下简称为Atomic-M-Exotic)时,会引起整个系统范围内可见的内存总线阻塞.利用这种机制,可以构建一种高速、可靠、跨虚拟机的秘密信道,如图 1.更加危险的是,这种影响整个系统的操作不需要任何系统权限,恶意租户可以在任意虚拟域中以最低权限发起攻击.
|
| 图 1 内存总线侧信道 Figure 1 The memory bus contention-based covert channel |
假设虚拟机A和B位于同一物理主机,攻击者需要从虚拟机A中窃取重要信息并发送至虚拟机B.假设信道需要传送的消息为DSend.首先将DSend分割成多个数据帧,为了方便同步,每个数据帧用差分曼彻斯特码编码.而后,逐比特发送每个数据帧.时钟周期T内,若需要发送的比特DMSend[i]为1,则发送进程Pi持续做Atomic-M-Exotic操作;若需要发送的比特DMSend[i]为0,则进程Pi阻塞.同时,接收进程Pk在时钟周期T内不断访存,计算平均访存时间λ,若λ大于阈值λthre,则Pk认为收到信息DMRecv [i]为1,反之DMRecv [i]为0.
Wu等在文献[1]中构造的内存总线侧信道是一种可靠性较高的信道,攻击算法分三个层面保证信道的可靠传输:
1) 时钟同步:保证发送端与接收端同步的发送和接收信息,避免接收到的信息时序混乱.使用差分曼彻斯特编码实现.
2) 接收确认:接收端收到数据帧需向发送端确认,发送端收到确认才继续发送下一帧.
3) 纠错:传输的数据帧需要一定的纠错能力,使用Reed-Solomon编码实现.
显然,保证可靠传输需要牺牲一定的信道带宽.而本文研究的重点并不在信道的可靠性方面.因此将攻击算法简化,只保留时钟同步功能,如算法1.本文以此算法作为后续研究的基础.
| 算法1 内存侧信道攻击算法 Attack algorithm of bus contention-based covert channel | |
| Sender Prepares DSend by: | Receiver Recovers DRecv by: |
| { DMSend[]:Segmented encoded data to send} | { DMRecv[]∶ Segmented encoded data received} |
| FDSend[] ∶= Break DSend into segments; | FDRecv[] ∶= DiffManchesterDecode(DMRecv[]); |
| DMSend[] ∶= DiffManchesterEnciode(FDsend[]); | DRecv∶= Concatenate FDRecv[]; |
|
Senda Frame: for each Bit in DMSend[] do if Bit = 1 then for an amount of time do Perform atomic operation with MExotic; endfor else Sleep amount of time; endif endfor |
Receive a Frame: for i := 0 to N-1 do for an amount of time do Timed uncached memory access; endfor if Mean(AccessTime) > Threshold then DMRecv[i] ∶= 1; else DMRecv[i] := 0; endif endfor |
本文通过内存阻塞时序特征及系统负载状况将系统状态分类,引入时序熵与时序差分熵,识别系统高危态,并利用虚拟机自省技术定位恶意进程标识.
2.1 侧信道攻击状态分类内存总线旁路攻击的主要手段即造成有规律的内存总线阻塞.经调研发现,VMware平台提供Performance Counter接口用以评估系统性能,其中Memory Counter中提到参数capability.contention[10],表示内存系统阻塞时间占总访存时间的比例.然而Xen平台没有提供类似的参数.为保证通用性,将算法1中的接收端算法稍作修改,用于记录一段时间内的内存总线阻塞情况,如算法2所示.
| 算法2 记录内存总线阻塞 Recording memory bus contention |
| for an amount of time do |
| { IsCon: record the contention of memory bus} |
| Timed uncached memory access; |
| if AccessTime > Threshold then |
| IsCon [i] = 1; |
| else |
| IsCon [i] = 0; |
| endif |
| endfor |
多处理器,多线程的环境下,线程的同步、互斥、对临界资源的操作等等都离不开原子操作.原子操作作为并行计算的基础,在系统负载较高时,可能造成内存总线阻塞.故而,有必要按照系统负载高低以及是否受到内存总线旁路攻击,将系统所处状态分类,如图 2.
|
| 图 2 系统状态分类 Figure 2 The classification of system state |
系统处于状态①、④时,未受攻击,内存阻塞次数随负载升高而变多,IsCon序列分布无规律,属于系统常态.系统处于状态③时,负载高且受到攻击,有大量内存总线阻塞,IsCon序列分布散乱.由图 2中曲线可知,随着系统负载升高,接收端的误码率显著升高.这种状态下,虽然存在攻击,但接收端并不能正确的接收信息,故侧信道攻击并不成立,称为潜伏态.系统处于状态②时,系统负载低且受到攻击,出现大量的内存总线阻塞,IsCon序列分布呈明显的周期性.此时,侧信道攻击有效,记为系统高危态.
2.2 侧信道攻击识别结合内存阻塞的时序特征及信息熵的定义,容易设计算法识别出系统高危态.为方便说明问题,定义符号如下:
IsConj:系统处于状态j时内存总线的阻塞情况; Hconj:IsConj的信息熵; Dconj:IsConj的差分; HDj:Dconj的信息熵.
由信息熵的定义可知,IsConj的信息熵:
Hconj=-(P0×log2P0+P1×log2P1)
其中P0,P1分别为IsConj[i]为0和1的概率.较之其他状态,IsCon1序列所含信息量最少,对应的信息熵Hcon1最低.将IsConj进行差分运算,得到
Dconj[i-1]=IsConj[i]-IsConj[i-1] {i=2,…,N}
注意到,IsCon2序列有明显的周期性,经过差分后Dcon2的信息量将会大幅降低,相应的信息熵HD2低于其他状态.
基于以上分析,可以设计一个简单的算法,用以识别高危态.首先,取一段时间内的IsCon序列,计算其信息熵Hcon.若Hcon小于阈值α,说明系统处于状态①,继续取下一段时间的IsCon序列;若Hcon大于阈值α,说明系统可能处于状态②、③、④.而后将IsCon序列进行差分,得到Dcon,计算Dcon的信息熵HD.若HD大于阈值β,则系统处于状态③、④,算法返回,取下一段时间的IsCon序列;若HD小于阈值β,则系统处于状态,即高危态. 此时系统一定受到内存总线侧信道攻击,再利用VMI定位恶意进程.
2.3 基于虚拟机自省的恶意进程定位在Xen环境中,为了实现操作系统的内存隔离,需要将各操作系统的物理地址“虚拟化”,即虚拟机的物理地址(physical address,PA)不指向真实物理硬件地址,而是对应虚拟机的物理页号(page frame number,PFN).真实的硬件内存地址称为机器地址(machine address,MA),它对应的是真实机器页号(machine frame number,MFN).Xen内部提供了两个表格“M2P”和“P2M”,用于MFN和PFN之间的互转. 特权域Dom0可以向Xen请求访问DomU的M2P和P2M表及各个VCPU的控制寄存器.从这些底层数据出发,可以将DomU的页目录表、页表等结构映射到Dom0内存空间中.
借助于内存地址转换,Dom0可以在DomU外部,透明地完成DomU的内存地址变换,完成映射后,就可以在Dom0中自由访问该内存区域,实现对DomU内存的透明读写.
以Dom0的视角来看,从DomU中映射而来的内存信息是毫无意义的0,1序列.这种现象称为“语义鸿沟”(Semantic Gap).为了从无意义的内存数据中还原有效信息,需要定位相关的数据结构的位置和关键字段的偏移量,如图 3所示.在VMI环境下,访问某字段时,只能通过首地址加偏移量直接访问内存.
|
| 图 3 重构进程 Figure 3 Reconstruction of process |
1) System.map:Linux系统内核在编译完毕时,会生成该内核符号表文件,存放当前内核的所有符号(symbol)及其对应的内核虚拟地址;
2) init_task:系统启动时第一个进程,作为进程控制块的双向链表的头结点;
3) task_struct:容纳了一个进程的所有信息,是系统对进程进行控制的唯一手段;
4) file descriptors:文件描述符(fd),进程通过fd访问文件,包括磁盘文件、设备和网络连接;
5) file_struct: 记录文件描述符的使用情况.
监测系统检测的系统处于高危态后,暂停所有虚拟机,并在Dom0下遍历所有虚拟机的当前进程的当前内存页框,借助语义还原技术重构语义.之后,将当前内存页框的二进制代码反汇编为汇编代码.由第1节的分析可知,恶意进程一定会发出原子指令.原子指令一般用于设置互斥锁和信号量,如atomic_flag_test_and_set,atomic_ fetch_add等.监测系统匹配这些原子指令,若发现某时间段内某进程频繁发出原子指令,则认为该进程是恶意的.监测系统记录其进程号和其所在的虚拟机,并发出警报.
假设有N个虚拟机,每个虚拟机内部平均运行P个进程,每个进程占用M个内存页,暂停一个虚拟机平均时间为Tv,扫描一个页面平均时间为Tp.那么遍历当前时刻所有页面的平均时间:
Tscan_all=N×M×P×(Tv+Tp)
而按照本文的策略,暂停虚拟机后,遍历所有虚拟机的当前进程的当前内存页框所需要的平均时间:
Tscan=N(Tv+Tp)
检测的时间复杂度为O(N).实际应用中,物理服务器支持的虚拟机不超过32台,所以N∈(0,32].
3 实 验 3.1 设计实现本文以Xen为例介绍检测系统的设计与实现,如图 4所示.该系统驻留在特权域Domain0.本系统包含两个模块:探测模块与定位模块.两个模块之间通过事件驱动模型通信,本文称此事件为Detect-Locate事件.
|
| 图 4 监控系统架构 Figure 4 Architecture of monitor |
探测模块使用算法1监听内存总线,以10 s为一个周期记录内存总线的阻塞情况.而后,判断系统是否处于高危态,若系统处于高危态,则触发Detect-Locate事件,通知定位模块,否则,探测模块返回继续探测.
定位模块使用Libvmi定位恶意进程.LibVMI原名XenAccess,是美国Sandia国家实验室的Payne等人开发的程序库[11].LibVMI提供了虚拟机内存地址变换的API,可以方便地在主机上透明读写虚拟机的内存,支持Xen和KVM虚拟平台,可以分析的虚拟机系统有Windows(98/2000/2003/XP)和Linux.在Xen平台上,LibVMI调用了Xen的用户空间工具库libxc对DomU进行操作.在完成了地址转换后,使用libxc提供的xc_map_foreign_range函数,将DomU的内存页映射到Dom0,存放在页面缓存中用于任意读写.
3.2 验证分析本文使用物理主机的硬件环境是Intel Core(TM) i5-3470处理器,4 GB内存,虚拟环境配置为:Dom0,204 8MB内存,4个VCPU;DomU,512 MB内存,1个VCPU;Xen版本为4.4.0 .
本文使用两台虚拟机模拟攻击过程.虚拟机ub,如图 5(a),使用操作系统Ubuntu,,模拟被恶意进程侵入的虚拟机(发送端),虚拟机mint,如图 5(b),使用操作系统LinuxMint,模拟攻击者(接收端),图中“+”表示信号1,“-”表示信号0.攻击者已经成功获取两帧敏感数据.检测系统驻留在Dom0,如图 5(c)所示.检测系统成功检测到内存总线侧信道攻击,发出警告.依次暂停所有虚拟域,使用VMI在Dom0中读取当前虚拟域的当前页框.扫描到虚拟机ub时,发现恶意进程,报告其虚拟机号,进程号.Dump memory显示部分16进制机器代码,红框部分为原子操作的机器代码.Beaengine disassembler显示Beaengine工具反汇编原子操作机器代码得到的汇编代码.红框内lock是一个指令前缀,在对应的指令操作期间,使目标操作数指定的存储区域锁定.这段汇编代码对应着atomic_dec_and_test指令.
|
| 图 5 检测系统有效性验证 Figure 5 The verification of system availability |
本文针对云计算环境下基于内存总线阻塞的侧信道攻击,提出了一种新的侧信道攻击检测方法.该方法通过内存阻塞时序特征及系统负载状况将系统状态分类,引入时序熵及时序差分熵,识别出系统高危态,最后利用虚拟机自省技术定位恶意进程.实验结果表明:该方法能准确识别攻击的存在性,并能实现恶意进程的定位.该方法为构建可信云计算环境提供理论技术支撑.
| [1] | WU Z, XU Z, WANG H. Whispers in the Hyper-space: High-Speed Covert Channel Attacks in the Cloud[DB/OL].[2015-06-07]. https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final97.pdf. |
| [2] | SALTAFORMAGGIO B, XUu D, ZHANG X. Busmonitor: A Hypervisor-Based Solution for Memory Bus Covert Channels[DB/OL].[2015-06-07]. http://friends.cs.purdue.edu/pubs/EUROSEC13.pdf. |
| [3] | 余思, 桂小林, 张学军, 等. 云环境中基于cache共享的虚拟机同驻检测方法[J]. 计算机研究与发展 , 2013, 50 (12) : 2651–2660 YU S, GUI X L, ZHANG X J, et al. Co-residency detection scheme based on shared cache in the cloud[J]. Journal of Computer Research and Development, , 2013, 50 (12) : 2651–2660 |
| [4] | REZAEI F, HEMPEL M, SHARIF H. A novel automated framework for modeling and evaluating covert channel algorithms[J]. Security and Communication Networks, , 2015, 8 (4) : 649–660 DOI:10.1002/sec.v8.4 |
| [5] | WU J, DING L, WU Y, et al. C2detector: A covert channel detection framework in cloud computing[J]. Security and Communication Networks, , 2014, 7 (3) : 554–557 |
| [6] | PAGE D. Partitioned cache architecture as a side-channel defence mechanism[J]. IACR Cryptology ePrint Archive, 2005 , 2005 (2005) : 280 |
| [7] | WANG Z, LEE R B. Covert and Side Channels Due to Processor Architecture[DB/OL].[2015-07-09]. https://www.acsac.org/2006/papers/127.pdf. |
| [8] | WANG Z, LEE R B. A Novel Cache Architecture with Enhanced Performance and Security[DB/OL].[2015-08-06]. http://palms.princeton.edu/system/files/Micro08_Newcache.pdf. |
| [9] | KELLER E, SZEFER J, REXFORD J, et al. NoHype: Virtualized cloud infrastructure without the virtualization[C]//ACM SIGARCH Computer Architecture News. New York: ACM, 2010, 38(3): 350-361. |
| [10] | 2009 VMware, Inc. Memory Counters[EB/OL].[2015-06-21]. https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/memory_counters.html. |
| [11] | PAYNE B D, De CARBONE M D P, LEE W. Secure and Flexible Monitoring of Virtual Machines[DB/OL].[2015-06-27]. https://www.acsac.org/2007/papers/138.pdf. |
2016, Vol. 62
