陈兴蜀 陈佳昕 金 鑫 葛 龙
1(四川大学网络空间安全学院 成都 610065)2(四川大学计算机学院 成都 610065)(chenxsh@scu.edu.cn)
随着云计算技术的快速发展,云平台的安全性也受到了业界的广泛关注.虚拟化技术作为云计算的关键支撑技术,引入了虚拟机监视器(virtual machine monitor,VMM)用以管理云平台上的虚拟机.在虚拟化平台广泛应用的同时,虚拟机却能成为黑客的攻击对象,威胁云平台的安全,故针对虚拟机中的进程进行安全监控与异常检测,维护云平台可用性与虚拟机数据安全性显得尤为重要.
现有的虚拟机安全监控方案主要分为2类.第1类方案[1-2]借鉴传统主机在系统中添加安全服务的方式,通过在虚拟机中添加监视代理监控其异常行为,但缺点在于云计算环境下不同虚拟机系统之间版本差异较大,安全代理可移植性差,对虚拟机自身不具有透明性,易受到攻击,而且在闭源的Windows操作系统虚拟机中也往往难以实施[3].第2类方案[4]采用无代理监控方式,在虚拟机外部对虚拟机进行监控,对虚拟机系统影响较小,且减小了因为添加监控代理服务而引入的额外攻击面.
文献[5]首次提出了一种基于系统调用的检测程序异常行为的方法,通过计算程序运行过程中产生的系统调用序列偏离正常程序序列的程度来确定其是否受到入侵,在现有基于系统调用的异常检测研究中,大多针对主机内的特权进程进行异常行为检测;文献[6]利用系统调用与函数返回地址链作为检测数据源,提出了一种基于隐Markov模型的入侵检测方法,用于区分正常与异常进程行为;文献[7]针对下一代攻击威胁(next generation of attacks,NGA)难以和正常进程行为区分的问题,提出了一种半监督的学习算法,能有效分类异常进程系统调用;文献[8]引入了最小熵长度来描述进程系统调用的用户行为不变性,并结合程序行为不变性,提出了一种进程异常行为检测方法;文献[9]提出了一种上下文无关文法(context-free grammar,CFG)来分析目标进程的系统调用语义,并利用极限学习机(extreme learning machine,ELM)决策目标进程是否为异常进程.上述均为在主机环境下的进程异常行为检测方案,与主机环境不同的是,云计算环境下的虚拟机不仅存在着传统单台主机中的安全风险,还存在诸如虚拟机逃逸攻击[10]的等复杂的安全威胁,仅仅依赖传统主机对特权进程的检测方案,将传统主机入侵检测策略应用于虚拟化平台,往往无法保证检测的全面性;在云计算环境下,文献[11]采用C4.5决策树算法,依赖于虚拟机中的代理程序采集到的数据进行分析并检测,取得了良好的检测效果,但忽略了代理程序自身的安全性和待测数据的有效性;文献[12]提出了一种“Key-Value Pair”算法,分别用于存储进程运行产生的所有系统调用与其后续系统调用序列,但在进程长时间运行下,需要使用极大的存储空间,检测效率不高;文献[13]关注于虚拟机进程运行产生系统调用的频率性,但忽略了对时序性的研究,存在着攻击者伪造正常进程系统调用频率发起恶意攻击的情况.
本文针对上述提到的主机入侵检测方案不适用于云计算环境的问题,以及现阶段云计算环境下入侵检测方案的不足,提出了一种无代理监控方式的虚拟机进程行为检测方法,其旨在检测虚拟机中可能存在的异常进程,发现云平台上存在的攻击行为.本文的主要贡献有4个方面:
1)针对在主机安全问题的研究中,多数研究往往将进程系统调用时序性与频率性相互独立[14],在云计算环境中难以细粒度描述虚拟机中存在的潜在攻击问题.本文提出了一种向量空间方法来同时表征虚拟机系统调用的时序特性与频率特性,并结合平均余弦相似度计算方式提出了一种基于向量空间的系统调用短序列相似度计算方法,能更为准确地衡量序列的匹配程度;
2)引入了文本分类中词频率-逆文本频率(term frequency-inverse document frequency,TF-IDF)[15]算法的思想,为目标虚拟机中所有进程的系统调用进行加权,用于区分租户虚拟机中运行的不同服务,并以所有进程作为检测对象,降低了主机环境下仅对单一特权进程行为进行检测的误报率;
3)设计了行格式存储法(compressed sparse row,CSR)稀疏矩阵与KD树(k-dimension tree)结合的存储策略,优化了基于向量空间方式下的行为模型存储方式,并采用多线程方式并发处理多个待测进程,提高了检测算法的效率;
4)在KVM(kernel-based virtual machine)虚拟化平台上设计并实现了VMPBD(virtual machine process behavior detecting)原型系统,并利用Linux和Windows两种操作系统环境下的正常程序样本和恶意程序样本对原型系统的功能有效性进行了测试.实验结果表明,VMPBD能有效检测出虚拟机中可能存在的恶意进程,且性能损耗在可接受范围内.
图1给出了VMPBD原型系统的总体架构.VMPBD系统修改了原生KVM源代码,添加了虚拟机进程语义重构功能和虚拟机进程系统调用捕获功能.在VMPBD系统既定的监控策略下(包括进程调度事件与系统调用事件),虚拟机进程运行过程中将会触发监控事件导致虚拟机退出(VM Exit),并被VMPBD系统的KVM内核模块捕获.
Fig.1 Architecture of VMPBD图1 VMPBD系统总体架构
图1中语义重构模块监控虚拟机进程调度事件,在VMM中获取虚拟机进程底层语义,采用无代理方式重构虚拟机进程高级语义信息,并分别以进程页目录基地址与进程语义信息作为键值,存入由KVM动态维护的Hash表,实时更新Hash表项.捕获模块监控虚拟机进程系统调用事件,在VMM中实时采集虚拟机系统调用数据,并根据当前进程页目录基地址索引Hash表,匹配对应的虚拟机进程,将数据保存到数据日志文件当中.在VMPBD系统的检测模型中,建模模块根据已有训练数据构建特征模式库,检测模块将采集到的待测数据样本与特征模式库进行规则匹配,并将检测结果输出到检测日志文件.
为了在VMM中重构目标虚拟机内部进程语义信息,需要获取虚拟机进程的底层语义数据.在现代操作系统中,系统内运行的进程分时复用CPU时间片,在自身被分配的CPU时间片耗尽时,进程交还CPU控制权,操作系统内核调度新进程运行.VMPBD采用在VMM中监控虚拟机内进程切换的方式重构进程语义信息.在VMM中监控虚拟机退出事件,过滤出虚拟机内由于进程切换产生的退出事件,并获取虚拟机进程底层语义数据.
本文以32 b Linux操作系统与32 b Windows 7操作系统的虚拟机为例,简要说明进程语义重构过程.Linux操作系统中,内核为每个进程分配了一块独立的8 KB大小的内存区域,用于存放进程内核栈与进程thread_info结构体.结构如图2所示,根据thread_info结构体首地址指向进程task_struct结构体指针的特性,在虚拟机进程切换事件发生退出到VMM中时,读取虚拟机栈指针esp计算得到进程thread_info结构体地址,并进一步可以获取到当前进程task_struct结构体的首地址,重构出Linux虚拟机进程语义.
Fig.4 Acquisition of virtual machine process system call图4 虚拟机进程系统调用获取
Fig.2 Schematic of semantic reconstruction of Linux process图2 Linux进程语义重构示意图
Windows 7操作系统中,当进程运行于Ring 0时,FS(flag segment)段寄存器存储的内存地址经过转换后指向处理器控制区域(kernel processor control region,KPCR),通过KPCR获取当前线程指针,进而重构出线程所属的进程语义.示意图如图3所示:
Fig.3 Schematic of semantic reconstruction of Windows 7 process图3 Windows 7进程语义重构示意图
为兼顾虚拟化平台上不同操作系统版本的需求,VMPBD采用无代理方式在VMM中动态捕获虚拟机进程运行过程中产生的系统调用,以分析进程运行过程中的行为.在Intel x86 Pentium Ⅱ及其之后更新的处理器中,Intel提供了专门针对快速系统调用功能的指令(SYSENTER/SYSEXIT).在支持快速系统调用服务的操作系统中,进程在运行过程中执行系统调用与一组特定的MSR(model specific register)寄存器相关联.其中寄存器SYSENTER_EIP_MSR指向系统调用入口函数地址,寄存器eax保存系统调用服务号.由于上述设定与硬件相关,故本文在VMM中通过无代理方式获取虚拟机进程系统调用具有通用性,不依赖特定操作系统版本,原理如图4所示:
在VMM中透明地设置虚拟机SYSENTER_EIP_MSR寄存器指向非法地址,使得虚拟机中进程在发生系统调用时由于缺页异常导致虚拟机退出,从而被VMM捕获.在VMM处理虚拟机缺页异常的流程中获取虚拟机进程系统调用数据,并将指令寄存器eip指向虚拟机正常的系统调用入口地址,重新恢复虚拟机运行.捕获模块将系统调用数据与当前虚拟机进程信息合并,将结果保存在虚拟机数据日志文件中.
虚拟机数据日志文件中保存了所有进程运行过程中产生的系统调用数据,一个进程所有系统调用的有序排列构成了该进程的系统调用序列(system call sequence).VMPBD系统的进程异常行为检测模型根据已有的训练数据构建特征模式库,检测过程读入待测的虚拟机数据日志文件,匹配特征模式库,并将结果输出到检测日志文件中.
2.3.1 构造系统调用短序列向量空间
TF-IDF[15]算法利用文档中出现频率高而在其他文档中很少出现的词语进行统计和分类.本文把虚拟机进程作为一个检测单元,正常进程与异常进程的运行行为是不相同的,可以用系统调用序列来表征这个行为,而异常进程存在着时序性或频率性与正常进程差异较大的系统调用序列,从而以此作为分类算法的特征.
给定采集到的L长度的进程系统调用序列:
SEQ=〈s1,s2,…,sL〉
(1)
定义1.系统调用权值系数.在已收集的虚拟机进程系统调用序列训练集合Q中,包含了若干进程在运行过程产生的系统调用序列.引入IDF逆向文件频率概念,系统调用si在集合Q中的权值系数:
(2)
其中,N为训练集合Q中的进程总数,Nsi是训练集合Q中出现系统调用si的进程数.对于不存在于特征库中的待测系统调用,其权值系数被赋予一个极大值,用于区分正常系统调用行为,本文中为lb 1 000.
定义2.系统调用频率向量.引入TF词频概念,对于测试集合中的任意进程P,计算系统调用频率向量:
F=(fre1,fre2,…,fren),
(3)
其中,frei是系统调用si在所属进程P的训练数据中出现的频率.
定义3.系统调用进程行为权值.根据本文检测模型定义的系统调用权值系数Weight和系统调用频率向量F,定义每个系统调用si在测试集合中的进程行为权值:
Wsi=Weighti×frei.
(4)
定义4.系统调用短序列矩阵.对每个进程的系统调用序列,采用滑动窗口技术分割为若干定长为M的系统调用短序列.对于任意系统调用短序列seq=〈s1,s2,…,sM〉,可以用矩阵表示:
(5)
其中,在Vseq中v1,s1=1,v2,s2=1,…,vj,sj=1,…,vM,sM=1,其他均为0.将矩阵Vseq转化为1维行向量,构造系统调用短序列向量空间.对于所有互异的系统调用短序列,都可由一个系统调用短序列向量组唯一表示.
定义5.系统调用短序列向量组.对虚拟机进程在运行过程中产生的系统调用序列,任意系统调用短序列seq=〈s1,s2,…,sM〉 可表示为向量组:
(6)
2.3.2 建立基于KD树和稀疏矩阵的检测模型
本文所构造的系统调用短序列向量空间维度较大,建立进程特征模式库需要占用大量的磁盘空间,且在检测过程中提取特征进行计算也增加了额外的检测时间.
为解决此问题,本文引入了CSR稀疏矩阵存储每个系统调用短序列向量组,降低了特征模式库存储的空间复杂度.为了进一步提高模型检测速率,本文采用了KD树结构建立进程特征模式库,索引待测进程在特征模式库中的KD树,并完成特征匹配,检测所需时间开销相较于逐一匹配特征库的方式有明显节省.过程如图5所示.
Fig.5 Schematic of feature matching based on KD tree图5 基于KD树的特征匹配示意图
2.3.3 检测算法
对于数据日志文件中的待测进程,定义其在特征模式库中的任意系统调用短序列NSeq=〈ns1,ns2,…,nsM〉,对应系统调用短序列向量组为N,待测的任意系统调用短序列TSeq=〈ts1,ts2,…,tsM〉,对应系统调用短序列向量组为T.
为了减小2个具有公共序列的系统调用短序列之间的相似度计算偏差,定义系统调用短序列向量空间二进制相似度:
(7)
为了表征向量组N与向量组T的时序特性和频率特性,定义系统调用短序列向量空间余弦相似度:
(8)
定义系统调用短序列向量空间相似度:
Sim(N,T)=μ(N,T)×ω(N,T),
(9)
定义系统调用短序列向量空间差异系数:
Dif(N,T)=1-Sim(N,T).
(10)
在模型检测过程中,采用多线程方式对每个待测进程产生的系统调用短序列分别计算与特征模式库中系统调用短序列相似度,并以返回的最大相似度作为待测短序列的行为权重,生成进程行为轨迹.根据多次实验测试结果,设定行为权重阈值为ε,对连续3M长度小于阈值ε的短序列进行告警.检测算法如下:
算法1.异常行为检测算法.
输入:检测模型与待测数据集;
输出:检出的异常序列.
① While (待测数据集中仍有未判断的seq)
② If (T=N)
③seq判定为正常
④ Else
⑤ 初始化maxSim
⑥ While (KDTree仍未遍历完)
⑦ 计算Sim(N,T),Dif(N,T);
⑧ 更新maxSim为值更大的Sim(N,T);
⑨ If (当前kdnode为叶节点)
⑩ 在Dif(N,T)范围内遍历KDTree;
/*遍历结束返回最邻近节点*/
本文基于KVM虚拟化平台实现并部署了VMPBD原型系统,并对系统的功能有效性和性能进行了测试.其中系统的功能测试主要是针对本文提出的虚拟机进程异常行为检测模型进行了检测率和误报率测试.测试样例分别为Linux操作系统与Windows操作系统环境下的进程系统调用数据.
为验证本文检测模型的功能有效性,并与现阶段研究现状进行对比,针对Linux环境下的测试用例,本文测试了来自于美国新墨西哥大学的数据集[16],该数据集多次被用作入侵检测领域实验测试数据集,数据量丰富,具有一定的权威性.本文将其与实时获取的Linux虚拟机进程系统调用数据结合,构建了云计算环境的测试数据集.Windows环境下的测试用例,本文利用Windows 7操作系统虚拟机实时采集得到,其中恶意攻击样本包含WannaCry蠕虫病毒、Petya勒索病毒、熊猫烧香蠕虫病毒以及模拟测试攻击.
Forrest研究结果表明[5],进程在运行过程中产生的正常系统调用序列与异常系统调用序列具有明显差异,本文提出的基于系统调用向量空间的检测方案能够有效区分正常进程行为与异常进程行为.表1中给出了定长M分别采用3,6,10时的系统调用短序列向量空间的平均相似度,相似度越接近于1越与正常训练样本相似.
Table 1 The Similarity of Process System Call表1 进程系统调用相似度
表1中xlock与lpr为Linux操作系统环境下的进程,svchost.exe与System为Windows操作系统环境下的进程.从表1可以看出,本文检测模型能够在一定程度上区分正常进程与异常进程行为.svchost.exe与System进程为Windows操作系统中提供重要系统服务,其进程行为复杂,在实时采集过程中无法囊括所有行为轨迹,故待测进程在训练集中依然存在部分相似度较低的情况,但与异常行为相比,仍能有效区分.
在不同长度的系统调用短序列情况下,向量空间相似度存在差异,主要表现为:长度越小相似度越高.原因在于,构建特征模式库时,采用越小长度的滑动窗口划分系统调用短序列,产生互异系统调用短序列的个数越少,在检测过程中进行特征匹配时匹配数越多,所以相似度越高.实验结果也满足Forrest实验的理论描述[5].
本文检测模型在将检测结果输出到虚拟机检测日志文件的同时,也将记录进程的行为轨迹并将结果可视化,以进一步分析进程行为特征并验证与检测结果的一致性.图6和图7给出了Linux系统下的xlock与lpr 2组进程行为的可视化结果.
Fig.6 The trace of xlock process behavior图6 xlock进程行为轨迹
Fig.7 The trace of lpr process behavior图7 lpr进程行为轨迹
从图6与图7的结果可以看出,正常进程所表现的系统调用向量空间相似度相较于异常进程更接近于特征库中的正常样本,系统调用向量空间的相似度接近于1.而异常进程除部分在入侵发生前产生的正常行为轨迹,大量数据均与特征模式库匹配度不高,系统调用向量空间相似度分布在0~0.5,离散性明显.
本节针对Linux与Windows环境下的测试用例进行测试,并给出详细测试结果.
1)Linux系统环境下功能测试.本文与文献[9,11-12,17-18]采用统一的评价标准,使用真正率(true positive rate,TPR)来评价模型的检测率,使用假正率(false positive rate,FPR)来评价模型的误报率.其中TPR为检出的异常进程占比,FPR为正常进程被误检为异常进程的占比.表2给出了VMPBD检测模型的测试结果以及与其他模型的对比.从表2可以看出,本文模型都略优于表2中各检测模型,原因在于VMPBD检测模型依赖于所有进程运行产生的系统调用数据,不同进程的系统调用被计算了不同的权值,这对于单个异常进程而言,具有较好的区分度.其中与主机环境下的入侵检测模型比较,在相同检测率区间内,VMPBD检测模型的误报率都略优于文献[16-17],而文献[18]检测率存在优于VMPBD检测模型的情况,但在相同检测率时误报率仍逊于本文方法.与云计算环境下的入侵检测模型比较,文献[12]尽管没有产生误报,但其检测率区间较大,VMPBD检测模型在误报率增大的同时,检测率未出现陡增的现象,检测性能优于该方法.
2)Windows系统环境下功能测试.根据实时采集得到的Windows 7操作系统下的虚拟机进程产生的系统调用序列,建立特征模式库.触发部署在虚拟机中的恶意样本,采集数据并完成检测.表3为实验测试结果.
Table 2 The Detection of Linux Process and Result Comparing表2 Linux系统进程检测与结果比较
Table 3 The Detecting Result of Windows 7 Processes表3 Windows 7系统进程检测结果
Notes:mesecsvc is the propagation process of WannaCry,taskche is the file encryption process of WannaCry,Petyavirus is the virus of Petya and the PandaSetup is the virus of Panda Burning Incense.
Fig.8 The result of performance from UnixBench图8 UnixBench性能测试结果
实验结果表明:对于Windows 7环境下的虚拟机进程异常行为,VMPBD检测模型能进行有效检测.
在部署与未部署VMPBD原型系统的环境下,本文采用UnixBench微基准测试工具与鲁大师分别针对Linux虚拟机与Windows虚拟机运行引入的额外性能损耗进行测试.测试结果如图8、图9所示.
Fig.9 The result of performance from Ludashi图9 鲁大师性能测试结果
测试结果看出,Linux系统下性能影响主要在文件传输(file copy)、进程创建与切换(pipe-based context switching,process creation)、Shell脚本测试(shell scripts)以及系统调用测试(system call overhead)方面,与Windows系统测试结果类似,多为CPU处理进程调度与运行带来的开销.VMPBD原型系统的引入会给虚拟机进程上下文切换造成一定的性能开销,其主要原因在于VMPBD系统采用无代理监控方式,需要实时获取虚拟机进程与系统调用信息,但考虑无代理监控方式并未给虚拟机引入额外的安全风险,保证了虚拟机操作系统的透明性,系统所带来的性能损耗可以接受.
对测试1(VMPBD原型系统)与测试2(不采用稀疏矩阵与KD树方式)建模方式的检测时间与存储空间进行比对,可以看出VMPBD系统在检测性能上有明显提高,结果如表4所示:
Table 4 The Comparing Result of Storage Space and Detection Time表4 存储空间与检测时间对比结果
本文提出了一种基于进程系统调用向量空间的异常检测方法,并针对传统主机环境下的检测方法难以适用于云计算环境的问题,引入了TF-IDF统计方法思想,构建了云计算环境下的进程异常行为检测模型.采用了无代理方式,针对Linux与Windows操作系统重构进程语义信息,并利用已有数据集与实时采集数据对检测模型的有效性进行了测试.最后在KVM虚拟化平台上设计并实现了VMPBD原型系统,评测了原型系统的有效性与性能.测试结果表明,VMPBD具有良好的检测性能.后续工作将考虑针对原型系统性能进行改进,并用于云计算环境下的虚拟机逃逸攻击检测中.