2. 四川大学 计算机学院, 成都 610065
2. School of Computing, Sichuan University, Chengdu 610065, China
随着以虚拟化技术为基础的云计算服务快速发展,在云计算环境下存在的安全威胁也日益增多。传统的基于主机的安全风险依然存在于云计算环境中,例如位于虚拟机中的内核态Rootkit通过破坏虚拟机内核完整性[1],达到攻击租户虚拟机,窃取用户隐私数据的目的。而虚拟机逃逸攻击[2]作为云计算环境所引入的新型安全风险,使得攻击者能够通过利用虚拟机与Hypervisor的交互漏洞,达到篡夺Hypervisor或云平台上其他虚拟机控制权限的目的。
为了有效规避云计算平台上可能存在的若干风险,近年来对租户虚拟机内部和云平台自身的异常行为进行检测成为云计算领域的研究热点之一[3-4]。Kc等[5]基于云平台中的日志设计了异常检测系统ELT,结合日志数据挖掘来检测云平台中存在的攻击行为。Nikolai等[6]结合在VMM(virtual machine monitor)层采集到的云环境下虚拟机的网络传输数据、块设备数据以及CPU利用率,建立了一套基于Hypervisor的入侵检测系统。上述方法都旨在结合云平台或虚拟机的各项系统指标,来检测可能存在的攻击行为,但却忽略了对系统IO指标的分析。针对Hypervisor中大多以IO逻辑漏洞为主的虚拟机逃逸攻击威胁,这样的检测力度则显得不足。对于虚拟机逃逸攻击的检测,主要有汪圣平等[7]通过获取到的虚拟机对外操作请求,匹配虚拟机逃逸行为列表,用于检测虚拟机逃逸攻击。栾建海等[8]通过截获虚拟机到宿主机的数据信息,根据规则库拦截恶意数据,达到检测虚拟机逃逸攻击的目的。现阶段对于虚拟机逃逸攻击的研究相对较少,大多数研究工作都旨在通过白名单方式防范已知的虚拟机逃逸攻击,却不能够有效检测出未知的虚拟机逃逸攻击。
基于主机环境下对异常系统调用序列检测的研究思想[9],随着在虚拟化领域引入硬件辅助虚拟化技术,虚拟机通过I/O模拟操作实现对真实物理硬件设备的访问,由一系列I/O操作所构成的IO序列刻画了虚拟机对真实物理硬件的操作情况,能够描述虚拟机自身的IO行为。然而,提取合适的虚拟机IO序列特征来检测其异常行为,存在着一系列的技术挑战:
1) 虚拟机运行过程中的I/O操作较为频繁。有效捕获虚拟机I/O操作并减少带来的额外性能损耗成为了亟需解决的问题。
2) 建立虚拟机IO序列与虚拟机进程的映射关系可以更加细粒度地描述虚拟机自身的行为。关于虚拟机进程获取的方法,Payne等[10]和Sharif等[11]采用了在虚拟机内部加载模块的方式,但这样的方法对目标虚拟机操作系统依赖性较强且不具有透明性。在虚拟机外部获取进程信息的方法克服了上述缺点,却又因为VMM与虚拟机之间存在着语义鸿沟而带来了新的挑战。
3) 基于系统调用在主机上检测异常入侵的方法还有数据挖掘法[12]、神经网络法[13]和Markov模型法[14]。但云环境下相较于单台主机而言存在的安全威胁更为繁杂,而且传统基于主机的检测方法所带来的局限性也不能满足云环境下对虚拟机逃逸攻击的检测需求。为此,需要采用更加有效的检测方法来检测虚拟机内部的异常行为。
本文针对上述所提到的云计算环境下存在的安全威胁以及现阶段对虚拟机逃逸攻击检测能力的不足,结合所面临的技术挑战,提出了一种基于虚拟机IO序列特征的异常行为检测方法VMDec。其旨在发现虚拟机内部可能存在的IO异常行为,并检测已知和未知的虚拟机逃逸攻击。
1 VMDec系统的设计与实现 1.1 总体架构图 1给出了VMDec系统的总体架构。VMDec系统主要包含4个子功能模块:1)虚拟机进程语义动态获取模块;2)虚拟机IO序列异步采集模块;3)虚拟机IO序列数据建模模块;4)虚拟机IO序列异常检测模块。虚拟机进程语义动态获取模块捕获虚拟机退出操作,语义重构出虚拟机进程信息,建立并实时更新虚拟机进程列表;虚拟机IO序列异步采集模块重组虚拟机IO序列,建立虚拟机IO序列与虚拟机进程映射关联关系;虚拟机IO序列数据建模模块对正常虚拟机IO序列的行为特征进行建模,建立虚拟机IO序列正常行为特征库;虚拟机IO序列异常检测模块基于Markov模型,构建待测虚拟机IO序列短序列集,比对待测样本与正常特征库中样本,从而检测虚拟机异常行为。
1.2 虚拟机IO序列异步采集技术
在Intel VT(Intel virtualization technology)技术的支持下,虚拟机在运行过程中由于读写底层硬件设备,将会触发IO事件并导致虚拟机退出,虚拟机系统上下文由VMX(virtual machine extensions)非根模式切换到VMX根模式,待I/O事件处理完成后,再重新返回虚拟机运行。在KVM中监听虚拟机退出事件,若当前退出是由虚拟机I/O操作引起,则截获当前事件,获取虚拟机退出事件的参数信息,并加入退出事件所属进程信息,将数据重组为一条IO序列。
由于虚拟机触发I/O事件产生虚拟机退出的动作较为频繁,如果在KVM处理虚拟机退出的流程中采集并保存虚拟机产生的IO序列,尽管可以保证采集数据的准确性,但此时虚拟机运行上下文正处于VMM中,数据的处理过程将会对虚拟机恢复正常运行带来影响,从而造成极大的性能损耗。为了解决上述问题,本文提出了一种异步采集技术,其设计思想如图 2。
每当虚拟机IO退出事件发生时,KVM内核模块只需将当次退出事件的参数存入数据缓冲区,虚拟机IO序列异步采集模块通过周期性地唤醒一个自定义内核线程来负责虚拟机IO序列的后续处理过程。异步采集技术在保证数据完整性的同时,带来的额外性能开销较小。
1.3 虚拟机IO序列的进程语义动态获取在x86平台下,控制寄存器CR3(control register 3)中保存了操作系统当前所运行进程的页目录基地址,该值唯一标识了一个进程。在VMM中监控虚拟机的控制寄存器CR3,从而能感知虚拟机内进程的切换过程。
自Linux内核2.6版本后,每个进程在内存中都被内核分配了一个独立的存储区域。以32位Linux系统为例,这个独立的存储区域包含了2个内存页,存放了进程内核栈栈帧和进程thread_info结构体。而thread_info结构体的首地址又指向了进程task_struct结构体的指针, 结构如图 3所示。
在KVM中捕获虚拟机当前CR3寄存器值切换事件,采用式(1)和(2)则可以获得虚拟机当前进程名地址Comm_Addr和进程号地址Pid_Addr:
$ \begin{array}{l} {\rm{Comm\_Addr = }}\\ {\rm{esp\& \sim }}\left( {{\rm{THREAD\_SIZE - 1}}} \right){\rm{ + Comm\_Offset}}{\rm{.}} \end{array} $ | (1) |
$ \begin{array}{l} {\rm{Pid\_Addr = }}\\ {\rm{esp\& \sim}}\left( {{\rm{THREAD\_SIZE - 1}}} \right){\rm{ + Pid\_Offset}}{\rm{.}} \end{array} $ | (2) |
通过上述方法可以获取虚拟机内所有所需的进程信息,并在KVM中构建虚拟机进程列表VM_PROCESS=
$ \begin{array}{l} < {\rm{Process \_CR}}3{\rm{, Process \_NAME, Process \_PID}} > . \end{array} $ |
为了映射虚拟机IO序列与虚拟机内部进程的关系,在虚拟机IO序列异步采集模块的处理流程中,采用虚拟机进程页目录基地址作为索引项,遍历虚拟机进程列表,得到引起虚拟机IO退出事件的当前虚拟机进程信息, 如图 4所示。虚拟机进程列表需要及时刷新,以保证获得准确的虚拟机IO序列与虚拟机进程信息的映射关系。
需要考虑的一种特殊情况是,对于一条虚拟机IO序列可能来源于虚拟机内核。若既定策略将IO序列的来源判定为虚拟机内核模块,将以Process_NAME=“OSkernel”的形式传输数据。
1.4 基于Markov模型的虚拟机异常行为检测数据库中保存了虚拟机中所有进程与其运行过程中产生的IO序列,首先通过预处理将进程与对应IO序列分离,并采用滑动窗口机制,将虚拟机IO序列分割成若干个以固定长度M为大小的IO短序列。再以虚拟机IO短序列为单位,构造Markov链检测模型。本节首先给出如下定义。
定义1 Seq=l1l2l3…lN:
定义2 ShortSeqk=lklk+1…lk+M-1:
定义3 ShortSeqk=lklk+1…lk+M-1lk+M:
定义4 T(ShortSeqk):表示短序列ShortSeqk出现的频数。
定义5 P(ShortSeqk)=T(ShortSeqk)/(N-M+1):表示短序列ShortSeqk出现的频率。其中以M为长度的窗口可以将N个虚拟机IO序列分成N-M+1个大小为M的虚拟机IO短序列。
定义6 T(ShortSeqk):表示状态转移序列ShortSeqk出现的频数。
1.4.1 虚拟机IO短序列生成算法虚拟机IO短序列生成算法实现了一个双层Hash表,分别保存了当前虚拟机IO短序列与对应的虚拟机IO状态转移序列,用于构建后续的初始状态概率矩阵和状态转移概率矩阵,如图 5所示。
以虚拟机进程为单位,记录所有互异的虚拟机IO短序列频率和虚拟机IO状态转移序列频率,并将结果分别保存在HashMap和HashMapTran双层Hash表中。具体算法实现如图 6所示。
1.4.2 建立初始状态概率矩阵和状态转移概率矩阵
对于虚拟机内合法进程而言,其在运行过程中IO操作具有相关性,即当前IO序列的产生依赖于前一个IO序列。对虚拟机IO序列集{Xn,n=0, 1, …, N},
$ \begin{array}{l} P({X_{n + 1}} = {\rm{ }}{i_{n + 1}}|{X_0} = {i_0}, \\ {X_1} = {\rm{ }}{i_1}, {\rm{ }}{i_2}, {\rm{ }} \ldots, {\rm{ }}{X_n} = {i_n}) = \\ P({X_{n + 1}} = {i_{n + 1}}|{X_n} = {i_n}) = \\ P({X_{n + 1}} = j|{X_n} = i) = {p_{ij}}. \end{array} $ |
根据虚拟机IO短序列生成算法,虚拟机IO序列的初始状态概率矩阵Q和状态转移概率矩阵P分别表示为
$ \begin{align} & ~Q=\left[ {{q}_{1}},\text{ }{{q}_{2}},\text{ }{{q}_{3}},\text{ }\ldots ,\text{ }{{q}_{n}} \right]=[P(\text{ShortSe}{{\text{q}}_{1}}), \\ & P(\text{ShortSe}{{\text{q}}_{2}}),\text{ }\ldots ,\text{ }P(\text{ShortSe}{{\text{q}}_{n}})], \\ & P={{\left( {{p}_{ij}} \right)}_{n}}\times n=\{\forall i,\text{ }j; \\ & i\in \text{ShortSe}{{\text{q}}_{k}},\text{ }j\in \text{ShortSe}{{\text{q}}_{k}}{{_{+}}_{1}}, \\ & {{p}_{ij}}=\text{ }T(\text{ShortSeqTra}{{\text{n}}_{k}})/\text{ }T(\text{ShortSe}{{\text{q}}_{k}})\}. \\ \end{align} $ |
其中:qk表示第k个虚拟机IO短序列ShortSeqk出现的频率P(ShortSeqk),且有
$ \begin{array}{l} {P_w} = P({\rm{ShortSe}}{{\rm{q}}_k}, {\rm{ShortSe}}{{\rm{q}}_{k + 1}}, {\rm{ }} \ldots, \\ {\rm{ShortSe}}{{\rm{q}}_{k + w - 1}}) = {\rm{ }}{q_k}\mathop \prod \limits_{i = k}^{k + w - 1} {p_{{\rm{ShortSe}}{{\rm{q}}_i}{\rm{ShortSe}}{{\rm{q}}_{i + 1}}}}. \end{array} $ |
根据生成的虚拟机IO短序列和状态转移概率矩阵计算出所有虚拟机IO状态序列产生的概率。概率越高表明该状态序列越趋近于一个正常的虚拟机IO状态序列。这里的虚拟机IO状态序列是一个由w个虚拟机短序列构成的序列集。根据多次实验测试结果,在实验过程中取w=15作为一个虚拟机IO状态序列的长度具有较高的检测度。对2个待测样本间的虚拟机IO短序列转移状态,如果不存在于正常特征库中,将其状态转移概率设置为一个极小值min。记录虚拟机IO状态序列产生的概率值,如果小于设定的阈值ε,则判定当前虚拟机短序列存在异常行为,将虚拟机短序列和其对应的虚拟机进程信息输出到检测日志,并向云平台管理员发出警报。具体算法实现如下。
1) 生成待测样本的虚拟机IO短序列并构建初始状态概率矩阵,初始化虚拟机IO短序列号k,初始化虚拟机IO状态序列所含虚拟机短序列数w,跳转至步骤2。
2) 若lk≠lN,跳转至步骤3;否则,跳转至步骤6。
3) 若k≠w,计算第k个待测虚拟机IO短序列lk单步转移到第k+1个待测虚拟机IO短序列lk+1的状态转移概率pk(k+1),跳转至步骤4;否则,跳转至步骤5。
4) 若正常行为库中不存在待测的第k个短序列到第k+1个待测短序列的转移状态,设置pk(k+1)=min,窗口滑动至第k+1个待测短序列(k=k+1),跳转至步骤3;否则,窗口滑动至第k+1个待测短序列(k=k+1),跳转至步骤3。
5) 计算邻近的w个虚拟机短序列构成的虚拟机IO状态序列概率Pw。若Pw>ε,表明当前w个虚拟机短序列为正常序列,重置k,跳转至步骤2;若Pw≤ε,表明当前w个虚拟机短序列为异常序列,输出虚拟机IO序列和对应进程信息到检测日志,重置k,跳转至步骤2。
6) 检测结束。
2 实验测试与结果分析本文在KVM虚拟化平台上实现并部署了原型系统VMDec,检测了正常虚拟机和异常虚拟机运行产生的IO序列,来验证系统的功能有效性。异常虚拟机样本选择了两类:一类用于表现传统单台主机自身的异常行为;另一类用于表现虚拟机向Hypervisor发生的异常行为。
实验测试环境如下:宿主机操作系统为64位CentOS7,内核版本为Linux-3.10.1,KVM版本为kvm-kmod-3.10.1,Qemu版本为Qemu-2.4.0;宿主机的CPU型号为Intel(R) Core(TM) i3-3220,主频3.30 GHz,支持硬件辅助虚拟化技术,物理内存为4 GB。测试用的虚拟机均为32位Ubuntu12.04操作系统,内核版本为Linux-3.2.0-113-generic-pae。
2.1 系统功能实验为了验证VMDec系统能够有效检测到虚拟机内存在的异常行为,首先利用正常数据产生训练模型,并测试了4组攻击实验来说明检测结果。
1) 虚拟机自身IO异常行为。实验1:在虚拟机中动态加载Rootkit内核模块,截获虚拟机系统中与设备文件操作相关的系统调用以修改正常系统函数执行路径,构造对设备文件进行了非法读写操作的攻击。攻击导致虚拟机运行一段时间后崩溃。本文采集了虚拟机在运行过程中产生的IO序列,并对比了训练模型中的正常虚拟机IO序列样本,VMDec成功检测到虚拟机内部产生的异常行为。
2) 虚拟机逃逸攻击。实验2:CVE-2015-3456(毒液漏洞)[15]、实验3:CVE-2015-7504[16]和实验4:CVE-2017-2615[17]是Qemu代码的逻辑漏洞,通过在被感染虚拟机中触发漏洞,攻击者能发起虚拟机逃逸攻击,获取到主机的执行权限,并进一步对云计算平台上的其他虚拟机造成破坏。本文在多台待测虚拟机中还原并触发了上述3种漏洞,致使虚拟机逃逸成功。通过比对待测虚拟机IO序列与正常行为特征库,VMDec成功检测到攻击的发生。
表 1比对正常训练模型的建模结果给出了上述4组测试实验的实验结果。
编号 | 检测率/% | 误报率/% | IO序列数 |
实验1 | 96.53 | 5.03 | 623 892 |
实验2 | 99.16 | 3.93 | 512 310 |
实验3 | 98.02 | 2.85 | 647 134 |
实验4 | 98.33 | 4.12 | 424 302 |
其中实验4所利用的是最新被曝出的虚拟机逃逸攻击漏洞,其详细信息还未完全被CVE(common vulnerabilities and exposures)漏洞库记录,VMDec系统能成功检测到利用该漏洞的虚拟机逃逸攻击,也表明了其具有对未知虚拟机逃逸攻击的检测能力。
2.2 系统性能实验 2.2.1 微基准测试本文采用UnixBench作为微观基准测试工具对VMDec原型系统进行性能测试。为了充分展示原型系统对虚拟机运行所造成的性能开销,测试对比了未修改的KVM、未部署异步采集方法的KVM以及VMDec原型系统3种KVM环境下的性能指标。测试结果如图 7所示。
如图 7所示,在CPU性能测试(double-precision whetstone)、磁盘I/O性能测试(file copy)、Shell脚本测试(shell scripts)以及系统调用性能测试方面(execl throughput, system call overhead),VMDec原型系统所带来的额外性能开销均不大,且可以看出相较于非异步采集技术所带来的性能上的提升。由于原型系统需要实时获取虚拟机进程信息,在进程创建与切换效率(pipe-based context switching, process creation)上会带来一定的性能损耗,但兼顾无代理方式对虚拟机操作系统的透明性,该类性能损耗可以接受。
2.2.2 I/O操作测试为进一步说明异步采集技术对虚拟机I/O操作所带来的影响,在虚拟机中编写了测试程序,用于模拟100万次I/O写操作,并记录了测试程序的运行时间。表 2给出了10组实验的平均测试结果。
从结果可以看出,虚拟机在短时间内产生大量I/O操作,与非异步采集技术相比,异步采集技术带来的额外性能开销不大。
3 结语本文提出了一种通过虚拟机IO序列检测虚拟机内部异常行为的VMDec方法。提出了一种基于双层Hash表的虚拟机IO短序列生成算法,并结合虚拟机IO短序列和Markov模型,建立了虚拟机IO行为特征库,通过比对待测样本与正常行为特征库,能够有效检测出虚拟机内部可能存在的IO异常行为以及已知和未知的虚拟机逃逸攻击。VMDec实现在VMM层,不需要对虚拟机操作系统进行修改,提高了系统的安全性和兼容性。最后在KVM虚拟化平台上实现了VMDec原型系统,并测试了VMDec原型系统的功能有效性和性能。测试结果表明,VMDec系统在保证系统功能有效性的同时,额外引入的性能损耗在可接受范围内。
[1] |
陈兴蜀, 赵丹丹, 李辉, 等.
基于虚拟化的不可信模块运行监控[J]. 华中科技大学学报(自然科学版), 2016, 44(3): 34–38.
CHEN X S, ZHAO D D, LI H, et al. Virtualization-based monitoring of untrusted extensions execution[J]. Journal of Huazhong University of Science and Technology (Natural Science Edition), 2016, 44(3): 34–38. (in Chinese) |
[2] | Wikipedia. Virtual machine escape[EB/OL]. [2017-04-01]. http://en.wikipedia.org/wiki/Virtual_machine_escape. |
[3] | GUAN Q, ZHANG Z, FU S. Ensemble of Bayesian predictors and decision trees for proactive failure management in cloud computing system[J]. Journal of Communications, 2012, 7(1): 52–61. |
[4] | TAN Y, VENKATESH V, GU X. Resilient self-compressive monitoring for large-scale hosting infrastructures[J]. IEEE Transaction on Parallel and Distributed Systems, 2013, 24(3): 576–586. |
[5] | KC K, GU X. ELT: Efficient log-based troubleshooting system for cloud computing infrastructures[C]//Proceedings of 201130th IEEE International Symposium on Reliable Distributed Systems. Madrid, Spain: IEEE, 2011: 11-20. |
[6] | NIKOLAI J, WANG Y. Hypervisor-based cloud intrusion detection system[C]//International Conference on Computing, Networking and Communications. Honolulu, HI, USA: IEEE, 2014: 989-993. |
[7] |
汪圣平, 唐青昊. 一种虚拟机逃逸的防护方法及装置: 中国, CN201510958935. 5[P]. 2015-12-18. WANG S P, TANG Q H. Protection method and device for virtual machine escape: China, CN201510958935. 5[P]. 2015-12-18. (in Chinese) |
[8] |
栾建海, 汤迪斌, 李常坤, 等. 一种检测虚拟机逃逸的方法及装置: 中国, CN201610513980. 4[P]. 2016-06-03. LUAN J H, TANG D B, LI C K, et al. Method and device for detecting virtual machine escape: China, CN201610513980. 4[P]. 2016-06-03. (in Chinese) |
[9] | FORREST S, HOFMEYR S A, SOMAYAJI A, et al. A sense of self for UNIX processes[C]//Proceedings of the 1996 IEEE Symposium on Security and Privacy. Oakland, CA, USA: IEEE, 1996: 120-128. |
[10] | PAYNE B D, CARBONE M, SHARIF M, et al. Lares: An architecture for secure active monitoring using virtualization[C]//IEEE Symposium on Security and Privacy, 2008. Washington, DC, USA: IEEE, 2008: 233-247. |
[11] | SHARIF M I, LEE W, CUI W, et al. Secure in-VM monitoring using hardware virtualization[C]//Proceedings of the 16th ACM Conference on Computer and Communications Security. Chicago, Illinois, USA: ACM, 2009: 477-487. |
[12] | HAMID R G, ROYA S S. Toward a policy-based distributed intrusion detection system in cloud computing using data mining approaches[C]//2015 International Congress on Technology, Communication and Knowledge. Mashhad, Iran: IEEE, 2015: 412-419. |
[13] | ILHAME E F, MOHAMMED S, SARA C, et al. The analysis performance of an intrusion detection systems based on neural network[C]//Proceedings of the 4th IEEE International Conference. Tangier, Morocco: IEEE, 2017: 145-151. |
[14] | JHA S, TAN K, Maxion R A. Markov chains, callifiers and intrusion detection[C]//Processings of the 14th IEEE Computer Security Foundations Workshop. Cape Breton, Nova Scotia, Canada: IEEE, 2001: 206-219. |
[15] |
国家信息安全漏洞库. QEMU Floppy Disk Controller缓冲区溢出漏洞[EB/OL]. [2015-06-03]. http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CCNNV-201505-207. China National Vulnerability Database of Information Security. Buffer overflow vulnerability of QEMU Floppy Disk Controller[EB/OL]. [2015-06-03]. http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CCNNV-201505-207. (in Chinese) |
[16] |
国家信息安全漏洞库. QEMU AMD PC-Net Ⅱ Ethernet Controller CRC Handling缓冲区溢出漏洞[EB/OL]. [2015-12-01]. http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-201511-435. China National Vulnerability Database of Information Security. Buffer overflow vulnerability of QEMU AMD PC-Net Ⅱ ethernet controller CRC handling[EB/OL]. [2015-12-01]. http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-201511-435. (in Chinese) |
[17] |
国家信息安全漏洞库. QEMU安全漏洞[EB/OL]. [2017-02-09]. http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-201702-234. China National Vulnerability Database of Information Security. Security vulnerability of QEMU[EB/OL]. [2017-02-09]. http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-201702-234. (in Chinese) |