日期:2023-01-24 阅读量:0次 所属栏目:计算机应用
1 前 言
互联网的发展使得我们越来越依赖于网络,但是,我们在享受互联网带来便利的同时,必须面对越来越严重的网络安全问题。在政治利益或经济利益的驱动下,网络安全事件每年都呈上升趋势。第26次中国互联网络安全状况统计报告显示[1],2010年上半年,有30.9%的网民账号或密码被盗过,59.2%的网民在使用互联网过程中遇到过病毒或木马攻击,网络安全的问题仍然制约着中国网民深层次的网络应用发展。
恶意代码行为分析是检测恶意代码的前提,能够为行为特征码的提取提供直接的参考依据。当前恶意代码行为的自动化捕获方法存在着若干缺点[2]:首先,分析环境容易被恶意代码检测出来,这是因为恶意代码通常会检查自身的运行环境,如是否存在hook、是否处于调试状态等;其次,恶意代码行为信息不全面,分析环境限制了恶意代码与操作系统的交互,因而无法获取到全面的信息;最后,难以分析内核模块,Windows是共享的内核空间,无法区分哪些行为是恶意代码的行为。
随着安全技术的发展和计算机用户安全意识的提高,完全用户层的恶意代码越来越难生存,于是一部分有能力的黑客把眼光投向了系统底层——ring 0层。位于ring 0层的是系统核心模块和各种驱动程序模块,由于该类型恶意代码运行在ring 0级别,拥有与系统核心同等级的权限,因此它的威胁更加严重,而且可以更轻易的把自己隐藏起来。所以,恶意代码行为分析系统不仅需要分析用户态的行为而且需要分析其内核态的行为,针对大多数恶意代码行为分析系统无法获取完整内核行为的缺陷,本文拟研究基于虚拟机的内核恶意代码行为分析系统。
虚拟机能够有效实现操作系统的隔离,进而抵御客户操作系统中特权恶意代码的攻击,因此,近年来虚拟机在计算机安全领域受到广泛关注和应用,如入侵检测、攻击行为分析、恶意代码检测、蜜罐和可信计算等[3]。本文研究基于虚拟机的恶意代码行为分析技术,针对现有技术无法分析恶意代码内核模块的缺陷,提出了一种基于“In-VM”思想的内核模块恶意行为分析方法,该方法在系统内核中构建两个内核空间,把恶意内核模块置于一个隔离的内核空间中,恶意模块调用系统函数或改写系统变量都会触发中断,并被底层的VMM(Virtual Machine Monitor)捕获,从而使得VMM可以记录恶意模块的行为。
本文第二节介绍虚拟机及恶意代码行为分析的相关研究;第三节详细讨论基于“In-VM”的内核模块分析模型;第四节是功能测试;最后一节是本文总结。
2 相关研究
2.1 虚拟机
虚拟机在计算机安全领域受到广泛关注和应用,在基于虚拟机的安全应用中,一个典型的模型如图1所示,安全工具位于Host Virtual Machine(Host OS)中,而用户应用程序运行在Guest Virtual Machine(Guest OS)中,利用VMM和Host OS监视Guest OS的行为。虚拟机监视器(Virtual Machine Monitor,VMM)之所以被广泛应用于计算机安全领域研究,是因为VMM提供的三种特性:Isolation,Inspection,Interposition[4]。
“Isolation”即隔离特性。运行在一个虚拟机中的软件无法访问或修改VMM和其他虚拟机中的软件。隔离特性保证:即便恶意攻击者完全控制了Guest OS,也无法攻击VMM、Host OS以及Host OS中的安全工具;
“Inspection”特性。VMM能够访问虚拟机的所有状态:CPU状态(包括寄存器),内存,I/O设备(存储的内容和状态控制寄存器),所以该特性可以确保VMM和Host OS中的安全工具能够监视Guest OS的运行,记录系统的运行信息;
“Interposition”特性。VMM能够截获虚拟机的特定操作(比如:执行特权指令)。Host OS中的安全工具可以利用该特性执行特殊功能,比如仅仅对VMM做细微修改,VMM就可以截获虚拟机试图修改特定寄存器的操作。该特性使得VMM可以截获Guest OS的行为,在特定的条件下阻止或允许某个系统行为。
2.2 基于虚拟机的恶意代码行为分析
目前,恶意代码行为分析有两类方法,即静态方法和动态方法。静态方法采用代码规范化及语义重构来分析恶意代码的行为,侧重于获取恶意代码的功能;动态方法则通过研究恶意代码执行时的系统调用序列来分析恶意代码行为,侧重于获取恶意代码实现恶意目的的过程。
静态分析的方法获取的信息不够全面,而且恶意代码会使用加密、混淆等方法来阻碍静态分析,动态分析的方法能够获取更加完善的信息,是恶意代码行为分析的主要方法。越来越多的学者研究基于虚拟机的恶意代码行为分析方法,这些研究主要是针对用户空间的恶意代码行为:
1)Norman Sandbox[5]通过实现Windows系统核心来实现进程虚拟机,这使得Norman Sandbox系统上只能运行一个进程,即目标进程。尽管Norman Sandbox还对网络连接环境进行了模拟,但是这样的虚拟运行环境与真实环境仍然存在着较大的差异,该虚拟运行环境中的恶意代码进程无法干预、感染或修改其他进程,导致Norman Sandbox对恶意代码的分析结果可能与恶意代码实际执行的结果不一致。
2)CWSandbox[6]采用inline hook和DLL注入技术实现了对目标进程的API拦截与分析,最终实现对该进程行为的获取。CWSandbox的这种捕获方式存在一个问题:API hook技术由于修改了目标进程的代码,因此很容易被检测出来。因此,CWSandbox 的分析是很容易被恶意代码绕过的。
3)Joebox[7]将目标代码运行在hypervisor上,并采用了SSDT hook的方式截获目标进程的系统调用的。尽管Joebox在分析用户态代码时相对不容易被检测,但是SSDT hook对系统的关键结构进行了修改,依然存在着被检测到的可能。而且SSDT是系统服务描述符表,是一个把ring3的Win32 API和ring0的内核API联系起来的桥梁,所以仅仅监视SSDT调用实际上也是监视用户态函数调用情况。
4)TTAnalyze[8]利用了VMM在VM外部捕获恶意代码行为的方式。TTAnalyze通过在QEMU的虚拟机上安装Windows XP构建虚拟运行环境,这样的虚拟运行环境与真实系统较为接近。目标进程运行在这个虚拟运行环境内,TTAnalyze通过监视其系统调用实现对目标进程的分析。TTAnalyze虽然能够实现较为隐蔽的分析,但是无法实时分析新进程,并且不具备对服务和远程线程的分析能力,这使得
TTAnalyze的分析结果不能够全面地反映恶意代码的行为。
5)ExecRecorder[9]基于Bochs实现了对整个客户操作系统行为的记录与回放,从而实现对攻击行为的分析进并进行相应的系统恢复。
6)Andreas Moser[10]等基于QEMU实现了对客户操作系统内进程的多路径监视,从而能够更加精确地分析恶意代码的的行为。
7)Jedidiah R. Crandall[11]等通过监视虚拟机的计时器实现了基于时序搜索的恶意代码检测技术,使得自动化的恶意代码分析更加精确。
上面介绍的各种方法主要是分析恶意代码在用户态的行为,Joebox能够监视内核SSDT的调用,但是它通过监视SSDT来获取用户态系统函数的调用情况,并不能监视内核模块的行为。
3 基于“In-VM”的内核模块分析模型
恶意内核模块的行为主要包括调用内核函数,修改内核代码或变量。为了捕获这些行为,常用的HOOK方法是不适用的,需要把待分析内核模块隔离。“In-VM”的思想被用于检测恶意代码,本来借鉴该思想来分析恶意代码行为。
3.1 “In-VM”思想
在基于虚拟机的恶意代码检测应用中,为了解决VMM和Guest VM之间频繁切换带来的性能损耗问题,Monirul Sharif[12]等人提出的一种“In-VM”的检测思想,基于“In-VM”思想的检测过程在客户系统之内完成,并且同时能够保证检测过程不受恶意代码攻击。
“In-VM”检测思想的基础是针对内核构造了两种地址空间:Process Virtual Address Space和SIM Virtual Address Space。正常情况下,内核工作在Process Virtual Address Space,当HOOK系统函数成功后,内核地址空间转换到SIM Virtual Address Space。在SIM地址空间中客户系统内核数据、代码是不可执行的,这就保证了内核中的恶意代码无法攻击到HOOK处理模块。
在基于虚拟机的恶意代码检测中,“In-vm”思想在内核中构建两个隔离的空间,这种思想可以被用于分析内核恶意模块行为,我们把恶意内核模块置于一个隔离的内核空间中,则我们可以记录该模块调用内核函数、读写内核数据等操作。
3.2 内核模块分析模型
Windows的内核空间是共享的[13],对每个内核模块来说,其地址空间都是相同的,而且内核函数和系统全局变量广泛分散在整个内核空间中,所以常用的HOOK方法是不适用的。“In-VM”的思想通过构建两个内核空间来达到隔离效果,本文利用该思想来隔离恶意内核模块,从而分析其行为。
本文在内核空间中构建了两个地址空间:Process Kernel space和In-VM Kernel space。正常情况下,内核工作在Process Kernel space,当系统准备执行待分析的恶意模块In-VM module,因为In-VM module在Process Kernel space是不可执行的,所以会触发不可执行中断,VMM捕获到该中断,并把内核切换到In-VM Kernel space。在In-VM Kernel space中,任何调用系统函数、改写系统变量的操作都能被捕获,因为在该隔离的内核空间中,系统内核代码不可执行,系统数据不可写。
如图2所示,左边是Process Kernel space,Kernel Code和Kernel Data是未加载恶意模块之前的系统内核代码和内核数据,In-VM Code和In-VM Data是恶意模块代码及其数据,R、W和X分别代表该项是否可读、可写和可执行
在Process Kernel space中,当需要调用In-VM模块代码时,会触发不可执行中断,VMM捕获该中断,判断中断类型,并把内核切换到In-VM Kernel space(通过改变CR3的值来实现)。在In-VM Kernel space中,当需要调用内核函数或改写内核变量时,也会触发不可执行或不可写中断,VMM捕获到该中断,并根据中断类型分别处理。图3是在In-VM Kernel space中调用内核函数或改写内核变量的处理过程,对于不可写中断,VMM直接改写内核数据并返回In-VM Kernel space,对于不可执行中断,VMM需要切换CR3的值,转入Process Kernel space中。
4 实 验
本文的实验环境为:Thinkpad T400,测试使用的客户操作系统为Windows SP2,开源虚拟机
KVM(Kernel Virtual Machine)[14],处理器为Intel Core 2 P8600,物理内存为2GB。在此基础之上,本文实现了上述模型的原型系统,能够分析恶意模块调用内核函数及改写内核全局变量的行为。
内核恶意代码的主要功能有三个方面[15]:①修改内核数据,以达到隐藏自身活动的目的;②修改内核数据或代码,以达到HOOK内核系统函数的目的;③直接调用内核函数,以达到获取系统信息的目的。表1是针对多款rootkit的实验结果,本文选取了多款常用的rootkit来检验上述原型系统,实验结果表明本文提出的原型系统能够成功分析恶意模块调用内核函数及改写内核全局变量的行为。
5 结束语
随着安全技术的发展和计算机用户安全意识的提高,完全用户层的恶意代码越来越难生存,于是一部分有能力的黑客把眼光投向了系统底层——ring 0层,该类型恶意代码运行在ring 0级别,拥有与系统核心同等级的权限。但是当前自动化的恶意行为捕获方法存在难以分析内核模块的缺陷,本文针对该缺陷,利用虚拟机的隔离特点,提出了一种基于“In-VM”思想的内核模块恶意行为分析方法,并实现了该模型的原型系统,实验表明该方法能够分析内核模块的系统函数调用和内核数据操作行为。
参考文献
[1] 第26次中国互联网络发展状况统计报告[R].2010,中国互联网络信息中心。
[2] 林清阳,基于虚拟化的恶意代码行为捕获技术研究[D]. 郑州:解放军信息工程大学,2010.
[3] 温研. 隔离运行环境关键技术研究[D]. 长沙: 国防科学技术大学, 2008.
[4] JIANG X,XU D,WANG hy malware detection through vmm-based “out-of-the-box” semantic view reconstruction. In Proceedings of the ACM Conference on Computer and Communications Security, 2007.
[5] Norman Sandbox. Norman SandBox Technology[EB/OL]. 2010. http://technology/norman_sandbox/the_technology/en
. IEEE Security and Privacy.2007, 5(2): 32-39
. 2010. http://