CN101373501B - 针对计算机病毒的动态行为捕获方法 - Google Patents
针对计算机病毒的动态行为捕获方法 Download PDFInfo
- Publication number
- CN101373501B CN101373501B CN2008100372761A CN200810037276A CN101373501B CN 101373501 B CN101373501 B CN 101373501B CN 2008100372761 A CN2008100372761 A CN 2008100372761A CN 200810037276 A CN200810037276 A CN 200810037276A CN 101373501 B CN101373501 B CN 101373501B
- Authority
- CN
- China
- Prior art keywords
- function
- api
- virus
- debugging
- capture engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
本发明公开了一种应用于用来防治计算机病毒的自动化分析系统中的计算机病毒的动态行为捕获方法。该方法通过将API的调用设置为调试事件,由系统内核捕获这个事件后通知调试器;并且通过在指定API调用入口处设置调试断点,捕获程序执行到调试断点便会发生中断事件;然后系统内核通过捕获工具注射一个动态链接库至恶意代码进程空间,用这个动态链接库来分析API的堆栈内容。
Description
技术领域:
本发明涉及计算机病毒防治和数据分析与处理领域,特别涉及一种应用于用来防治计算机病毒的自动化分析系统中的计算机病毒的动态行为捕获方法。
背景技术:
所谓计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码;计算机病毒具有以下几个基本特征:(1)潜伏在计算机存储介质及程序中;(2)当达到一定条件时被激活;(3)对计算机资源具有破坏作用的程序或者指令集合;就像生物病毒一样,计算机病毒有独特的自我复制能力,它们能把自身附着在各种类型的文件上,当文件被复制或从一个用户传送到另一个用户时,它们就随同文件一起蔓延开来。
随着计算机软硬件水平的不断发展,近年来,计算机病毒技术也是突飞猛进,黑客和间谍技术也在不断更新改进,计算机病毒对人类造成的影响也越来越大;当前,计算机病毒正呈现出传播方式、传播途径以及破坏方式更加多样化的趋势。
据国家计算机病毒应急处理中心综合观察分析认为:“目前计算机病毒的网络化趋势更加明显,病毒的入侵主要来自蠕虫病毒,同时集病毒、黑客、木马等功能于一身综合型病毒不断涌现”,计算机病毒表现出以下特点:传播方式和途径多样化;病毒的欺骗性日益增强;病毒的传播速度极快;病毒的制作成本降低;病毒变种增多;病毒难以控制和根治;病毒传播更具有不确定性和跳跃性;病毒版本自动在线升级和自我保护能力;病毒编制采用了集成方式等。
综合上述分析,今后计算机病毒的发展趋势是:群发邮件病毒将大量出现;针对系统漏洞的具有远程控制功能的病毒将越发突出;病毒和垃圾邮件编写者将不断加强合作;病毒编写者更加年轻化、更有组织性。计算机病毒具有极强的繁殖感染能力,而因计算机病毒所造成的危害正在加剧,病毒危害主要包括系统崩溃、网络瘫疾、系统设置被修改、电脑使用受限、数据丢失等。
常见的病毒检测方法有以下几种:
(1)特征码技术
特征码技术是一种基于对已知病毒分析、查解的反病毒技术。它作为反病毒技术中最基本的技术被沿用至今,也是到目前为止各类反病毒软件仍普遍采用的技术。特征码是一串二进制位信息,它能唯一标识某一非法程序,研究人员通过对非法程序样本的分析,提取出“特征码”写入反病毒软件的特征码库,通过对用户指定的某个或某几个文件进行扫描,以确定是否包含非法程序的特征码。
特征码技术的优点是检测准确快速、可识别病毒的名称、误报警率低,被公认为检测已知病毒的最简单、开销较小的方法;其缺点是不能检测新病毒、捕获已知病毒的特征代码,费用开销大、在网络上效率低,因长时间检索会使整个网络性能降低。
(2)虚拟机技术
虚拟机技术是一种启发式探测未知病毒的反病毒技术。虚拟机技术的主要作用是能够运行一定规则的描述语言;由于病毒的最终判定准则是其复制传染性,而这个标准是不易被使用和实现的,如果病毒已经传染了才判定它是病毒,定会给病毒的清除带来麻烦。
虚拟机实质是在反病毒系统中设置的一种程序机制,它能在内存中模拟一个操作系统环境,待查文件在虚拟机上执行,其效果如同物理机。虚拟机实际是用软件的方法模拟地执行所有的或者设计者关心的CPU指令,营造一个虚拟的、可观察的、可控制的目标程序运行环境。
在处理加壳或变形的木马和蠕虫方面,虚拟机被作为一个比较理想的选择。虚拟机技术仍需要与传统技术相结合,其本质上的检测判断方法依然是特征码检查,对于那些经过修改而不是简单的加壳后的恶意软件效果比较有限。
(3)启发式扫描技术
启发式扫描技术是一种基于人工智能领域启发式分析手段的检测技术,启发式扫描能够发现一些应用了已有机制或行为方式的未知病毒。启发式扫描一般包括静态扫描方式和动态扫描方式两种。启发式扫描是通过分析指令出现的顺序,或特定组合情况等常见病毒的标准特征来决定是否为病毒。
静态启发式扫描技术和基于特征码的静态扫描类似,也是静态扫描待测程序的代码,但不同的是前者查找非法程序的特征码,而后者则查找非法程序的行为,而这些行为是通过某些相应的代码序列来确定的;通过扫描某个待测文件当中的可执行代码,查找与非法程序行为相对应的代码序列,扫描结束后,关联所有查找到的序列,并与非法程序的典型行为模式相对照,最终做出判断。
静态扫描的优点是:这种技术在扫描代码时通过查找某些代码序列,确定程序是否具有某种类别的病毒的行为,因此,它也具有了检测未知病毒的能力。它的扫描速度比较快,未知病毒的检出率也比较高。另外,和行为分析技术不同,它能在代码未运行的情况下,就确定代码的行为并检测非法程序。缺点是:目前病毒、木马等非法程序的编写者为了让这些程序尽可能地传播和运行,大都对其作了加密、变形、加壳等处理,那么至少在其未运行的情况下,通常很难在它的代码当中找到对应于非法程序行为的代码序列。
所谓行为分析就是采用一系列的规则定义非法程序,相应地采用另一套规则定义合法程序,如果某个程序违背了合法程序的某项规则或者符合非法程序的某项规则,便可判定其非法。
与传统的基于特征码的静态扫描技术不同的是,行为分析技术监控并限制应用程序运行过程中的动态行为,和静态启发式扫描技术相对,它也被称为动态启发式扫描。某些行为是木马、后门和蠕虫等非法程序的共同行为,但在合法程序中却比较罕见,也就是说,它们成了非法程序的行为特征,可作为判别应用程序是否非法的依据或者规则。
但是,行为分析技术同样存在以下的不足:
1、需要尽可能全面的监控。
2、考虑到软件的实用性,行为分析软件一般不会采用过于复杂的分析算法,一般多采用简单加权算法来进行分析。
3、无法应对那些能造成直接破坏的恶意代码。
由于行为分析技术具有可检测未知非法程序的特点,所以成为目前反病毒领域研究的热点。然而,现有的添加了行为分析这一功能模块的软件一般只检测某些单独的行为项(如修改注册表自启动项、文件关联、IE浏览器的起始页等)。它们所表现出来的工作流程也较为相似,都是通过用户判断来学习对某一软件的识别。
(4)主动防御
主动防御技术已被杀毒软件、软件防火墙、HIPS等安全软件广泛采用,现有的后门木马、Rootkit等恶意软件面临严峻考验。无论传统的恶意软件功能有多强大隐蔽性有多高,初次安装以及工作时都会被主动防御功能拦截并提示用户,使其无法正常安装和工作。
主动防御的原理主要采用了hook思想,截获系统相关API调用,对相应的可疑行为进行报警,提示用户做出选择。具体来说,主动防御常用SSDTHook、Inline Hook、Hook Driver Dispatch、Filter Driver等内核技术,对恶意程序所需要的各类函数进行挂接,实行函数行为挂接,监控其行为。
除了上述几种病毒检测方法和原理,我们通过对大量现有常见病毒的研究和分析,归纳出常见病毒在安装阶段的两个步骤:
第一步:隐藏程序。通常,病毒程序会被拷贝或者安装到系统目录下,由于该目录下存在着大量重要的系统文件,病毒程序很难被发现,加之这些文件的命名往往和系统文件非常相似,更增加了定位这些文件的难度。另外,即使用户对这些文件产生怀疑,也可能因为担心破坏系统文件而不会轻易修改或者删除它们。
第二步:自启动设置,使病毒在一定条件下自动启动运行。这个步骤的实现途径较多,常用的有:在注册表设置自启动项、修改文件关联、修改系统配置文件。
第三步:感染文件。可执行文件.COM或.EXE感染上了病毒,例如黑色星期五病毒,它驻入内存的条件是在执行被传染的文件时进入内存的。一旦进入内存,便开始监视系统的运行。当它发现被传染的目标时,进行如下操作:
(1)首先对运行的可执行文件特定地址的标识位信息进行判断是否已感染了病毒;
(2)当条件满足,利用INT 13H将病毒链接到可执行文件的首部或尾部或中间,并存大磁盘中;
(3)完成传染后,继续监视系统的运行,试图寻找新的攻击目标;
通过从行为特征的角度来观察,我们归纳出上述三个步骤的各种实现途径对应的病毒行为及行为作用的对象。
病毒被成功安装到目标机器以后,通常就会开始运行并进行“进程隐藏”,即让病毒进程在各种查看进程的工具软件或程序中不可见,如Windows任务管理器。我们认为这是各类病毒在该阶段的最显著的特征。
“进程隐藏”又分为“伪隐藏”和“真隐藏”两类。进程的“伪隐藏”是指进程虽然在查看工具中不可见,但仍实际存在;进程的“真隐藏”则指病毒程序不以一个进程的方式运行。
进程的“伪隐藏”一般有两种实现途径:
(1)将病毒程序注册为系统服务。
在Win9X系统下,病毒程序被注册为服务模式进程后,病毒进程就不会出现在“Windows任务管理器”中。著名的BO2K木马针对Win9X系统采用的就是这种方法。但这在WinNT系统下是无效的——即使是系统服务进程,也会出现在WinNT系统的“任务管理器”当中。随着WinNT系统的普及,“注册系统服务”已基本不再被各类病毒作为进程隐藏的途径。
(2)采用API拦截技术。
这种技术能够截获指定的API调用,进而获取或修改API输入参数、改变API内部的执行流程以及修改API的返回值。由于进程查看工具一般使用Windows SDK提供的process status API(进程状态API,简称PSAPI)、Performance Data Helper(简称PDH)或者ToolHelp API查看系统当前的进程信息,某些病毒就拦截这类API,执行与原API类似的进程信息获取工作,但在这个过程中,如果取到的进程ID为病毒进程ID,就直接跳过,使返回给进程查看工具的信息中不包含病毒进程。这种方法在目前流行的Windows 2000和Windows XP操作系统中均可行。
进程“真隐藏”一般通过以下方式实现:进程“真隐藏”的病毒一般都是动态链接库(Dynamic Link Library,简称DLL),并且依靠系统中的正常进程加载和运行它。由于病毒本身不以进程的方式运行,所以不会出现在进程查看工具的进程列表中。DLL形式的病毒要依靠其它进程运行,有以下几种常用的方法:
(a)远程线程注射
远程线程注射是指某个进程创建一个运行于其它进程虚拟地址空间的新线程,或者说把一个新线程“注射”到其它进程中。这个新线程拥有访问被注射进程所有对象的权限。
(b)特洛伊DLL
特洛伊DLL替换操作系统的某个或某几个正常的DLL文件,截获并处理某些函数调用,而将其它调用转发给原DLL。但是从Windows2000开始,Windows操作系统就引入一种文件保护机制(Windows File Protection),它可以有效地保护某些重要的系统文件(如DLL、OCX、SYS、CPL等类型的文件)。同时,由于特洛伊DLL本身有一定的缺陷,如安装补丁、系统升级、数字签名等方法都可能导致其失效,所以它并不是实现进程真隐藏的最优选择。
(c)基于SPI的DLL技术
SPI是Service Provider Interface的缩写,即服务提供者接口,它是WindowsSocket 2的新特性。Winsock 2不仅提供了供应用程序访问网络服务的WindowsSocket应用程序编程接口(API),还包含了Winsock服务提供者接口(SPI)和ws2_32.dll,其中SPI由传输服务提供者和名字解析服务提供者实现。应用程序、ws2_32.dll和传输服务提供者(Transport Service Provider)之间的层次关系如图1所示。
服务提供者通常不只一个,它们按一定的顺序安装在系统中,构成一个服务提供者数据库。系统会按照应用程序的输入参数搜索匹配的服务提供者。
有些木马服务器的DLL文件被作为一个传输服务提供者安装到服务提供者数据库的最前端,这样木马DLL就会被系统网络服务加载,它通常在入口函数DllMain中创建木马线程。这种形式的DLL木马只需安装一次,以后每次系统启动都会被自动加载到使用网络服务的进程中。这类木马也被称为SPI木马。其工作原理如图2所示。
例如,IE浏览器进程iexplorer.exe需要使用网络服务,它启动后,就会加载木马DLL并启动木马线程。这样即使木马通过某个端口对外通信,该端口关联到的进程也只是合法进程iexplorer.exe。可见,基于SPI的DLL木马技术能达到木马服务器自启动和进程隐藏和的双重目的。另外,木马会被多个网络服务加载,而且,由于在系统关闭时网络服务才会关闭,木马可以在系统运行期间一直保持激活状态。
在Win32环境下运行的任何程序,包括木马等常见病毒,都必须通过Win32API来实现,即Windows操作系统的应用程序接口。为了实现对病毒动态行为的捕获和分析,就需要尽可能地截获这些对这些Win32API函数的调用。实现这一目的的关键是自定义相应的钩子函数,并在系统内安装针对某些API调用的钩子,便可在真正API调用发生前,先调用钩子函数。而在钩子函数内部可以预先自定义逻辑流程,触发反病毒引擎,使其结合截获的函数参数做出判断,结果可能是调用真正的API、退出程序或执行其它代码。
我们通过对Windows公开的几百个API函数进行分析和比较,并结合木马等常见病毒的行为,我们归纳总结出表1(病毒行为调用的API函数)中所列举的API函数,这么函数在对计算机系统可能造成危害的API中占了很高的比例,因此,我们将此表中列举的API视为疑似API。
表1
发明内容:
根据上述技术分析,本发明的目的是提供一种应用于用来防治计算机病毒的自动化分析系统中的计算机病毒的动态行为捕获方法。该方法能够在Win32环境下自动化捕获大量病毒样本的动态行为,应用这种技术所制备的病毒动态行为自动化分析系统能够实现自动获取并分析病毒样本的动态行为。从而更加有效地提升计算机在网络环境下对病毒的防御能力,提高网络的安全性。
在描述本发明方法之前,先介绍一下本什么是病毒行为。对于病毒行为的定义,可以认为是API与其调用参数的结合。API是应用程序接口,由于Microsoft操作系统对内核的保护,目前大部分恶意代码包括计算机病毒对计算机系统的侵入和破坏是通过调用API来实现的。例如,对于改写一个系统文件,病毒制造者会使用writefileex这个API,同时在使用这个API还必须指明这个系统文件的绝对路径。所以,writefileex结合系统文件路径就是一个恶意改写系统文件的行为。
本发明方法就是用来实现对于这个行为的捕获过程,具体步骤如下:
1)将API的调用设置为调试事件,由系统内核捕获这个事件后通知调试器;
2)通过在指定API调用入口处设置调试断点,捕获程序执行到调试断点便会发生中断事件;
3)系统内核通过捕获工具注射一个动态链接库至恶意代码进程空间,用这个动态链接库来分析API的堆栈内容。
上述第二步骤,具体需要在表1中提到的API函数的入口处设置断点中断。中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作,而程序中安排的中断指令INT产生的中断被称为软件中断,在Intel体系上用于中断调试的指令有二:
(1)INT1:单步中断
使用单步中断可以一条一条指令地跟踪程序的流程,观察CPU每执行一条指令后,各个寄存器及有关存储单元的变化,从而指出和确定产生错误的原因。
(2)INT3:断点中断
断点中断也是供DEBUG调试程序使用的,它的中断类型号为3。通常调试程序时,把程序按功能分为几段,然后每段设置一个断点。当CPU执行到断点时便产生中断,这时可以检查各寄存器及有关存储单元的内容。
断点可以设置在程序的任何地方,设置断点实际上是把一条断点指令INT3插入样本程序进程中,CPU每执行到断点处的INT3指令便产生一个中断。
使用中断指令来实时劫持OS执行,需要注意两点:
(1)定义我们的断点处理程序和与断点时间关联。即设置探测点,就是在我们指定的OS调用函数的内存位置上设置断点。
(2)被调试程序须在用户空间中执行。
当样本进程遇到断点(0xCC),该进程会发生异常#BP(INT3),Win32调试子系统会截获中断。调试器通过此端口完成对调试子系统的挂接,进而接收和处理调试事件。
调试器实际上是一个很宽泛的概念,凡是能够以某种形式监控其他程序执行过程的程序,都可以泛称为调试器。在Windows平台上,根据调试器的实现原理大概可以将之分为三类:内核态调试器、用户态调试器和伪代码调试器。用户态调试器直接使用Win32API提供的调试接口,遵循Win32的事件驱动的设计思想,其调试接口的服务器端的实现思路是:调试服务的服务器端接口实际上是存在于被调试进程的调试端口(Debug Port),此核心对象实现上跟Win32的完成端口类似,都是通过一个核心队列实现的LPC端口。启动调试服务器实际上就是挂接Win32的调试子系统到被调试进程,并在被调试进程内构造调试端口。调试器通过调试端口与Win32的调试子系统通讯;调试子系统响应系统操作所引发的调试事件,并通过调试端口将调试事件分发给用户态调试器。
按照本发明方法设计的捕获引擎正是采用这样的调试器技术。如图3所示,我们需要捕获某个样本调用CopyFileExA函数的情况,则在这个函数的入口处设置断点中断。一旦样本程序执行到此断点处(即样本调用CopyFileExA函数),会告知Win32调试子系统,调试子系统会检索是否有用户调试器在等待中断,如果发生的中断属于某个调试器需要监视的内容范围,则交由这个调试器处理。捕获引擎在启动时,创建新的进程空间用以执行样本,并告知调试子系统,该进程内发生的断点中断事件由捕获引擎来处理。
附图说明:
以下结合附图和具体实施方式来进一步说明本发明。
图1为Winsock 2层次结构图。
图2为SPI木马工作原理示意图。
图3为捕获引擎设计原理图。
图4为自动化分析系统各模块关系图。
图5为动态行为自动化分析系统框架示意图。
图6为动态行为自动化行为分析系统拓扑图。
图7为行为数据表E-R图。
图8为组件关系图。
图9为APITracer处理流程示意图。
图10为HOOKDLL示意图。
图11为HOOKDLL处理流程示意图。
具体实施方式:
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本发明方法具体通过所制备的病毒动态行为自动化分析系统来实现。该系统的主要功能是为了自动化获取并分析样本程序的动态行为数据。该系统由以下几个模块组成:
(1)样本库:样本库包括两类样本,分别为黑样本库(病毒样本)、白样本库(合法程序)。
(2)入库筛选模块:负责将指定网络上能够直接访问的某文件或某文件夹里的文件的信息保存到指定数据库,同时将检验样本是否符合自动化行为分析系统的运行条件,只有符合条件的样本才能存在于相应的样本库中。
(3)捕获引擎模块:包括捕获引擎和插件,用来捕获病毒和合法程序的行为,并将行为数据入库;
(4)黑样本行为库:用来将捕获的黑样本行为数据记入数据库中并进行统计,并转化成易于建模的二维表,具体形式见表2和表3。
(5)白样本行为库:用来将捕获的白样本行为数据记入数据库中并进行统计,并转化成易于建模的二维表,具体形式见表2和表3。
表2
表3
如图4所示,捕获引擎对程序性质已确定的黑白样本库中的程序通过自动入库模块倒入到系统后进行行为捕获;再将捕获的数据交由黑/白样本行为库,并形成格式化的数据。
表4
在背景技术中我们归纳了6个行为相关类和35种具体行为,用于建立描述病毒动态行为的35维特征向量。表4(病毒行为特征向量表)列举了部分行为。本文设计的病毒动态行为自动化分析系统即用于捕获表4中的35种样本程序的动态行为。
如图5所示,这种病毒动态行为自动化分析系统的系统框架由以下三层构成:
(1)数据层。该层有两个组成部分,样本库和病毒行为库。样本库是用来放置样本的文件服务器,而病毒行为库是用来存放自动化行为分析系统的捕获的行为数据的数据库。
(2)控制层。该层是一个物理联机系统,每个集权单元都有一个封闭的虚拟运行环境用来运行病毒样本。集权单元的核心是控制程序,它的作用是:
①从样本库中提取病毒样本;
②向虚拟机发送控制指令,如开启虚拟机、加载样本程序、运行行为捕获引擎;
③接受虚拟机发送的有病毒行为的XML文件,并解析这个文件,将相关的病毒行为通过普通socket连接记录至病毒行为库中
(3)运行层。运行层可以看作是一个“沙框”(sandiex)。“沙框”可以看作为一个安全的软件系统,用来将一些未知的或不可信任的程序放置在一个孤立的且同外界隔离的环境中运行,因为这些程序是不能冒险放在个人系统或网络环境下运行的。而虚拟机系统为实现这个“沙框”创造了技术条件,因为虚拟机是同操作系统物理隔离,并且运行在我们常用的桌面系统,易用且易于控制。如设计得当,将病毒样本放置虚拟机运行不会对物理操作系统造成任何危害。在运行层中除了VMware虚拟机外还有行为捕获引擎和扩展插件。
下面介绍该系统的运行环境。
(一)物理机运行环境;
硬件环境配置:4台高性能PC(Intel E6320,4G内存)作为行为捕获引擎,每台捕获引擎都采用支持Intel VT技术的硬件,使得VMWare在此平台上的运行效率将优于其它平台。1台数据库服务器(DELL POWEREDGE 860)。1台百兆交换机。
软件环境配置:Windows XP Profess ional SP2,数据库为MySql 5.0,VMWareWorkStation 6.0.2。
系统网络配置如图6所示。
(二)虚拟机运行环境;
本系统采用VMware WorkStation 6.0以上的版本,使用的开发包为VMWareVIX SDK 1.1。
我们的实验环境拥有几种不同的操作系统的虚拟主机,每一个操作系统代表恶意软件可能攻击的目标。这样便于在本地环境中观察恶意程序。为了对付恶意软件,我们采取一些预防措施不让生产系统网络受到感染。具体方法如下:
(1)跟上VMware安全补丁的步伐,经常浏览其网站,下载其最新的补丁。
(2)将某物理主机用于基于VMware的试验环境,不用于其它用途。
(3)不将物理试验系统连接到生产性网络。
(4)用基于主机的入侵检测软件监视物理主机,如一个文件集成检查器。
(5)用克隆软件定期重镜象物理主机,如Norton Ghots。
搭载病毒样本的虚拟机系统与之对应的物理机进行逻辑隔离,本文实验采用的具体方法是将这两种不同的系统分置在不同的网段,以防止如Viking等病毒,这些病毒具有很强的嗅探能力,能够突破同局域网下所以机器的漏洞,并将其注入。
系统的数据库设计如下:
系统的数据库是基于MySql5.0开发设计,数据结构及表应用数据库脚本生成。这些数据表之间的E-R图如图7所示。其中关键的三个表是:tbl_prog、tbl_trace和tbl_traceevent。
表tbl_prog用来存放样本的一些基本信息,比如存放文件路径,这里要注意的是文件路径为共享路径,这个路径应当被分析引擎顺利访问。
表tbl_trace用来记录被分析样本的状态,因为在分析的过程中,被分析的样本会出现超时、崩溃等情况,具体处理将在下文详细介绍。
表tbl_traceevent用来记录被分析样本的API调用及使用的参数,这里的数据将是建模中的关键性数据。
当然,整个自动化分析系统是由如下几个组件协同工作完成:
(1)入库程序。入库程序是将样本库中的样本路径等信息存入数据库中,使得控制程序能够获取到样本的路径信息。
(2)Control(控制程序)。运行在物理机上,用于控制虚拟机的运行,并负责提取病毒样本和超时管理。
(3)VMTracer(捕获引擎)。VMTracer是捕获系统中的核心,负责检查被分析样本进程加载了哪些系统DLL,然后根据HOOKDLL的导出函数表,来确定需要在被分析样本进程中哪些API调用处设置调试断点。当样本进程执行到调试断点处会产生中断事件,通过调试子系统获得断点发生时被分析样本进程的执行环境(指令寄存器、堆栈寄存器等多个寄存器的值),并将中断时的堆栈参数送至HOOKDLL中相应的处理函数进行具体分析。
(4)HOOKDLL。负责接收捕获引擎捕获的API函数及其实际参数,并对实际参数进行具体分析,将分析的结果进行格式化输出到数据库或文件中。
从图8可以看出在系统的三层框架下,入库程序作为组件位于数据层中的样本库文件服务器中。它作为一个前端工具,用于将样本信息存入数据库中,在自动化系统所有组件中只有入库程序是人机交互的。而控制程序是无人值守的,是无须人机交互的。控制程序是所有组件的核心,它负责从样本库中提取样本、运行虚拟机、并向行为库传送病毒行为数据。捕获引擎及其插件(HookDll)是协同工作在虚拟环境下捕获病毒的行为,并写入XML文件回传至控制机。
这里需要着重指出的是捕获引擎(APITracer)是本系统中的核心,在确定对指定样本进程进行分析之后,检查被分析样本进程加载了哪些系统DLL,然后根据工作目录下的HOOKDLL的导出函数表,来确定需要在被分析样本进程中哪些API调用处设置调试断点。当样本进程执行到调试断点处会产生中断事件,通过调试子系统获得断点发生时被分析样本进程的执行环境(指令寄存器、堆栈寄存器等多个寄存器的值),并将中断时的堆栈参数送至HOOKDLL中相应的处理函数进行具体分析。
捕获引擎的功能:
(1)根据工作目录下的HOOKDLL对指定API调用入口处设置调试断点;
(2)通过操作系统调试子系统中获取需要捕获的API调用事件及其参数;
(3)向HOOKDLL中相应的处理函数传递断点发生处的堆栈信息;
捕获引擎的输入项:
(1)样本进程;
(2)捕获引擎的所在目录;
(3)目录下所有HOOKDLL名及HOOKDLL导出函数表;
捕获引擎的输出项:
捕获引擎在捕获到调试中断之后,会调用HOOKDLL中相应的函数进行处理,这些函数采用相同的参数表,这个参数表就是行为捕获引擎的输出,定义为TracerFunc函数指针,具体定义如下:
typedef VOID(*TracerFunc)(DWORD TraceMode.CTraceInfo*pInfo,API_TRACE_INFO&pApiInfo,DWORD*pdwRet,ADV_CONTROL*pControl);//该接口由所有的Hook Dll处理函数共享
以对SendMessageW函数的捕获处理为例,当发生调试断点事件之后,捕获引擎调用HOOKDLL中的MySendMessageW函数进行处理,MySendMessageW函数定义如下:
VOID MySendMessageW(DWORD TraceMode,
CTraceInfo*pInfo,
API_TRACE_INFO&ApiInfo,
DWORD*pdwRet,
ADV_CONTROL*pAdvCtrl)
其中:TraceMode若为CALL_TRACE_MODE,表明是在捕获的API调用前进行处理。TraceMode若为RETURN_TRACE_MODE,表明是在捕获的API调用后进行处理;pInfo为CTraceInfo*类型的句柄,用于结构化打印数据,相当于stdout;pdwRet
用来通知捕获引擎修改被捕获函数的返回值;pAdvCtrl是系统保留,为了将来扩充功能保留。ApiInfo为API_TRACE_INFO结构体的指针变量,存储了断点发生时,被分析样本进程的执行环境,包括API名,堆栈指针等,具体定义如下:
API_TRACE_INFO{
HANDLE hProcess;//样本进程句柄
const char*ProcessName;//样本进程名
const char*DllName;//API导出的DLL名
const char*ApiName;//API函数名
VOID*dwStackAddr;//API函数实际参数堆栈指针
} API_TRACE_INFO;
如图9所示,捕获引擎的处理流程:
捕获引擎的主要部分是一个循环,处理来自内核的调试事件,循环体内先等待一个调试事件,然后处理之,最后将控制权交还给调试服务器,就好像一个窗口消息循环一样。
捕获引擎关注EXCEPTION_DEBUG_EVENT调试事件的发生,每次Win32API一旦被调用,就触发一次EXCEPTION_DEBUG_EVENT事件。每调用一次Win32API,APITracer查找这些动态链接库是否存在有同名函数,一旦发现即转入HOOLDLL动态链接库。
其实现的方法是:在调试器开始的时候,启动要调试程序的新进程或者挂接(attach)到一个已运行进程上,此时启动调试接口的服务器端;使用WaitForDebugEvent函数等待调试服务器端的调试事件的发生;根据事件进行相应的处理;最后使用ContinueDebugEvent函数请求调试服务器继续执行被调试进程,以等待并处理下一个调试事件;
if(bNewProcess)
CreateProcess(...,DEBUG_PROCESS,...);
else
DebugActiveProcess(dwPID)
while ( 1==WaitForDebugEvent(&DbgEvt,INFINITE))
{
switch(DbgEvt.dwDebugEventCode)
{
case EXIT_PROCESS_DEBUG_EVENT:
break;
//other cases
}
Cont inueDebugEvent(...);
}
捕获引擎的接口:
(1)CTraceInfo用于控制和输出;
(2)API_TRACE_INFO{
HANDLE hProcess; //样本进程句柄
const char*Proces sName; //样本进程名
const char*DllName; //API导出的DLL名
const char*ApiName; //API函数名
VOID*dwStackAddr; //API函数实际参数堆栈指针
}API_TRACE_INFO;
(3)pdwRet用来设置被拦截函数的返回值;
(4)pAdvCtrl为了将来扩充功能保留;
HOOKDLL
HOOKDLL组件主要是接收捕获引擎捕获的API函数及其实际参数,并对实际参数进行具体分析,将分析的结果进行格式化输出到数据库或文件中。格式化输出的分析内容有两种,Trace型即记录API调用的记录而不关注其参数,Analysis型即把API和参数进行结合判断后再记录其行为特征。
HOOKDLL的功能:
(1)解析捕获引擎传递的函数参数内容;
(2)检查参数内容与对应的API可能产生的恶意行为做规则匹配;
(3)输出Trace类型记录;
(4)输出Analysis类型记录;
HOOKDLL的输入项:
typedef VOID(*TracerFunc)(DWORD TraceMode,CTraceInfo*pInfo,API_TRACE_INFO&pApi Info,DWORD*pdwRet,ADV_CONTROL*pControl);
//该接口由所有的Hook Dll处理函数共享
以对WSAConnect函数的捕获处理为例,病毒调用此API函数,必定引用了系统DLL,即Ws2_32.dll,与之对应的HOOKDLL是:H_Ws2_32.dll,则对WSAConnect函数参数的具体分析转入H_Ws2_32.dll中的MyWSAConnect函数进行处理, MyWSAConnect函数定义如下:
VOID MyWSAConnect(DWORD TraceMode,
CTrace Info*pInfo,
API_TRACE_INFO&ApiInfo,
DWORD*pdwRet,
ADV_CONTROL*pAdvCtrl)
MyWSAConnect首先判断TraceMode的类型,然后从API_TRACE_INFO中的堆栈指针获得参数内容在内存的地址,进而读取这些内容并将其解析。Trace类型的记录就是API调用事件和参数内容的输出,Analysis类型的记录是分析函数参数的内容是否同与该函数相关的恶意代码行为规则所匹配,如果匹配则该行为作为Analysis类型的记录被输出。
HOOKDLL的输出项:
HOOKDLL的输出项是使用类CTraceInfo派生的对象进行控制和输出。以分析WSAConnect函数Trace类型为例:
VOID MyWSAConnect(DWORD TraceMode,
CTraceInfo*pInfo,
API_TRACE_INFO&ApiInfo,
DWORD*pdwRet,
ADV_CONTROL*pAdvCtrl){
pInfo->TracePrintA(INFO_CLASS_TRACE,
EVENT_CLASS_NETWORK,
EVENT_ID_TRACE_NETWORK_CONNECT,
&ApiInfo,0,″connect to%d.%d.%d.%d:%u″,\
name.sin_addr.S_un.S_un b.s_b1,\
name.sin_addr.S_un.S_un b.s_b2,\
name.sin_addr.S_un.S_un b.s_b3,\
name.sin_addr.S_un.S_un b.s_b4,\uPort);
}
Trace类型记录是将上述输出语句中的INFO_CLASS_TRACE,和EVENT_ID_TRACE_NETWORK_CONNECT分别改为INFO_CLASS_ANALYSIS和EVENT_ID_ANALYSIS_NETWORK_CONNECT。
HookDll的处理流程:
一旦调试事件EXCEPTION_DEBUG_EVENT发生,捕获引擎即阻塞被跟踪程序的执行,示意图见图10。
如图10所示,APITracer在跟踪至某一系统API函数TestFunc(),此时中断TestFunc(),记录当前函数地址0x17fa,并指针转至能够处理该函数的扩展插件,这个插件我们命名为HOOKDLL。然后,HOOKDLL记录下此API调用,此外还有调用的时间戳及其相关参数,比如关联的文件名、访问的磁盘分区或修改注册表的键值。完毕后,将指针重定向至0x17fa处,释放中断。
HOOKDLL的内部处理流程如图11所示:
TraceMode为CALL_TRACE_MOED表明当前API函数的参数内容可以在调用前得到,而TraceMode为RETURN_TRACE_MOED则表明当前API函数的参数必须在函数调用后得到,同时还需要指明是否修改函数返回值。
HOOKDLL实现过程中使用的主要类库和变量是CTraceInfo类和API_TRACE_INFO结构。CTraceInfo类在CommUtils.h头文件中声明,该类主要用于分析处理和记录调试的相关信息。API_TRACE_INFO结构在CommUtils.h中声明。这个结构包含了被拦截dll函数所在的进程句柄(hProcess),调用本函数的模块名(Caller),调用本函数的Dll名(DllName),以及本函数的函数名(ApiName),函数参数堆栈指针(dwStackAddr)等。dwRet用来设置被拦截函数的返回值,而pAdvCtrl是为了将来扩充功能保留。
根据表1,我们在系统中设计和实现了八个HOOKDLL,见下表5:
实际动态链接库 | 动态链接库的功能 | 相应的HOOKDLL |
Kerne132.dll | 负责内存管理、输入输出以及中断等工作 | H_Kernel32 |
实际动态链接库 | 动态链接库的功能 | 相应的HOOKDLL |
Advapi32.dll | 一个高级API应用程序接口服务库的一部分,用于支持非常多的API应用程序接口,包括安全和注册的调用 | H_Advapi32 |
netapi32.dll | Windows网络应用程序接口,用于支持访问微软网络 | H_netapi32 |
NTDLL.dll | 是NT系统的接口 | H_NTDLL |
Shell32.dll | 用于系统窗口及设置等,如删除文件、重命名 | H_Shell32 |
user32.dll | Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性 | H_user32 |
H_winhttp.dll | Windows Sockets应用程序接口,用于支持很多Internet和网络相关应用程序 | H_H_winhttp |
Ws2_32.dll | Windows Sockets应用程序接口,用于支持Internet和网络应用程序 | H_Ws2_32 |
表5
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (7)
1.针对计算机病毒的动态行为捕获方法,其特征在于,包括以下步骤:
(1)将API的调用设置为EXCEPTION_DEBUG_EVENT调试事件,由系统内核捕获这个事件后通知调试器;
(2)通过设置捕获引擎并在确定对指定样本进程进行分析之后,检查被分析样本进程加载了哪些系统DLL,然后根据工作目录下的HOOKDLL的导出函数表,在被分析样本进程中确定API调用入口,同时在这些确定的API调用入口处设置调试断点,捕获程序执行到调试断点便会发生中断事件;
(3)系统内核通过捕获工具注射一个动态链接库至恶意代码进程空间,用这个动态链接库来分析API的堆栈内容。
2.根据权利要求1的针对计算机病毒的动态行为捕获方法,其特征在于,当样本进程执行到调试断点处会产生中断事件,通过调试子系统获得断点发生时被分析样本进程的执行环境,并将中断时的堆栈参数送至HOOKDLL中相应的处理函数进行具体分析。
3.根据权利要求1的针对计算机病毒的动态行为捕获方法,其特征在于,所述捕获引擎的输入项包括样本进程、捕获引擎的所在目录和目录下所有HOOKDLL名及HOOKDLL导出函数表。
4.根据权利要求1的针对计算机病毒的动态行为捕获方法,其特征在于,所述捕获引擎在捕获到调试中断之后,会调用HOOKDLL中相应的函数进行处理,这些函数采用相同的参数表,这个参数表就是行为捕获引擎的输出,定义为TracerFunc函数指针,所述TracerFunc函数指针具体定义为typedef VOID(*TracerFunc)(DWORD TraceMode,CTraceInfo *pInfo,API_TRACE_INFO&pApiInfo,DWORD*pdwRet,ADV_CONTROL*pControl);该接口由所有的HookD11处理函数共享。
5.根据权利要求1的针对计算机病毒的动态行为捕获方法,其特征在于,所述捕获引擎的主要部分是一个循环,处理来自内核的调试事件,循环体内先等待一个调试事件,然后处理之,最后将控制权交还给调试服务器。
6.根据权利要求1的针对计算机病毒的动态行为捕获方法,其特征在于,所述捕获引擎关注EXCEPTION_DEBUG_EVENT调试事件的发生,每次设置了断点的Win32API一旦被调用,就会触发一次EXCEPTION_DEBUG_EVENT调试事件;每调用一次设置了断点的Win32API,捕获引擎查找这些动态链接库是否存在有同名函数,一旦发现即转入HOOKDLL动态链接库。
7.根据权利要求6的针对计算机病毒的动态行为捕获方法,其特征在于,所述捕获引擎开始工作的时候,启动要调试程序的新进程或者挂接到一个已运行进程上,此时启动调试接口的服务器端;使用WaitForDebugEvent函数等待调试服务器端的调试事件的发生;根据事件进行相应的处理;最后使用ContinueDebugEvent函数请求调试服务器继续执行被调试进程,以等待并处理下一个调试事件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100372761A CN101373501B (zh) | 2008-05-12 | 2008-05-12 | 针对计算机病毒的动态行为捕获方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100372761A CN101373501B (zh) | 2008-05-12 | 2008-05-12 | 针对计算机病毒的动态行为捕获方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101373501A CN101373501A (zh) | 2009-02-25 |
CN101373501B true CN101373501B (zh) | 2010-06-02 |
Family
ID=40447658
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100372761A Expired - Fee Related CN101373501B (zh) | 2008-05-12 | 2008-05-12 | 针对计算机病毒的动态行为捕获方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101373501B (zh) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103501294B (zh) * | 2010-08-18 | 2017-03-08 | 北京奇虎科技有限公司 | 判断程序是否恶意的方法 |
CN102377753B (zh) * | 2010-08-19 | 2015-12-02 | 腾讯科技(深圳)有限公司 | 系统信息识别方法、装置和系统 |
CN101917682A (zh) * | 2010-08-25 | 2010-12-15 | 宇龙计算机通信科技(深圳)有限公司 | 一种移动终端的信息发送方法、系统及移动终端 |
CN103428173A (zh) * | 2012-05-17 | 2013-12-04 | 云联(北京)信息技术有限公司 | 基于云计算的体感操控系统及其应用 |
CN102739685B (zh) * | 2012-07-04 | 2015-04-08 | 网宿科技股份有限公司 | 应用层网络通信的过滤方法和装置 |
CN103679035B (zh) * | 2012-09-24 | 2016-12-28 | 腾讯科技(深圳)有限公司 | 安全性检测方法与装置 |
CN103095714A (zh) * | 2013-01-25 | 2013-05-08 | 四川神琥科技有限公司 | 一种基于木马病毒种类分类建模的木马检测方法 |
CN105814577B (zh) * | 2013-12-27 | 2020-07-14 | 迈克菲有限责任公司 | 隔离表现网络活动的可执行文件 |
CN103902284A (zh) * | 2014-03-07 | 2014-07-02 | 中国人民解放军装甲兵工程学院 | 一种基于动态库api拦截的数据采集方法及系统 |
CN104200164B (zh) * | 2014-09-10 | 2017-07-25 | 北京金山安全软件有限公司 | 一种加载器Loader病毒的查杀方法、装置及终端 |
CN105631326A (zh) * | 2014-11-05 | 2016-06-01 | 中兴通讯股份有限公司 | 敏感信息安全保护方法和装置 |
CN104966018A (zh) * | 2015-06-18 | 2015-10-07 | 华侨大学 | 基于Windows系统的软件程序异常行为分析方法 |
CN105491002A (zh) * | 2015-06-19 | 2016-04-13 | 哈尔滨安天科技股份有限公司 | 一种高级威胁追溯的方法及系统 |
CN105095763B (zh) * | 2015-08-10 | 2018-09-11 | 北京金山安全软件有限公司 | 漏洞防御方法及装置、电子设备 |
CN106557695B (zh) * | 2015-09-25 | 2019-05-10 | 卓望数码技术(深圳)有限公司 | 一种恶意应用检测方法和系统 |
CN105787371A (zh) * | 2016-03-18 | 2016-07-20 | 山东华软金盾软件股份有限公司 | 一种计算机进程监控方法和系统 |
CN106295342B (zh) * | 2016-08-19 | 2019-02-01 | 北京金山安全管理系统技术有限公司 | 检测和清除可移植可执行文件中感染型病毒的方法及装置 |
CN107346394A (zh) * | 2017-07-03 | 2017-11-14 | 深圳市乐唯科技开发有限公司 | 一种检验Android系统安全并加强手机使用安全的方法 |
CN107590388B (zh) * | 2017-09-12 | 2020-06-23 | 南方电网科学研究院有限责任公司 | 恶意代码检测方法和装置 |
CN108846287A (zh) * | 2018-06-26 | 2018-11-20 | 北京奇安信科技有限公司 | 一种检测漏洞攻击的方法及装置 |
CN110597571A (zh) * | 2018-06-12 | 2019-12-20 | 杨力祥 | 一种非立即数跳转的保护方法及对应计算装置 |
CN109492391B (zh) * | 2018-11-05 | 2023-02-28 | 腾讯科技(深圳)有限公司 | 一种应用程序的防御方法、装置和可读介质 |
CN111046390B (zh) * | 2019-07-12 | 2023-07-07 | 安天科技集团股份有限公司 | 一种协同防御补丁防护方法、装置及存储设备 |
CN112231198B (zh) * | 2019-07-15 | 2024-04-12 | 腾讯科技(深圳)有限公司 | 一种恶意进程调试方法、装置、电子设备及介质 |
CN113051088B (zh) * | 2021-03-31 | 2022-03-08 | 广州锦行网络科技有限公司 | 程序加载方法、装置、设备及计算机可读介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1304089A (zh) * | 2000-01-11 | 2001-07-18 | 神达电脑股份有限公司 | 感染计算机病毒文件的追踪检测方法 |
CN1306251A (zh) * | 2000-01-14 | 2001-08-01 | 神达电脑股份有限公司 | Ide硬盘装置设定在dma传输模式下的病毒检测方法 |
KR20040099897A (ko) * | 2003-05-20 | 2004-12-02 | 주식회사 하우리 | 스텔스 바이러스 치료장치 및 방법과 그 프로그램을기록한 기록매체 |
CN1656732A (zh) * | 2002-05-23 | 2005-08-17 | 赛门铁克公司 | 变形计算机病毒检测 |
-
2008
- 2008-05-12 CN CN2008100372761A patent/CN101373501B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1304089A (zh) * | 2000-01-11 | 2001-07-18 | 神达电脑股份有限公司 | 感染计算机病毒文件的追踪检测方法 |
CN1306251A (zh) * | 2000-01-14 | 2001-08-01 | 神达电脑股份有限公司 | Ide硬盘装置设定在dma传输模式下的病毒检测方法 |
CN1656732A (zh) * | 2002-05-23 | 2005-08-17 | 赛门铁克公司 | 变形计算机病毒检测 |
KR20040099897A (ko) * | 2003-05-20 | 2004-12-02 | 주식회사 하우리 | 스텔스 바이러스 치료장치 및 방법과 그 프로그램을기록한 기록매체 |
Also Published As
Publication number | Publication date |
---|---|
CN101373501A (zh) | 2009-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101373501B (zh) | 针对计算机病毒的动态行为捕获方法 | |
CN101373502B (zh) | 基于Win32平台下病毒行为的自动化分析系统 | |
US20220284094A1 (en) | Methods and apparatus for malware threat research | |
Canfora et al. | Leila: formal tool for identifying mobile malicious behaviour | |
US8117660B2 (en) | Secure control flows by monitoring control transfers | |
KR102307534B1 (ko) | 다수 소프트웨어 개체들에 걸쳐서 악성 행동을 트래킹하기 위한 시스템들 및 방법들 | |
RU2698776C2 (ru) | Способ ведения базы данных и соответствующий сервер | |
Willems et al. | Toward automated dynamic malware analysis using cwsandbox | |
CN102651061B (zh) | 用于检测复杂恶意软件的系统和方法 | |
CN106991324B (zh) | 一种基于内存保护类型监控的恶意代码跟踪识别方法 | |
CN105408911A (zh) | 硬件和软件执行概况分析 | |
Ahmadvand et al. | A taxonomy of software integrity protection techniques | |
CN103620613A (zh) | 用于基于虚拟机监视器的反恶意软件安全的系统和方法 | |
CN104081404A (zh) | 使用动态优化框架的应用沙盒化 | |
CN104392176A (zh) | 移动终端及其设备管理器权限的拦截方法 | |
CN101382984A (zh) | 一种扫描检测广义未知病毒的方法 | |
CN110647748B (zh) | 一种基于硬件特性的代码复用攻击检测系统及方法 | |
Chen et al. | Efficient detection of the return-oriented programming malicious code | |
Villalón-Huerta et al. | A taxonomy for threat actors’ persistence techniques | |
Skormin et al. | Prevention of information attacks by run-time detection of self-replication in computer codes | |
Starink | Analysis and automated detection of host-based code injection techniques in malware | |
Sun et al. | Detecting the code injection by hooking system calls in windows kernel mode | |
Nader et al. | The never ending war in the stack and the reincarnation of ROP attacks | |
Acin Sanz | ANDRIK: Automated Android malware analysis | |
Anand et al. | and Sandeep K Shukla Department of Computer Science and Engineering, Indian Institute of Technology, Kanpur, Kanpur, India {pmohan, pvcharan, hrushicnv, sandeeps}@ cse. iitk. ac. in |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100602 Termination date: 20180512 |