一种基于虚拟化行为分析技术的恶意代码检测方法及装置与流程

文档序号:20702513发布日期:2020-05-12 15:55阅读:335来源:国知局
本发明涉及计算机安全
技术领域
:,具体地涉及一种基于虚拟化行为分析技术的恶意代码检测方法及装置。
背景技术
::随着计算机,互联网技术的发展,人们的工作,生活越来越离不开信息技术带来的生产,生活方式的转变,工作中需要计算机来处理各种文档,各种业务,收发电子邮件等。生活中需要计算机来上网冲浪,获取各种信息,发微博,观看视频,网络游戏等等。互联网技术的发展该笔那了企业与消费者相互沟通及交互的方式,已成为信息共享与商务交易的主要平台。同时,互联网变得日益复杂,没有界限。高速发展的信息技术给人们的工作生活带来巨大的遍历的同时,也受到病毒,木马,黑客等种种安全威胁和影响。在这其中恶意代码是当今互联网的主要安全威胁。在信息安全事件中,绝大部分用户的经济损失是由恶意代码造成的。当前,各种计算机病毒,特洛伊木马,蠕虫(worm),逻辑炸弹以及间谍软件(spyware)等恶意软件呈广泛蔓延趋势,其主要危害包括窃取用户敏感信息,发送垃圾邮件,控制受害主机发动ddos攻击等。目前恶意代码并不仅仅局限于国内,出现了许多跨国攻击情况。目前主流的恶意代码查杀技术有静态特征检测和动态沙箱技术,传统的静态特征检测,需要建立庞大的病毒特征库,此方法已经无法赶上网络上由原本单一的病毒木马经过加壳,加花,组装等手段后成为“变种”木马数量的增长速度,其增长速度非常快,数量巨大,并且无法抵抗新近出现的未知病毒。而传统的动态沙箱检测技术,只是虚拟了一个指令解释器,模拟程序在操作系统中的运行,提取出敏感函数。这种检测方法的缺点在于,不能够完全模拟操作系统的真实环境,如cpu辅助处理指令,注册表信息的读取,网络流量监控,驱动层信息的监控等等。技术实现要素:本发明旨在提供一种基于虚拟化行为分析技术的恶意代码检测方法及装置,以解决上述问题。为此,本发明采用的具体技术方案如下:根据本发明的一方面,提供了一种基于虚拟化行为分析技术的恶意代码检测装置,其可包括本地主机和虚拟机,其中,所述本地主机设置有可视化模块、虚拟机控制模块和数据分析模块,所述可视化模块用于将待测可执行文件从本地主机传送至虚拟机、控制所述虚拟机控制模块启动虚拟机以及从所述数据分析模块获取分析报告;所述虚拟机控制模块用于对虚拟机进行控制;所述数据分析模块用于分析所述虚拟机传送的监控日志文件和将分析结果生成分析报告;所述虚拟机设置有监控控制模块和监控模块和网络流量捕获模块,所述监控控制模块用于调用所述行为监控及网络流量捕获模块对待测执行文件进行进程、注册表、文件、驱动加载和网络行为的监控并将各种行为记录在监控日志文件中。进一步地,所述行为监控及网络流量捕获模块包括进程获取模块、进程监控模块、文件监控模块、注册表监控模块、驱动监控模块、网络流量捕获模块和日志记录模块。进一步地,所述注册表监控模块采用注册表回调函数对注册表行为进行监控,所述进程监控模块、文件监控模块和驱动监控模块采用ssdthook技术对进程、文件和驱动加载行为进行监控,以及网络流量捕获模块使用tdi层irphook实现对网络行为的监控。进一步地,注册表行为包括创建、修改或删除注册表项和/或注册表键值,进程行为包括进程的创建和终止行为,以及文件行为包括文件的创建、覆盖和删除行为。进一步地,所述日志记录模块通过驱动程序直接写文件的操作将检测到的恶意代码行为记录下来。进一步地,所述虚拟机控制模块包括虚拟机设置、虚拟机基本操作和监控过程控制三个部分,其中,所述虚拟机设置包括类型选择、host设置和guest设置;所述虚拟机基本操作包括开启、关闭、挂起和还原;以及所述监控过程控制包括传送文件、启动监控和提取结果。进一步地,所述虚拟机控制模块基于vixapi实现对虚拟机的控制。进一步地,所述监控控制模块的工作过程为:服务创建、驱动加载、运行待测可执行文件一段时间和卸载驱动。根据本发明的另一方面,提供了一种基于虚拟化行为分析技术的恶意代码检测方法,其包括以下步骤:s1、提供如上所述的恶意代码检测装置;s2、通过本地主机的可视化模块将待测可执行文件传入本地主机;s3、通过可视化模块控制虚拟机控制模块来启动虚拟机;s4、通过虚拟机控制模块将待测可执行文件传入虚拟机;s5、在虚拟机通过监控控制模块启动行为监控及网络流量捕获模块;s6、在虚拟机内运行待测可执行文件,通过行为监控及网络流量捕获模块对待测可执行文件运行过程中的进程、注册表、文件、驱动加载和网络行为进行监控,同时将各种行为记录在监控日志文件中;s7、虚拟机将监控日志文件传到本地主机的数据分析模块,由数据分析模块对日志文件进行分析,并将分析结果生成分析报告;s8、通过本地主机的可视化模块将分析报告呈现给用户。本发明采用上述技术方案,具有的有益效果是:本发明无需庞大的病毒特征库,利用虚拟机技术,完全模拟操作系统的真实环境,以多种方式如进程模块监控,文件监控,注册表监控,驱动监控,网络流量捕获等来监控恶意代码在虚拟环境下的运行状态,从而检测出敏感信息。本发明可以由用户触发指令,自动的控制虚拟机系统,在虚拟环境下实现对恶意文件的行为进行分析,不会影响主机系统的运行环境,而且可以批量地对恶意文件行为进行分析。通过对恶意代码的行为研究和监控,不仅可以有针对地发现当前木马的行为特征,而且还能及时发现新的攻击技术于形式,这些对恶意代码检测以及防御具有重要意义。附图说明为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。图1是本发明的一种基于虚拟化行为分析技术的恶意代码检测装置的原理框图;图2是本发明的一种基于虚拟化行为分析技术的恶意代码检测方法的流程图。具体实施方式现结合附图和具体实施方式对本发明进一步说明。如图1所示,一种基于虚拟化行为分析技术的恶意代码检测装置可包括本地主机1和虚拟机2。其中,所述本地主机1设置有可视化模块11、虚拟机控制模块12和数据分析模块13。虚拟机2设置有监控控制模块21和行为监控及网络流量捕获模块22。可视化模块11用于将待测可执行文件从本地主机1传送至虚拟机2、控制虚拟机控制模块12启动虚拟机2以及从数据分析模块13获取分析报告。虚拟机控制模块12用于进行虚拟机设置、虚拟机基本操作和监控过程控制;所述数据分析模块13用于分析所述虚拟机2传送的监控日志文件和将分析结果生成分析报告。监控控制模块21用于调用所述行为监控及网络流量捕获模块22对待测执行文件进行进程、线程、注册表、文件、驱动加载和网络行为的监控并将各种行为记录在监控日志文件中。下面对各个模块进行详细说明。可视化模块11可视化模块11是用户与装置之间的交互操作界面,用户可以通过可视化模块11将待测可执行文件传入本地主机,并通过虚拟机控制模块12将待测可执行文件传入虚拟机2;通过虚拟机控制模块12启动控制虚拟机2;以及将监控日志的分析报告呈现给用户。虚拟机控制模块12虚拟机控制模块12是系统控制部分的核心模块,主要通过vixapi来实现。虚拟机控制模块12包括虚拟机设置、虚拟机基本操作和监控过程控制三个部分。其中,虚拟机设置包括类型选择,host设置,guest设置;基本操作包括开启,关闭,挂起,还原;监控过程控制包括传送文件,启动监控,提取结果。vix支持vmwareserver,workstation和virtualinfrastructure(包括esx和vcenter)等多种虚拟机,其连接函数针对不同的虚拟机具有不同的参数,同事要对虚拟机客户进行控制,要先获取虚拟机客户的路径,用户名,密码等信息。所以为了适应多种虚拟机,在控制端程序中部署了一个虚拟机设置模块,以方便用户进行配置。控制端还提供了对虚拟机进行常见的简单操作,包括开启虚拟机,关闭虚拟机,挂起虚拟机和还原虚拟机,分别利用了vix.vm类的poweron,poweroff,suspend和reverttosnapshot方法,结构如下:publicvoidpoweron(vix_vmpoweroppoweronoption)publicvoidpoweroff(vmpoweroppoweroffoption)publicvoidreverttosnapshot(snapshotsnapshot,vix_vmpoweropoptions)控制端的核心功能是监控过程的控制部分,主要负责将待测可执行文件送入虚拟机,启动监控对其进行行为监控,再提取出监控结果(监控日志文件)以提交给数据分析模块13进行进一步的处理。数据分析模块13数据分析模块13是本装置的数据分析处理模块,主要功能是对日志记录进行整合,分析日志中待测可执行文件的文件创建,删除,修改;进程创建,删除;注册表项及键的创建,修改,删除;网络流量等行为,并给出分析报告。数据分析模块是系统数据处理部分的核心,是将监控日志进行过滤整合以便生成可视化分析报告的重要部分。为了将待测可执行文件的行为按照动作来进行分类,本模块构造了一个动作链表类来存储相同动作的行为。结构表下表1所示:表1其中,strtime为行为发生的时间,strsrc为发起行为的进程,strdst为该行为的对象,next为指向下一个节点的指针。同时利用该动作链表类构造了以下如表2所示链表来分别存储不同动作类型的行为:表2链表名称链表类型createprocesslist创建进程createremotethreadlist创建远程线程terminateprocesslist终止进程createfilelist创建文件deletefilelist删除文件overwritefilelist覆盖文件loaddriverlist加载驱动createkeylist创建注册表键deletekeylist删除注册表键setvaluekeylist设置注册表键值deletevaluekeylist删除注册表键值同时需要对行为的发起者进行过滤。因为监控日志里包括虚拟机客户中所有进程的行为,所以需要把待测可执行文件及其衍生物的行为进行过滤和提取。为此本模块构造了一个proclist链表来存储待测可执行文件及其衍生物的进程,并将每一条行为监控记录的行为发起者与该链表中的进程名进行比较,如果行为发起者存在于proclist链表中,则将其行为记录至相应的动作链表中,否则丢弃该条记录。在记录动作链表的同时,当动作类型是创建进程或远程线程时,则将动作对象作为其衍生物存入proclist链表,以扩充过滤条件。监控控制模块21监控控制模块21工作在虚拟机内部的应用层,主要功能是调用行为监控及网络流量捕获模块22对待测可执行文件进行进程、线程、注册表、文件、驱动加载和网络行为。其主要工作流程是:1.加载驱动,2.运行待测可执行文件一段时间,3.卸载驱动。加载驱动需要先使用windowsapi提供的函数createservice为该驱动创建一个服务,其结构如下:sc_handlewinapicreateservice(__insc_handlehscmanager,__inlpctstrlpservicename,__in_optlpctstrlpdisplayname,__indworddwdesiredaccess,__indworddwservicetype,__indworddwstarttype,__indworddwerrorcontrol,__in_optlpctstrlpbinarypathname,__in_optlpctstrlploadordergroup,__out_optlpdwordlpdwtagid,__in_optlpctstrlpdependencies,__in_optlpctstrlpservicestartname,__in_optlpctstrlppassword);其中,hscmanager为之前用openscmanage函数创建的scm句柄,lpservicename为驱动的服务名,lpbinarypathname为驱动的路径名,返回值为该服务的句柄。创建完服务之后要启动服务,函数为startservice,结构如下:boolwinapistartservice(__insc_handlehservice,__indworddwnumserviceargs,__in_optlpctstr*lpserviceargvectors);其中hservice即为createservice函数所创建的服务句柄。加载完驱动后,使用deviceiocontrol来控制驱动程序启动行为监控,并用shellexecute函数来执行待测可执行文件。等待一段时间后卸载驱动以停止监控。并用shellexecute函数来执行待测可执行文件。等待一段时间后卸载驱动以停止监控。卸载驱动首先要使用openservice函数打开驱动所对应的服务,然后controlservice函数来终止服务。结构如下:boolwinapicontrolservice(__insc_handlehservice,__indworddwcontrol,__outlpservice_statuslpservicestatus);其中dwcontrol为控制指令,将其设为service_control_stop即可停止hservice所指向的服务。行为监控及网络流量捕获模块22行为监控及网络流量捕获模块22包含如下几个模块:1.进程获取模块当待测可执行文件运行时,会创建一些进程。进程获取模块的主要功能是当待测可执行文件在虚拟机中运行时获取其进程信息,并将进程信息如实记录下来。获取行为的进程信息是本装置的主要任务之一,它是联系外部设备捕获的网络flow信息和产生主机行为的程序的桥梁。进程信息是存放在内核结构eprocess中的,但该结构体定义未公开,所以需要在程序中获取。通过系统函数psgetcurrentprocess可以获得当前进程的eprocess结构,只需获取进程名在该结构的存放偏移量即可得到进程信息。这个偏移地址通过函数getprocessnameoffset实现。驱动程序在加载函数driverentry运行在system进程中。在driverentry中用psgetcurrentprocess获取system进程的内核结构eprocess的地址,然后从该地址开始寻找“system”字符串。这个过程采用顺序查找,知道匹配。找到后,便得到了eprocess的存放进程名的偏移地址offset,将其作为一个全局变量保存。此后如需取得进程名,只需通过调用psgetcurrentprocess获得的eprocess基址,加上offset,实现功能的函数是getprocessname,返回取得的进程名,其函数定义如下:booleangetprocessname(pcharthename);2.进程监控模块由于恶意代码通常穿件一些自己独有的进程,并且为了更好的保护自己,也会关闭一些防火墙,防病毒软件的相关进程但这些行为通常也会暴露出恶意代码的行踪。进程监控模块主要是在虚拟机中完成对待测可执行文件创建进程,终止进程的行为进行监控。本模块使用ssdthook实现对系统进程的监控。分为以下几个部分:初始化函数,监控开始函数,监控停止函数,hook函数。初始化部分定义函数getdllfunctionaddress,使用内核函数zwmapviewofsection把从ntdll动态链接库到处的函数映射至内存,进行查找直到找到目标服务函数获取系统服务函数在系统服务描述表中的偏移地址,然后利用内核结构keservicedescriptortable获得系统服务描述表基址,从而取得系统服务函数zwcreateprocess、zwterminateprocess、zwcreatethread的指针,并将其保存下来。函数getdllfunctionaddress传入欲查找的函数名和“\\device\\harddiskvolume\\windows\\system32\\ntdll.dll”的unicodestring格式,返回对应函数的偏移地址,其定义如下:dwordgetdllfunctionaddress(char*lpfunctionname,punicode_stringpdllname);监控开始函数中,修改ssdt的访问模式为可读可写,然后将ssdt中指向zwcreateprocess,zwterminateprocess,zwcreatethread的指针分别指向我们定义的函数fakedzwcreateprocess,fakedzwterminateprocess,fakedzwcreatethread,修改ssdt的访问模式为只读。三个fake函数的定义如下:ntstatusfakedzwcreateprocess(outphandleprocesshandle,inacess_maskdesiredaccess,inpobject_attributesobjectattributes,inhandleinheritfromprocesshandle,inbooleaninherithandles,inhandlesectionhandleoptional,inhandledebugportoptional,inhandleexceptionportoptional,inhandleunknown);ntstatusfakedzwcreatethread(outphandlethreadhandle,inaccess_maskdesiredaccess,inpobject_attributesobjectattributes,inhandleprocesshandle,outpclient_idclientid,inpcontextthreadcontext,inpvoiduserstack,inbooleancreatesuspended);ntstatusfakedzwterminateprocess(inhandleprocesshandle,inntstatusexitstatus);对zwcreateprocess的处理中,调用系统函数obreferenceobjectbyhandle由sectionhandle获得指向进程对象的指针,从该进程对象中找到进程完成路径的偏移量,再将待建进程的设备盘符转化为dos下的盘符,即获得了新建进程的信息。调用进程获取模块的函数getprocessname,获取执行此行为的进程信息。最后,根据之前保存的zwcreateprocess函数的指针调用原函数即可。对zwcreatethread和zwterminateprocess的处理中,调用系统函数obreferenceobjectbyhandle由processhandle获得指向对应进程对象的指针,然后通过调用未公开函数psgetprocessimagefilename来获取进程名称。调用进程获取模块的函数getprocessname,获取执行此行为的进程信息。最后,根据之前保存的zwcreatethread和zwterminateprocess函数的指针调用原函数即可。3.文件监控模块恶意代码在运行过程中会创建一些自己的临时性文件,待预定工作完成后会删除,以免留下自己的痕迹。同时,它也可能会修改或删除一些系统文件,来达到隐藏自己的目的。针对恶意代码的这些恶意行为,文件监控模块需要完成对虚拟机内待测可执行文件运行时各种文件的创建,修改,删除等行为的监控。本模块使用ssdthook实现对系统文件的监控。分为以下几个部分:初始化函数,监控开始函数,监控停止函数,hook函数。初始化函数,监控开始函数,监控停止函数与进程监控过程类似。两个fake函数的定义如下:ntstatusfakedzwcreatefile(outphandlefilehandle,inaccess_maskdesiredaccess,inpobject_attributesobjectattributes,outpio_status_blockiostatusblock,inplarge_integerallocationsizeoptional,inulongfileattributes,inulongshareaccess,inulongcreatedisposition,inulongcreateoptions,inpvoideabufferoptional,inpvoidealength);ntstatusfakedzwsetinfomationfile(inhandlefilehandle,outpio_status_blockiostatusblock,inpvoidfileinformation,inulonglength,infile_information_classfileinformationclass);在对zwcreatefile的处理中,文件名及所在路径信息可从objectattributes->objectname获得。调用进程获取模块的函数getprocessname,获取执行此行为的进程信息。最后,根据之前保存的zwcreatefile函数的指针调用原函数即可。zwsetinformationfile的处理中,调用系统函数obreferenceobjectbyhandle由filehandle获得指向对应文件对象的指针,然后通过调用obquerynamestring来获取待操作的文件名称及路径。调用进程获取模块的函数getprocessname获取执行此行为的进程信息。最后,根据之前保存的zwsetinformationfile函数的指针调用原函数即可。4.注册表监控模块某些恶意代码需要修改操作系统的注册表来达到自身启动,隐藏等目的。这就涉及到对系统注册表的操作,需要创建,修改或删除注册表项,注册表键值等。通过对这些行为的监控分析,可以发现恶意代码的蛛丝马迹,该模块的功能是对系统注册表项,键值的增,删,改操作进行监控。本模块使用注册表回调函数实现对系统注册表行为的监控。分为一下几个部分:监控开始函数,监控停止函数,回调函数。实现注册表回调包括三个步骤:编写registercallback函数,注册registrycallback例程,卸载registrycallback例程。监控开始函数完成registrycallback例程的卸载,回调函数实现对注册表操作的信息提取。回调函数注册使用系统函数cmregistercallback,将回调函数registercallback作为参数function传入即可,卸载使用系统函数cmunregistercallback。它们的定义如下:ntstatuscmregistercallback(inpex_callback_functionfunction,inpvoidcontext,outplarge_integercookie);ntstatuscmunregistercallback(inlarge_integercookie);回调函数registrycallback实现对注册表的监控,其定义如下:ntstatusregistrycallback(inpvoidcallbackcontext,inpvoidargument1,inpvoidargument2);将参数argument1强制转换为reg_notify_class类型,然后对以下5值做处理:regntdeletekey、regntsetvaluekey、regntdeletevaluekey、regntrenamekey和regntpostcreatekey。对不同的reg_notify_class和argument2转化成不同的reg_xxx_information,获取注册对象,提取完整注册表路径,对设计到注册表值的情况,也需将值提取出来。最后调用进程获取模块的函数getprocessname,提取执行此次行为的进程信息。注册表项的完整路径通过两次调用内核函数obquerynamestring提取,注册对象可以从reg_xxx_information->object中获取。内核函数obquerynamestring定义如下:ntkernelapintstatusobquerynamestring(__inpvoidobject,__out_bcount_opt(length)pobject_name_informationobjectnameinfo,__inulonglength,__outpulongreturnlength);对于regntsetvaluekey和regntdeletevaluekey,需要将注册表键值加到注册表路径之后,由于键值类型繁多,处理时需要区别对待,对于字符串类型(reg_sz,reg_expand_sz,reg_multi_sz)的值,直接提取,对dword类型(reg_dword)的值,先用无符号16进制表示,再进行提取,对其他类型(reg_binary,reg_resource_list,reg_full_resource_descriptor,reg_resource_requirements_list)的值,先用2进制表示,在进行提取。其中,二进制数据只显示8位,其余以省略号替代。5.驱动监控模块驱动监控模块的主要功能是完成对系统中驱动加载的监控,该模块采用ssdthook内核钩子技术实现。本模块使用ssdthook实现对驱动程序的加载的监控。分为以下几个部分:初始化函数,监控开始函数,监控停止函数,hook函数。初始化函数、监控开始函数、监控停止函数与进程监控过程类似。一个fake函数的定义如下:ntstatusfakedzwloaddriver(inpunicode_stringdriverservicename);在对zwloaddriver的处理中,将传入参数driverservicename进行类型转换即可。接着调用进程获取模块的函数getprocessname,获取执行此行为的进程信息。最后,根据之前保存的zwloaddriver函数的指针调用原函数。6.网络流量捕获模块网络流量捕获模块工作在虚拟机内部的应用层,功能是在待测可执行文件运行的同时捕获待测可执行文件的网络通讯情况,对通讯的数据包进行分析,通信双方地址及端口及通信量完成系统对恶意代码网络行为的监控。本模块使用tdi层irphook实现对网络的监控。分为以下几个部分:初始化部分,监控开始部分,监控停止部分和自定义irp派遣例程部分。初始化部分主要对本部分需要用到的同步对象和全局数据结构进行初始化。监控开始部分使用内核函数iogetdeviceobjectpointer函数获取tcp和udp设备对象,使用内核函数obreferenceobjectbyname获得tcpip驱动对象,将两个设备对象和tcpip驱动对象保存下来,随后进行irphook,将tcpip驱动对象的majorfunction替换成我们定义的irp派遣例程,这样就完成了irphook。内核函数iogetdeviceobjectpointer和obreferenceobjectbyname定义如下:ntstatusiogetdeviceobjectpointer(inpunicode_stringobjectname,inaccess_maskdesiredaccess,outpfile_object*fileobject,outpdevice_object*deviceobject);obreferenceobjectbyhandle(inhandlehandle,inaccess_maskdesiredaccess,inpobject_typeobjecttypeoptional,inkprocessor_modeaccessmode,outpvoid*object,outpobject_handle_informationhandleinformation);监控停止部分释放所有本模块使用的同步对象和变量空间,并将tcpip驱动对象的irpmajorfunction恢复为原有状态。irphook和恢复的代码如下,当布尔变量b_hook为真时,对irp进行hook,否则恢复irpmajorfunction:irp派遣例程部分主要处理irp_mj_create,irp_mj_device_control和irp_mj_internal_device_control。定义派遣例程devicedispatch,其结构如下:staticntstatusdevicedispatch(inpdevice_objectdeviceobject,inpirpirp);当接收到majorfunctionirp_mj_device_control时,调用内核函数iogetcurrentirpstacklocation获得irp的栈顶指针irps,调用内核函数tdimapuserrequest将其转化为irp_mj_internaldevicecontrol请求,如不能成功转化,从irps取出i/o控制码,判断其值是否为ioctl_tdi_query_direct_send_handler,若是则该irp请求时内核直接发出的tcp数据发送请求,从缓冲区取出数据并交由自定义ioctl处理例程new_tcpsenddata处理。内核函数iogetcurrentirpstacklocation和tdimapuserrequest定义如下:pio_stack_locationiogetcurrentirpstacklocation(inpirpirp);ntstatustdimapuserrequest(inpdevice_objectdeviceobject,inpirpirp,inpio_stack_locationirpsp);当接收到irp_mj_internal_device_control请求时,进一步判断minorfunction,并将tdi_connect、tdi_disconnect、tdi_send、tdi_receive、tdi_receive_datagram、tdi_send_datagram以及tdi_set_event_handler交由自定义tdi_xxx处理例程处理。tdi_xxx处理例程和new_tcpsenddata处理例程定义如下:inttdi_xxx(pirpirp,pio_stack_locationirps,structcomplection*completion);ntstatusnew_tcpsenddata(inpirpirp,inpio_stack_locationirpsp);本地地址可以在irp_mj_create请求时从(file_full_ea_information*)irp->associatedirp.systembuffer的成员eaname之后的transport_address->tdi_address_ip中获得。tcp协议的远程地址可以在tdi_connect请求时从(ptdi_request_kernel_connect)(&irps->parameters)中获得,udp协议的远程地址可以在tdi_send_datagram请求时从(tdi_request_kernel_senddg*)(&irps->parameters)中获得。通信数据量可通过各个请求传入的参数irps->parameter中的相关字段获得,依事件不同,字段有所差异。当派遣例程接收到tdi_connect、tdi_disconnect、tdi_send、tdi_receive、tdi_receive_datagram、tdi_send_datagram或tdi_set_event_handler中事件类型为tdi_event_connect、tdi_event_disconnecttdi_event_receive、tdi_event_chained_receive、tdi_event_receive_datagram、tdi_event_chained_receive_datagram的请求时,取得通信双方地址及端口及通信量,并调用进程获取模块的函数getprocessname,获取执行此行为的进程信息。9.日志记录模块本模块通过驱动程序直接写文件的操作将检测到的恶意代码行为记录下来,为其后的数据分析模块提供分析的样本。即本模块采用驱动程序直接写文件的方式实现日志记录功能。具体给,调用zwwritefile创建或打开文件,zwwritefile写文件zwclose关闭文件,其中zwcreatefile的第二个参数填入file_append_data,表示向文件中继续添加数据。单个函数定义如下:ntstatuszwcreatefile(outphandlefilehandle,inaccess_maskdesiredaccess,inpobject_attributesobjectattributes,outpio_status_blockiostatusblock,inplarge_integerallocationsizeoptional,inulongfileattributes,inulongshareaccess,inulongcreatedisposition,inulongcreateoptions,inpvoideabufferoptional,inulongealength);ntstatuszwwritefile(inhandlefilehandle,inhandleeventoptional,inpio_apc_routineapcroutineoptional,inpvoidapccontextoptional,outpio_status_blockiostatusblock,inpvoidbuffer,inulonglength,inplarge_integerbyteoffsetoptional,inpulongkeyoptional);ntstauszwclose(inhandlehandle)综上,如图2所示,本发明的一种基于虚拟化行为分析技术的恶意代码检测方法可包括以下步骤:s1、提供如上所述的恶意代码检测装置s2、通过本地主机的可视化模块将待测可执行文件传入本地主机;s3、通过可视化模块控制虚拟机控制模块来启动虚拟机;s4、通过虚拟机控制模块将待测可执行文件传入虚拟机;s5、在虚拟机通过监控控制模块启动行为监控及网络流量捕获模块;s6、在虚拟机内运行待测可执行文件,通过行为监控及网络流量捕获模块对待测可执行文件运行过程中的进程、线程、注册表、文件、驱动加载和网络行为进行监控,同时将各种行为记录在监控日志文件中;s7、虚拟机将监控日志文件传到本地主机的数据分析模块,由数据分析模块对日志文件进行分析,并将分析结果生成分析报告;s8、通过本地主机的可视化模块将分析报告呈现给用户。本发明不同于传统的静态特征检测及动态沙箱技术,本发明无需庞大的病毒特征库,利用虚拟机技术,完全模拟操作系统的真实环境,以多种方式如进程模块监控,文件监控,注册表监控,驱动监控,网络流量捕获等来监控恶意代码在虚拟环境下的运行状态,从而检测出敏感信息。本发明可以由用户触发指令,自动的控制虚拟机系统,在虚拟环境下实现对恶意文件的行为进行分析,不会影响主机系统的运行环境,而且可以批量地对恶意文件行为进行分析。通过对恶意代码的行为研究和监控,不仅可以有针对地发现当前木马的行为特征,而且还能及时发现新的攻击技术于形式,这些对恶意代码检测以及防御具有重要意义尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1