一种恶意程序检测方法、系统及相关装置与流程

文档序号:24193180发布日期:2021-03-09 15:50阅读:81来源:国知局
1.本申请涉及网络安全领域,特别涉及一种恶意程序检测方法、系统及相关装置。
背景技术
::2.当前,恶意程序分析场景下存在难以动态分析带crc校验的恶意程序的问题。该问题不解决使分析人员无法在程序运行时的场景下具体分析恶意程序的行为,只能通过静态分析工具对恶意程序进行逆向或者通过行为监控工具来从表象观察恶意程序运行时对系统造成的影响。然而静态分析时无法分析到某些只有在恶意程序运行时才能发生的行为,如网络通信时发生交互的内容,如加密数据在运行时才能跟踪到解密数据,而通过行为监控工具只能观测到恶意程序的表象行为,无法具体分析其实现原理。3.校验技术广泛用于各种软件中,用于验证软件本身、软件升级包或者用于验证软件生成的文件。crc校验则属于校验技术中十分常用的手段,常用于软件完整性校验,文件完整性校验。例如,当软件进行自校验后发现与预设的校验值不相符则会提醒用户或者直接退出,防止软件运行时出错。然而别有用心者将此技术用于恶意程序中,在恶意程序中埋入crc校验暗桩用于对抗反病毒软件的探针和病毒分析人员的分析。4.在病毒分析过程中,带有校验暗桩的恶意程序是动态分析较为困难,常见的现象是:恶意程序检测到了自己在被动态分析,则转入静默模式,不执行恶意操作,让外界误以为其没有进行恶意活动,或者直接关闭自身程序,或者甚至会进行强力的恶意破坏,如格式化硬盘等。所以对于安全研究分析人员来说,掌握绕过恶意程序crc检测的方法是很有必要的。技术实现要素:5.本申请的目的是提供一种恶意程序检测方法、恶意程序检测系统、计算机可读存储介质和电子设备,能够在检测恶意程序时绕过crc校验,提高检测效率。6.为解决上述技术问题,本申请提供一种恶意程序检测方法,具体技术方案如下:7.获取待检测文件;8.确定所述待检测文件中的恶意程序代码段;9.在恶意程序的进程内存中申请预设空间,并将所述恶意程序代码段复制到所述预设空间;10.在所述预设空间利用硬件断点程序对所述恶意程序代码段进行检测。11.可选的,确定所述待检测文件中的恶意程序代码段包括:12.利用调试器确定所述待检测文件中的恶意程序代码段;13.其中,利用调试器确定所述待检测文件中的恶意程序代码段包括:14.将所述待检测文件载入所述调试器;15.在所述调试器的内存布局窗口内确定标志性字符区段;16.根据所述标志性字符区段确定所述恶意程序代码段。17.可选的,确定所述待检测文件中的恶意程序代码段包括:18.利用pe解析工具确定所述待检测文件中的恶意程序代码段;19.其中,所述利用pe解析工具确定所述待检测文件中的恶意程序代码段包括:20.利用所述pe解析工具确定所述待检测文件的选项头;21.在所述选项头中确定映像基址和区段表;22.根据所述区段表确定所述恶意程序代码段的相对虚拟地址偏移和虚拟大小;23.根据所述映像基址和所述相对虚拟地址偏移确定所述恶意程序代码段的代码段地址,根据所述虚拟大小确定所述恶意程序代码段的代码段大小。24.可选的,在所述预设空间利用硬件断点程序对所述恶意程序代码段进行检测之前,还包括:25.以shellcode形式或dll形式编写所述硬件断点程序,并向所述预设空间植入所述硬件断点程序。26.可选的,向所述预设空间植入所述硬件断点程序包括:27.若所述硬件断点程序为所述shellcode形式,以内存写入形式将所述硬件断点程序写至所述预设空间的内存中;28.若所述硬件断点程序为所述dll形式,通过线程注入将所述硬件断点程序植入至所述预设空间。29.可选的,以shellcode形式或dll形式编写所述硬件断点程序时,还包括:30.添加veh异常处理接口,并将断点地址设置为所述恶意程序代码段所在位置。31.可选的,若所述硬件断点程序为dll形式,还包括:32.配置内存布局查询接口和进程信息查询接口,并基于所述内存布局查询接口和所述进程信息查询接口生成调试器插件。33.本申请还提供一种恶意程序检测系统,包括:34.获取模块,用于获取待检测文件;35.代码确定模块,用于确定所述待检测文件中的恶意程序代码段;36.代码复制模块,用于在恶意程序的进程内存中申请预设空间,并将所述恶意程序代码段复制到所述预设空间;37.代码检测模块,用于在所述预设空间利用硬件断点程序对所述恶意程序代码段进行检测。38.本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法的步骤。39.本申请还提供一种电子设备,包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上所述的方法的步骤。40.本申请提供一种恶意程序检测方法,包括:获取待检测文件;确定所述待检测文件中的恶意程序代码段;在恶意程序的进程内存中申请预设空间,并将所述恶意程序代码段复制到所述预设空间;在所述预设空间利用硬件断点程序对所述恶意程序代码段进行检测。41.本申请通过将确定后的恶意程序代码段复制到新的内存空间中执行,保留了原有恶意程序代码段的所有功能,在预设空间中摆脱crc检测线程的监控,从而绕过恶意程序代码的crc校验,不用经过繁复的分析crc校验功能代码就能使crc校验失效,提高针对恶意程序的检测效率和分析效率。42.本申请还提供一种恶意程序检测系统、计算机可读存储介质和电子设备,具有上述有益效果,此处不再赘述。附图说明43.为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。44.图1为本申请实施例所提供的一种恶意程序检测方法的流程图;45.图2为本申请实施例所提供的一种恶意程序检测系统的结构示意图。具体实施方式46.为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。47.请参考图1,图1为本申请实施例所提供的一种恶意程序检测方法的流程图,该方法包括:48.s101:获取待检测文件;49.s102:确定所述待检测文件中的恶意程序代码段;50.本步骤旨在确定待检测文件中的恶意程序代码段的位置,即起始地址、结束地址和代码段长度中的至少两种数据。通过解析恶意程序二进制文件结构即可确定代码段起始地址的相对偏移和代码段的长度,将相对偏移和长度代入到当前内存中的恶意程序的代码基地址中即可确定代码段范围。或者直接用如ollydbg等调试器附加恶意程序,即可在内存布局窗口中看到代码段范围。51.本实施例在此提供两种确定恶意程序代码段范围的方式:52.第一种,可以利用调试器确定待检测文件中的恶意程序代码段,具体可以包括如下步骤:53.第一步、将待检测文件载入调试器;54.第二步、在调试器的内存布局窗口内确定标志性字符区段;55.第三步、根据标志性字符区段确定恶意程序代码段。56.第一种方式较为便捷,利用调试器载入包含恶意程序代码段的待检测文件,例如使用ollydbg载入恶意程序,打开调试器内存布局窗口,找到“.text”区段,即可查看该区段的地址和大小,也即找到了该恶意程序代码段在内存中的起始地址和大小。但需要注意的是,在恶意程序带有aslr(地址空间随机化)机制时,只能利用调试器等工具观察该恶意程序代码段在内存中的内存布局,否则获取到的恶意程序代码段范围可能不准确。57.第二种方式,可以利用pe解析工具确定待检测文件中的恶意程序代码段,具体过程可以如下:58.第一步、利用pe解析工具确定待检测文件的选项头;59.第二步、在选项头中确定映像基址和区段表;60.第三步、根据区段表确定恶意程序代码段的相对虚拟地址偏移和虚拟大小;61.第四步、根据映像基址和相对虚拟地址偏移确定恶意程序代码段的代码段地址,根据虚拟大小确定恶意程序代码段的代码段大小。62.pe解析工具可以查看pe文件结构。pe文件为portableexecutable文件,即可移植、可执行文件。首先找到选项头(optionalheader),选项头中记录了该pe文件的各种信息,如:映像基址,代码基址,数据基址,版本等。在选项头中找到映像基址(imagebase),映像基址代表该程序被放入内存运行时的基址。其次找到区段表(sectionheaders),区段表中包含了恶意程序的各种区段,例如:代码段,数据段,资源段等。区段表中的“.text”段就是恶意程序代码段,获取该代码段的“相对虚拟地址偏移”(virtualaddress)和“虚拟大小”(virtualsize),即可得到代码段基址和范围:内存中代码段地址=映像基址+代码段的相对虚拟地址偏移,内存中代码段大小=4k对齐后的代码段虚拟大小。注意:代码段的虚拟大小在内存中会以4k的方式对齐,如果该代码段的虚拟大小刚好4k对齐,那么内存中的代码段大小就和代码段虚拟大小一样。如果不对齐则在代码段末尾补零到4k对齐。63.当然,本领域技术人员还可以使用其他方式确定待检测文件中的恶意代码段,在此不一一举例限定。64.s103:在恶意程序的进程内存中申请预设空间,并将所述恶意程序代码段复制到所述预设空间;65.本步骤旨在申请预设空间,用于存放恶意程序代码段的复制数据。为了避开crc检测线程的监控,在恶意程序的进程内存中申请一个预设空间,具体的,可以额使用创建进程内存空间api向恶意程序对应的进程申请该预设空间,容易理解的是,该预设空间大小必须大于上文确定的恶意程序代码段大小,且通常还需要预留部分空间用于存放后文的硬件断点程序。66.优选的,在确定恶意程序代码段之后,预设空间的大小可以设为恶意程序代码段大小加4kb,4kb为一页空间的大小,通常足以满足硬件断点程序需求。当然预设空间的具体大小可由本领域技术人员根据恶意程序代码段和硬件断点程序的长度总和进行相应的设定。此外,还需要将预设空间的属性设置为可读可写可执行,以便于后续写入硬件断点程序和在预设空间中进行恶意程序分析检测。67.s104:在所述预设空间利用硬件断点程序对所述恶意程序代码段进行检测。68.本实施例默认在执行本步骤前,还需要编写硬件断点程序。在此对于如何编写硬件断点程序不作限定,可以以shellcode形式或dll形式编写硬件断点程序,shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,常用于获取shell文件,shell文件通常指命令解析器。而dll形式则是采用动态链接库的形式。在编写硬件断点程序后,还需要向预设空间植入硬件断点程序。当然,植入过程根据硬件断点程序的形式不同也有所不同。69.若硬件断点程序为shellcode形式,以内存写入形式将硬件断点程序写至预设空间的内存中;若硬件断点程序为dll形式,通过线程注入将硬件断点程序植入至预设空间。70.如果是shellcode形式的硬件断点程序则需要通过内存写入的形式,且必须写在新申请的内存空间中,不能写在原代码段的内存空隙中,因为crc检测可能会校验这些内存空隙。71.以dll形式编写硬件断点程序为例。首先设置使用veh异常处理接口,然后设置硬件执行断点,将断点地址设置为恶意程序代码段所在位置。当然也可以设置到其他程序运行的必经之地,这样能更快的触发异常。最后在veh异常处理回调函数中处理硬件执行异常,当恶意程序执行到设置的硬件执行断点处,就会产生异常,流程转入到veh异常处理接口对应的异常处理函数中,并将当前程序执行流程转移到预设空间中。需要注意的是,该过程是将程序执行流程转移,即执行后硬件执行断点之后,后续流程由预设空间中的恶意程序代码段完成。72.由于恶意程序的执行流程已经完全转向到预设空间的复制代码中,且该复制代码完全不受crc检测线程的控制,可以对此代码段下任意软件断点,或进行任何修改,以便对恶意程序进行分析。73.本申请实施例通过将确定后的恶意程序代码段复制到新的内存空间中执行,保留了原有恶意程序代码段的所有功能,在预设空间中摆脱crc检测线程的监控,从而绕过恶意程序代码的crc校验,不用经过繁复的分析crc校验功能代码就能使crc校验失效,提高针对恶意程序的检测效率和分析效率。74.基于上述实施例,作为优选的实施例,若硬件断点程序为dll形式,还可以配置内存布局查询接口和进程信息查询接口,并基于内存布局查询接口和进程信息查询接口生成调试器插件。75.由于一般调试器都会开放相应的插件接口供用户开发插件以增强调试器功能,所以不同调试器插件的具体开发过程不同,所以这里不讨论插件具体编写过程,只说明本插件需要利用到调试器提供的接口功能和本身要完成的功能。调试器插件通常是dll形式,将功能封装到插件dll中即可。76.该调试器插件需要包括内存布局查询接口,用来获取当前被调试程序的代码段在内存中的基地址(aslr开启的情况下,通过pe文件计算出的代码段基址可能会是错误的)和大小。还需要包括进程信息查询接口,用来获取被调试程序的进程句柄。77.需要调试器插件中实现的功能:78.1.利用查询到的被调试程序的进程句柄,在被调试进程中申请一段内存,该段内存的大小应该比被调试程序的代码段大4k。79.2.利用调试器提供的内存读写接口或者系统提供的内存读写api,复制当前被调试进程的代码段到新申请的内存区域中,从此就拥有了一个新代码段。80.3.在被调试进程的旧代码段首地址处设置硬件断点,当被调试程序执行到此处时触发异常,转而进入异常处理体系。81.4.veh异常功能,再创建一个额外的dll,在dllmain中实现设置veh异常的功能,并且将veh异常处理函数也在dll中以一个单独的函数实现。该异常处理函数需要判断触发的异常是不是硬件异常并且该异常地址是旧代码段首地址,如果满足条件则处理该异常。将该异常的上下文的eip设置到新代码段的首地址处,异常处理函数返回值为已处理异常并继续运行状态。82.5.可以将这个异常处理dll作为资源放置在调试器插件dll中,要使用时释放到磁盘即可。83.6.在调试器插件dll中利用远程线程注入等方式将异常处理dll注入到被调试的进程中。84.由上文可知,先在eip插件dll中实现被调试程序的代码段复制,然后在旧代码段首地址处设置硬件断点,接着在插件dll实现对被调试进程注入异常处理dll。当插件制作完成后,在调试器载入程序后,先使用该插件一键完成工作,然后恢复被调试进程的执行。此时即可针对预设空间中的恶意程序代码段下任意硬件断点并分析。85.下面对本申请实施例提供的一种恶意程序检测系统进行介绍,下文描述的恶意程序检测系统与上文描述的一种恶意程序检测方法可相互对应参照。86.参见图2,图2为本申请实施例所提供的一种恶意程序检测系统的结构示意图,本申请还提供一种恶意程序检测系统,包括:87.获取模块100,用于获取待检测文件;88.代码确定模块200,用于确定所述待检测文件中的恶意程序代码段;89.代码复制模块300,用于在恶意程序的进程内存中申请预设空间,并将所述恶意程序代码段复制到所述预设空间;90.代码检测模块400,用于在所述预设空间利用硬件断点程序对所述恶意程序代码段进行检测。91.基于上述实施例,作为优选的实施例,代码确定模块200为用于利用调试器确定所述待检测文件中的恶意程序代码段的模块;92.其中,代码确定模块200包括:93.文件载入单元,用于将所述待检测文件载入所述调试器;94.区段确定单元,用于在所述调试器的内存布局窗口内确定标志性字符区段;95.代码段确定单元,用于根据所述标志性字符区段确定所述恶意程序代码段。96.基于上述实施例,作为优选的实施例,代码确定模块200为用于利用pe解析工具确定所述待检测文件中的恶意程序代码段的模块;97.其中,代码确定模块200包括:98.第一解析单元,用于利用所述pe解析工具确定所述待检测文件的选项头;99.第二解析单元,用于在所述选项头中确定映像基址和区段表;100.第三解析单元,用于根据所述区段表确定所述恶意程序代码段的相对虚拟地址偏移和虚拟大小;101.代码段地址和大小确定单元,根据所述映像基址和所述相对虚拟地址偏移确定所述恶意程序代码段的代码段地址,根据所述虚拟大小确定所述恶意程序代码段的代码段大小。102.基于上述实施例,作为优选的实施例,还包括:103.程序编写和植入模块,用于以shellcode形式或dll形式编写所述硬件断点程序,并向所述预设空间植入所述硬件断点程序。104.基于上述实施例,作为优选的实施例,程序编写模块包括:105.第一植入单元,用于若所述硬件断点程序为所述shellcode形式,以内存写入形式将所述硬件断点程序写至所述预设空间的内存中;106.第二植入单元,用于若所述硬件断点程序为所述dll形式,通过线程注入将所述硬件断点程序植入至所述预设空间。107.基于上述实施例,作为优选的实施例,还包括:108.插件生成模块,用于配置内存布局查询接口和进程信息查询接口,并基于所述内存布局查询接口和所述进程信息查询接口生成调试器插件。109.本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。110.本申请还提供了一种电子设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述电子设备还可以包括各种网络接口,电源等组件。111.说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例提供的系统而言,由于其与实施例提供的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。112.本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。113.还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1