专利名称:基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法
技术领域:
本发明涉及信息安全中的恶意软件检测方法,它能够在经过有限训练集训练以 后,检测已知的和未知的恶意软件。
背景技术:
金山毒霸全球反病毒监测中心监测数据显示,截止到2008年6月30日,2008年上 半年,金山毒霸共截获新增病毒、木马1,242, 244个,较2007年全年病毒、木马总数增长了 338%。计算机恶意软件的数量急剧增加,其传播途径多样化,且抗反病毒软件能力强,计算 机恶意软件已经成为互联网以及广大计算机用户的最大安全威胁。
传统的恶意软件检测主要是基于特征码扫描的检测技术。它使用从特定恶意代码 中提取出的特征字节序列(如字符串)进行检测,这些特征字节序列不大可能出现在无毒 的程序中。这种方法的特点在于,反病毒软件只处理程序的字节码,而不关心它的行为。但 是随着恶意代码种类和数量的迅速增长,提取恶意代码的特征所消耗的人力、物力也急剧 增长。更重要的是该技术的本质决定,其只能检测已知恶意软件,对未知恶意软件的检测能 力极弱。为了解决这个问题,提出了启发式分析检测方法,启发式是指任何利用规则和模式 来检测未知恶意代码的方法。启发式检测方法主要有静态启发式检测方法、基于代码仿真 的启发式检测方法。静态启发式检测方法通过分析恶意软件的静态文件结构、二进制代码、 反汇编后的代码、反汇编后的静态调用等获取恶意软件的特征,利用分类算法在正常软件 与恶意代码之间建立较好的分割线,实验结果表明其检测未知恶意软件的能力较强。基于 代码仿真的启发式检测方法的主要原理是将目标程序放置在一个沙盒模型中,通过监控目 标程序运行过程的行为来判断是否为恶意软件。基于代码仿真的启发式检测方法主要使用 黑盒测试法,黑盒技术对迅速理解恶意软件的一些行为和工作原理可能非常有用。
上述方法主要面临三方面的问题
第一、静态检测方法检测速度快,误报率和虚警率低,但很容易受到多态、变形、混 淆、加壳等规避技术的影响。经过加壳处理后的恶意软件的二进制代码和反汇编后的代码 发生了很大的改变,原来用来检测的特征也发生了改变,使得检测的准确率下降,如果在脱 壳后再进行检测,每个文件的检测时间就会加长,且通用的脱壳软件在反脱壳技术的影响 下并不能自动的脱去所有恶意软件的壳。使用多态和变形技术的恶意软件每次传播后都动 态随机的改变着二进制代码,没有固定不变的特征,静态检测方法很难检测这种恶意软件。
第二、基于代码仿真的启发式检测方法不受多态、变形、混淆、加壳等规避技术的 影响,在早期是一种比较有效的恶意软件检测方法,但随着恶意软件技术的演化发展,很多 恶意软件已具备了反虚拟、反调试、反跟踪能力,如果恶意软件检测到在仿真环境下运行, 就会隐藏其恶意行为,这些都使得基于代码仿真的启发式检测的准确率不高和花费时间比 较长。
第三、基于启发式的方法利用了一些规则和模式,随着恶意软件开发人员对这些规则和模式逐渐熟悉,新出现的恶意软件就会有一些反制措施,使得启发式的方法不能检 测出这些恶意软件。发明内容
本发明的目的在于提出并设计一种基于虚拟机和敏感Native API调用感知的恶 意软件动态检测方法,它能检测已知和未知恶意软件,不受加壳、混淆、多态、变形技术的影 响,且具有较高的检测准确率,具备反虚拟、反调试、反跟踪能力的恶意软件也不能发现本 发明使用的分析检测环境。
本发明的目的是这样实现的一种基于虚拟机和敏感Native API调用感知的恶 意软件动态检测方法,其特征是
检测模型分为2个阶段训练阶段和检测阶段;训练阶段用于完成分类器的构建; 而检测阶段用于完成恶意软件的检测;
在训练阶段,首先获取样本文件集的Native API系列,让样本文件在干净的分析 环境中执行定长时间,记录下它的Native API系列,统计进程行为、特权行为、内存行为、注 册表行为、文件行为和网络行为的Native API调用频率,然后使用这些数据来训练分类器, 训练好的分类器用作区分恶意软件和正常文件;
在检测阶段,把待检查文件放在干净的分析环境中执行,统计它在定长时间内的 进程行为、特权行为、内存行为、注册表行为、文件行为和网络行为的NativeAPI调用频率, 使用训练阶段训练好的分类器,对待检查文件进行分类,得到是恶意软件或是正常文件的结果。
本发明由三个部分组成基于Xen 二次开发的分析检测环境(用来运行分析样本 并监测样本的Native API调用系列),监测控制程序(用来进行批量样本的自动分析监 测),恶意软件分类器的训练学习和检测程序(用有限样本的NativeAPI调用频率数据训练 分类器,使用训练好的分类器检测未知恶意软件)。
本发明在分析检测环境中运行样本,监测其进程行为、特权行为、内存操作行为、 注册表行为、文件行为和网络行为的相关Native API相同时间内的调用频率,以此为特征 通过数据挖掘的分类方法来判别是否是恶意软件;
模型由训练阶段的获取样本集的Native API系列开始,让样本文件在干净的分析 环境中执行定长时间,记录下它的Native API系列,样本文件的NativeAPI调用都比较多, 很多Native API调用不能很好的区分恶意软件和正常文件,我们基于对恶意软件行为的深 入认识,把有可能区分的Native API调用提取出来;计算它在定长时间内的调用频率,然 后使用这些数据来训练分类器,训练好的分类器能区分恶意软件和正常文件。
在检测阶段,把待检查文件放在干净的分析环境中执行,统计它在定长时间内的 敏感Native API调用频率,使用训练阶段训练好的分类器,对待检测文件进行分类,得到是 恶意软件或是正常文件的结果。
上述文件为PE文件。
相对于传统的恶意软件方法,本发明方法主要具有如下特色
1、能检测未知的恶意软件传统的基于病毒特征的恶意软件检测方法只能检测已 经被专业人员识别出特征的恶意软件,但新出现的恶意软件已经成指数级增长,专业人员识别恶意软件特征的工作量将大幅度增加,随着病毒特征库日渐增长,反病毒软件的检测 速度将大幅度下降,对系统资源的占用将增加。本发明通过数据挖掘方法在学习已有恶意 软件敏感Native API调用频率的基础上来检测未知恶意软件,学习得到的分类器具有相对 的稳定性,同时具备较高的检测准确率;
2、能检测Oday的恶意软件传统的基于病毒特征的恶意软件检测方法存在真空 期——即从恶意软件出现到反病毒软件能查杀该恶意软件,在真空期恶意软件可能已经长 生了严重的破坏,这给计算机恶意软件的防护工作带来了严峻挑战。本发明所使用的方法 能在恶意软件出现的第一时间就能对其进行检测,能在恶意软件出现的早期就遏制住其传 播,以免在互联网传播泛滥,产生严重的破坏;
3、检测方法的稳定有效随着恶意软件技术的发展,恶意软件会采取一些针对启 发式规则和模式的反制措施,使得启发式方法不能检测出这些恶意软件。但恶意软件要实 现传播和破坏,必然要频繁的调用Native API,这就导致这个特征不可能隐藏,本发明使用 的方法是以Native API调用频率为特征,该检测方法可以保持长期稳定有效;
4、可以对抗加壳、混淆、变形、多态等技术的恶意软件恶意软件无论怎么加壳、加 密、变形,其核心功能部分是静止不变的,实现这部分功能所对应的Native API调用也是不 变的。本发明以Native API调用频率为特征,所以能检测出加壳、混淆、变形、多态后的恶 意软件;
5、使用的特征较少且相对稳定传统的动态检测方法是以API调用系列的马尔科 夫链作为特征,恶意软件的活动相当活跃,API调用频繁且密集,经过马尔科夫链滑动后产 生的特征集非常庞大,过滤后剩下的特征也相对较多,训练后的分类器比较复杂,检测速度 较慢。本发明使用的敏感Native API不足100个,特征较少且相对固定,特征提取和训练 学习的实现都相对简单;
6、透明的分析检测环境传统的动态分析监测环境特权等级分离不清晰,部分指 令的执行结果和执行时间与真实环境执行有差异,具备反虚拟、反调试、反跟踪能力的恶意 软件能检测到是在分析环境中运行,隐藏其恶意行为,使得检测失败;少部分恶意软件能穿 越虚拟分析环境,对宿主机产生破坏。本发明使用的分析检测环境基于硬件虚拟平台Xen 进行二次开发,特权等级分离清晰,指令通过硬件虚拟直接在CPU上执行指令,执行结果和 真实环境一样,速度较快,真正达到了对恶意软件的透明;
7、平台的核心都是基于开源技术,可以基于需求进行进行二次开发。
最后,由表1给出本发明方法与传统基于病毒特征方法、传统基于代码仿真的启 发式检测方法之间的简要对比与总结。
表1本发明方法与传统方法间的对比总结
权利要求
1.一种基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法,其特征是检测模型分为2个阶段训练阶段和检测阶段;训练阶段用于完成分类器的构建;而检测阶段用于完成恶意软件的检测;在训练阶段,首先获取样本文件集的Native API系列,让样本文件在干净的分析环境 中执行定长时间,记录下它的Native API系列,统计进程行为、特权行为、内存行为、注册表 行为、文件行为和网络行为的Native API调用频率,然后使用这些数据来训练分类器,训练 好的分类器用作区分恶意软件和正常文件;在检测阶段,把待检查文件放在干净的分析环境中执行,统计它在定长时间内的进程 行为、特权行为、内存行为、注册表行为、文件行为和网络行为的NativeAPI调用频率,使用 训练阶段训练好的分类器,对待检查文件进行分类,得到是恶意软件或是正常文件的结果。
2.根据权利要求1所述的基于虚拟机和敏感NativeAPI调用感知的恶意软件动态检 测方法,其特征是所述检测模型基于Xen 二次开发的分析检测环境;所述文件为Windows 平台PE文件。
3.根据权利要求1或2所述的基于虚拟机和敏感NativeAPI调用感知的恶意软件动 态检测方法,其特征是所述文件的进程行为、特权行为、内存行为、注册表行为、文件行为 和网络行为分别如下进程行为NtCreateEvent, NtQueryInformationToken, NtReleaseSemaphore, NtAdjustPrivi IegesToken,NtImpersonateAnonymousToken, NtQueryInformationJobObject, NtReleaseMutant, NtDuplicateToken, NtDelayExecution, NtFindAtom, NtQueryInformationAtom, NtWaitForSingleObject, NtYieldExecution, NtAddAtom, NtDuplicateObject, NtWaitForMultipleObjects, NtQueryObject, NtCreateMutant, NtRegiSterThreadTerminatePort,NtSetContextThread,NtGetContextThread, NtQueueApcThread, NtSetThreadExecutionState, NtTerminateProcess, NtOpenProcess, NtTerminateThread, NtQueryInformationProcess, NtSetInformationProcess, NtQueryInformationThread, NtOpenThreadTokenEx, NtOpenProcessTokenEx, NtOpenThreadToken, NtOpenProcessTokeη, NtCreateThread, NtResumeThread, NtCreateProcessEx, NtSetInformationThread, NtCreateSemaphore, NtReplyPort, NtRequestPort, NtCreatePort, NtCompIeteConnectPort, NtReadRequestData, NtReplyWaitReceivePortEx, NtSecureConnectPort, NtRequestWaitReplyPort, NtConnectPort ;特权行为NtSetEvent, NtOpenKeyedEvent, NtAlIocateUuids, NtAccessCheckByType, NtQueryTimer, NtQueryTimerResolution, NtCancelTimer, NtQueryInstalIUILanguage, NtAlIocateLocallyUniqueId, NtSetInformationObject, NtQueryDefauItUILanguage, NtTestAlert, NtFlushInstructionCache, NtQueryDefauItLocale, NtSetTimer, NtRaiseHardError, NtQuerySecurityObject, NtCreateloCompletion, NtOpenEvent, NtQuerySystemInformation, NtSetEventBoostPriority, NtQueryPerformanceCounter, NtAccessCheck, NtClearEvent, NtQuerySystemTime, NtQueryDebugFi IterState,NtOpenSymbo1icLinkObject, NtQuerySymbo1icLinkObject, NtQueryEvent, NtRaiseException, NtRemoveloCompletion ;内存行为NtQuerySection, NtOpenSection, NtMapViewOfSection, NtUnmapViewOfSection, NtCreateSection, NtReadVirtualMemory, NtPrοtectVirtua1Memory, NtQueryVirtualMemory, NtWriteVirtualMemory, NtLockVirtualMemory, NtFlushVirtualMemory, NtAl IocateVirtualMemory, NtFreeVirtualMemory ;注册表行为NtNotifyChangeMultitipleKeys, NtSetValueKey, NtDeleteKey, NtDeleteValueKey, NtCreateKey, NtQueryValueKey, NtOpenKey, NtQueryKey, NtEnumerateValueKey, NtNotifyChangeKey, NtEnumerateKey ;文件行为NtQueryFullAttributesFile, NtReadFile, NtFlushBuffersFile, NtAreMappedFiIesTheSame, NtOpenDirectoryObject, NtUnlockFile, NtLockFile, NtQueryInformationFiIe, NtOpenFile, NtCreateFile, NtDeviceIoControlFile, NtQueryAttributesFiIe,NtQueryDirectoryFi Ie,NtSetInformationFi1e, NtQueryVolumelnformationFile, NtWriteFile, NtFsControlFile ;网络行为LISTEN, RECV, SEND, DNS_LOOKUP,CONNECT ;在训练阶段获取训练样本应获取足够多的训练样本,训练样本分为恶意软件样本和正常文件样本;所述训练分类器时使用WEAK数据挖掘软件的四种分类算法J48来训练四种分类器;在检测阶段获取待检查文件定长时间内的进程行为、特权行为、内存行为、注册表行为、文件行为 和网络行为的NativeAPI的调用频率,使用训练好的任一分类器,对待检查文件进行分类, 分类结果即为恶意软件或正常文件。
全文摘要
一种基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法,由三部分组成基于Xen二次开发的分析检测环境、监测控制程序、恶意软件分类器的训练学习和检测程序。检测模型分为训练阶段和检测阶段训练阶段让样本集文件在干净的分析环境中执行定长时间,获取其进程行为、特权行为、内存行为、注册表行为、文件行为和网络行为的Native API调用频率,使用这些数据来训练分类器;检测阶段把待检查文件执行,统计定长时间内的六种敏感行为Native API调用频率,使用训练好的分类器,对检测文件进行分类,分类结果即是恶意软件或正常文件。本发明对具备反虚拟、反调试、反跟踪能力的恶意软件仍然有效。
文档编号G06F21/00GK102034050SQ201110026369
公开日2011年4月27日 申请日期2011年1月25日 优先权日2011年1月25日
发明者佘春东, 唐剑, 王俊峰, 白金荣, 黄敏桓 申请人:四川大学