一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于内存结构逆向分析的代码注入攻击取证检测方法与系统与流程

2022-12-20 02:05:57 来源:中国专利 TAG:
1.本发明涉及电子(数字)犯罪取证
技术领域
:,尤其涉及一种基于内存结构逆向分析的代码注入攻击取证检测方法与系统,特别适合于正在运行的基于windows不同版本操作系统的物理内存中新型代码注入攻击行为的检测与取证分析。
背景技术
::2.随着网络安全领域的攻防博弈,dll注入发展出了一系列新的变种技术,与经典的dll注入方法不同,新型dll注入攻击避免受害进程调用系统api加载恶意dll,使受害进程的加载模块链表(ldr)中没有注入dll的信息,而且可能篡改虚拟地址描述符(virtualaddressdescriptor,vad)的属性,实现了隐蔽注入恶意dll模块。新型dll注入的主要攻击目标是用户空间进程,注入的手段更加复杂与隐蔽。如stephen等提出的反射式注入技术(reflectivecodeinject)、mieleke等人提出的processhollowing技术,以及palutke等提出的vad重映射技术。而且,一些恶意软件使用了类似的攻击技术,如duqu2.0(2015)、dyre银行木马(2015)、conti勒索软件(2020)等,造成了广泛严重的危害,因此对新型dll注入攻击的检测十分重要。3.目前基于内存取证的注入页面检测方法主要关注虚拟内存空间,尤其依赖于vad的属性,在应对新型注入攻击时检测准确率低。如volatility和rekall的malfind插件检测vad的标签、私有状态和保护属性,但是该方法检测条件过于粗略,容易产生误检,并且无法检测如vad重映射等修改了vad保护属性的恶意代码;pshoul提出基于调用栈检测线程注入的方法,并开发了malthfind插件,srivastava等提出了类似的基于调用栈分析的注入检测方法,能检测修改了vad保护属性的注入技术,但是基于堆栈调用无法检测还未执行的隐蔽注入页面。cohen提出了在逻辑不连续的物理内存中匹配yara签名的方法,但是需要输入目标恶意软件的签名,无法检测未知的恶意软件;block等提出把pte的可执行属性作为可执行物理内存页面的特征,但是该方法会报告所有修改过的内存映射,包含了大量的良性内存页面,难以准确定位恶意内存页面。技术实现要素:4.针对现有方法对新型注入攻击的检测准确率较低的问题,本发明提供一种基于基于内存结构逆向分析的代码注入攻击取证检测方法与系统。5.第一方面,本发明提供一种基于内存结构逆向分析的代码注入攻击取证检测方法,包括:6.步骤1:对内存映像文件进行预处理,得到物理内存页面集合p;7.步骤2:基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;8.步骤3:逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;9.步骤4:根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;10.步骤5:逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;11.步骤6:比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。12.进一步地,步骤1具体包括:13.对内存映像文件进行解析后得到原始物理内存数据,按照4kb大小对所述原始物理内存数据进行分页管理,得到由若干个4kb内存页面组成的物理内存页面集合p。14.进一步地,步骤2具体包括:15.初始化dll代码模块物理内存页面集合pe,然后遍历物理内存页面集合p,将集合p中含有dll头部特征的内存页面全部加入至集合pe中,直至遍历完集合p中的所有内存页面,得到最终的集合pe。16.进一步地,步骤3具体包括:17.步骤3.1:在eprocess中搜索已知进程的名称,根据搜索结果构建eprocess结构;18.步骤3.2:采用_kuser_shared_data结构验证所构建的eprocess结构是否正确;若正确,执行步骤3.3;19.步骤3.3:从eprocess结构中读取进程的页表物理地址dtb值,进而由内存页表构建得到该进程的虚拟页面到物理页面的映射关系;20.步骤3.4:根据eprocess结构中的activeprocesslinks获取与其相邻的两个eprocess结构的虚拟地址;21.步骤3.5:根据已获取的进程的虚拟页面到物理页面的映射关系和相邻的两个eprocess结构的虚拟地址,构建得到相邻两个新的进程eprocess结构;22.步骤3.6:针对每个新的进程eprocess结构,返回执行步骤3.3至步骤3.5,直至遍历完成所有进程的eprocess结构,即可得到虚拟内存空间到物理内存空间的页面映射t。23.进一步地,步骤4具体包括:24.针对每个进程,根据进程的用户空间地址范围得到每个进程的用户空间页面集合;计算所有进程的用户空间页面集合的并集得到用户空间页面集合vu;25.遍历所有虚拟内存页面,针对每个虚拟内存面执行页面映射t转换页面,若转换后的页面属于dll代码模块物理内存页面集合pe,则将该虚拟内存页面加入至虚拟内存页面集合ve;遍历完成所有虚拟内存页面后即可得到最终的虚拟内存页面集合ve。26.进一步地,步骤5具体包括:27.针对每个进程,从其eprocess结构中读取peb的指针,然后找到ldr链表,读取链表项得到每个进程的ldr链表中dll代码模块虚拟内存页面集合vproc_l;28.计算所有进程的ldr链表中dll代码模块虚拟内存页面集合vproc_l的并集,即为dll代码模块虚拟内存页面集合vl。29.进一步地,步骤6具体为:v表示需要检测的虚拟内存页面。30.第二方面,本发明提供一种基于内存结构逆向分析的代码注入攻击取证检测系统,包括:31.预处理模块,用于对内存映像文件进行预处理,得到物理内存页面集合p;32.物理定位模块,用于基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;33.虚拟空间逆向构建模块,用于逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;以及用于逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;34.隐蔽页面识别模块,用于根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;以及用于比较虚拟内存页面集合ve、代码模块虚拟内存页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。35.第三方面,本发明提供一种电子设备,包括:存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述的方法,例如包括:对内存映像文件进行预处理,得到物理内存页面集合p;基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。36.第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述的方法,例如包括:对内存映像文件进行预处理,得到物理内存页面集合p;基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。37.本发明的有益效果:38.本发明提供的基于内存结构逆向分析的代码注入攻击取证检测方法与系统,首先从物理角度在内存映像中基于dll特征定位其对应的物理内存页面,设计了一种物理内存空间与虚拟内存空间映射算法,建立了映射关系t,实现了dll代码模块对应的物理页面子集逆向重建机制。然后从虚拟内存空间着手,逆向重建进程的ldr链表结构,并设计了一种dll虚拟页面子集逆向重建算法,实现了其虚拟空间重建。最后设计并实现了基于物理内存页面子集和虚拟空间页面子集的dll注入攻击隐蔽页面检测算法。本发明在检测过程中不使用vad结构,因此不受vad属性篡改攻击的影响。在实践中本发明由于更高的准确度,适合作为检测隐藏内存页的首选方法,以快速确定取证分析的调查方向。附图说明39.图1为本发明实施例提供的基于内存结构逆向分析的代码注入攻击取证检测方法的流程示意图;40.图2为本发明实施例提供的在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe的示意图;41.图3为现有的windows系统进程管理结构,仅列出本发明涉及的变量;42.图4为本发明实施例提供的在32位win7系统中构建eprocess结构的示意图;43.图5为本发明实施例提供的访问_kuser_shared_data结构验证系统版本假设的示意图;44.图6为本发明实施例提供的在32位win7系统中通过activeprocesslinks访问相邻进程的示意图;45.图7为本发明实施例提供的在32位win7系统中找到ldr链表中的代码模块虚拟地址得示意图;46.图8为本发明实施例提供的基于内存结构逆向分析的代码注入攻击取证检测系统的结构示意图;47.图9为本发明实施例提供的一种电子设备的结构示意图。具体实施方式48.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。49.新型dll注入攻击指恶意软件避免受害进程调用系统api加载恶意dll代码模块,使受害进程的加载模块链表(ldr)中没有注入dll的信息。代码注入攻击取证检测的目标是从物理内存映像中检测新型注入攻击的隐蔽dll代码模块。50.为了描述问题和方法,本发明做出如下形式化描述:51.记虚拟内存页面为vproc_addr,即一个虚拟内存页面v由进程和虚拟地址唯一确定;一个进程的虚拟空间记为vproc,其中属于用户空间的子集记为vpro_u,ldr链表中dll代码模块虚拟内存页面集合记为vproc_l;所有进程的虚拟内存页面构成集合v=∪procvproc,其中属于用户空间的子集记为vu,ldr链表中dll代码模块虚拟内存页面集合记为vl;52.记物理内存页面为paddr,即一个物理内存页面p由其物理地址唯一确定;所有物理内存页面构成集合p,dll代码模块所在的物理内存页面子集记为pe。虚拟内存空间到物理内存空间之间的转换关系记为映射t(v):v→p,虚拟内存中dll代码模块所在的内存页面集合记为ve,即集合pe的原像集合。53.正常情况下,用户空间加载的dll代码模块在对应进程的ldr链表中保存信息,即集合ve应满足当存在隐蔽dll注入时,注入dll页面集合记为vh,vh中的内存页面对ldr链表隐藏,因此vh可表示为54.实施例155.基于上述内容,本发明实施例提供了一种基于内存结构逆向分析的代码注入攻击取证检测方法,包括以下步骤:56.s101:对内存映像文件进行预处理,得到物理内存页面集合p;57.具体地,数据预处理的目的是从内存映像文件中读取原始物理内存数据。根据不同的内存映像格式需要不同的预处理,如微软的dmp格式崩溃转储文件在头部添加了元数据,剩下部分是原始的内存镜像;vmware虚拟机捕获的内存快照包含两个文件,其中vmem文件就是原始内存数据,vmsn文件包含了元数据。由encase取证工具获取的内存映像为ewf格式,元数据和压缩过的原始内存数据在同一个文件中,需要使用专门的工具解析。58.对内存映像文件进行解析后得到原始物理内存数据,操作系统一般按照4kb大小对内存分页管理,因此可以把原始物理内存数据作为4kb内存页面集合来处理,即构成物理内存页面集合p。59.s102:基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;60.具体地,dll文件是按照pe文件的通用格式组织的,无论是正常加载dll还是隐蔽注入的dll,都要在虚拟内存中申请内存页面,按照pe文件的格式分块加载,并且这些虚拟内存页面必须映射到物理内存中,dll模块才能够执行。61.dll头部代码模块小于4kb,在内存中会完整地加载到一个页面开头,特征字符串和相对偏移量都保持不变。虚拟内存映射到物理内存是整页映射的,因此pe头部在物理内存空间中也是不变的(如图2所示)。所以可以在物理内存页面集合p中直接搜索pe头部特征字符,定位所有包含dll头部特征的物理内存页面。即:初始化dll代码模块物理内存页面集合pe,然后遍历物理内存页面集合p,将集合p中含有dll头部特征的内存页面全部加入至集合pe中,直至遍历完集合p中的所有内存页面,得到最终的集合pe。62.本发明实施例还给出了相应的算法代码,如算法1所示:[0063][0064][0065]s103:逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;[0066]具体地,用户空间进程及其加载模块管理结构ldr链表存在于虚拟内存空间中(如图3所示),而现代操作系统普遍使用地址空间配置随机加载机制(aslr),使虚拟内存页面在物理内存中随机离散存储,只能通过页表把虚拟页面映射到物理页面以访问数据。所以逆向分析重建映像时,需要先找到进程eprocess结构,读取页表物理地址dtb的值,然后由内存页表构建虚拟页面到物理页面的映射关系t。其中,由页表构建页面映射的方法可以参考现有的研究工作,本发明不再赘述;本发明实施例重点设计了查找进程eprocess结构以及页表物理地址dtb的步骤。[0067]基于上述内容,本步骤包括以下子步骤:[0068]s1031:在eprocess中搜索已知进程的名称,根据搜索结果构建eprocess结构;[0069]具体地,根据现有的研究工作,windows内核每个版本中的结构基本不变,从winxp到win8.1版本中eprocess的结构布局只有10种,eprocess的结构是容易穷举的,因此可以搜索已知的进程名称来定位eprocess。[0070]s1032:采用_kuser_shared_data结构验证所构建的eprocess结构是否正确;若正确,执行步骤s1033;[0071]具体地,对每个eprocess构建结果,通过_kuser_shared_data结构验证系统版本的假设。_kuser_shared_data的虚拟地址在各个版本中均为7ffe0000,且必定存在物理内存页面映射,其中ntmajorversion和ntminorversion字段表示操作系统的主要版本和次要版本,两个值应该与假设的操作系统版本对应。[0072]s1033:从eprocess结构中读取进程的页表物理地址dtb值,进而由内存页表构建得到该进程的虚拟页面到物理页面的映射关系;[0073]s1034:根据eprocess结构中的activeprocesslinks获取与其相邻的两个eprocess结构的虚拟地址;[0074]具体地,eprocess的activeprocesslinks是双向链表,两个虚拟地址指针分别指向相邻两个eprocess的activeprocesslinks地址。[0075]s1035:根据已获取的进程的虚拟页面到物理页面的映射关系和相邻的两个eprocess结构的虚拟地址,构建得到相邻的两个新的进程eprocess结构;[0076]s1036:针对每个新的进程eprocess结构,返回执行步骤s1033至步骤s1035,直至遍历完成所有进程的eprocess结构,即可得到虚拟内存空间到物理内存空间的页面映射t。[0077]例如,以系统进程“smss.exe”为例,步骤如下:[0078](1)eprocess中imagefilename字段为进程名,长度至少为15个字节,于是对进程名字符串“smss.exe”末尾使用’\0’填充到15个字节,即得到十六进制字符串“736d73732e65786500000000000000”,在物理内存页面集合p中搜索该字符串。[0079](2)若已知操作系统版本,则eprocess结构唯一确定;若未知操作系统版本,对每个进程名搜索结果,构建所有可能的eprocess结构。如图4是假设操作系统是32位win7时,对一个进程名搜索结果构建的eprocess结构。[0080](3)假设操作系统是32位win7,对一个进程名搜索结果构建eprocess结构(如图4),读取dtb,根据32位系统的页表转换方法把_kuser_shared_data的虚拟地址0x7ffe0000转换到物理地址0x1e2010(如图5),读取ntmajorversion和ntminorversion字段的值分别为6和1,即系统内核版本为6.1,与32位win7相符,可判定该eprocess构建是正确的。然后可构建smss进程空间中所有虚拟页面到物理页面的映射关系t(vsmss):vsmss→psmss。[0081](4)如图6所示,0x3f2d0568是smss进程的起始物理地址,读取activeprocesslinks链表中前后两个链表项的虚拟地址并分别减去相对起始位置的偏移量,得到相邻两个eprocess的虚拟地址。由映射t(vsmss):vsmss→psmss得到虚拟地址0x86049d40对应的物理地址为0x3f249d40,构建新的eprocess结构,从其imagefilename字段知该进程为csrss,同时读取该进程的dtb为0x3f2d2060,据此可构建地址映射t(vcsrss):vcsrss→pcsrss。[0082](5)循环执行以上步骤直到遍历所有进程的eprocess,最终得到所有进程虚拟页面到物理页面的映射t(v):v→p。[0083]s104:根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;[0084]具体地,针对每个进程,根据进程的用户空间地址范围得到每个进程的用户空间页面集合;计算所有进程的用户空间页面集合的并集得到用户空间页面集合vu;[0085]例如,32位系统中进程的用户空间地址范围为0~0x7fffffff,64位系统中进程的用户空间地址范围是0~0x7ffffffffff。以进程“smss.exe”为例,根据地址范围直接得到smss进程的用户空间页面集合vsmss_u={vsmss_addr|addr《0x7fffffff}。同理得到其他进程的用户空间页面集合,所有进程用户空间内存页面集合vu=uprocvproc_u。[0086]遍历所有虚拟内存页面,针对每个虚拟内存面执行页面映射t转换页面,若转换后的页面属于dll代码模块物理内存页面集合pe,则将该虚拟内存页面加入至虚拟内存页面集合ve;遍历完成所有虚拟内存页面后即可得到最终的虚拟内存页面集合ve。[0087]具体地,操作系统为了节省物理内存占用,当同一个代码模块被多个进程使用时,会发生多个虚拟内存页面映射到同一个物理内存页面p的现象,所以映射t(v):v→p不存在逆映射。因此要找到物理内存页面p的原像只能遍历所有虚拟内存页面v并执行映射t(v)转换页面,遍历虚拟内存页面后得到代码模块物理页面对应的虚拟内存页面集合ve={v|t(v)∈pe}。[0088]s105:逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;[0089]具体地,针对每个进程,从其eprocess结构中读取peb的指针,然后找到ldr链表,读取链表项得到每个进程的ldr链表中dll代码模块虚拟内存页面集合vproc_l;[0090]计算所有进程的ldr链表中dll代码模块虚拟内存页面集合vproc_l的并集,即为dll代码模块虚拟内存页面集合vl。[0091]例如,仍以系统进程“smss.exe”为例,逆向重建进程的ldr链表结构获取vsmss_l的步骤如下:[0092]如图7所示,在32位win7系统的smss进程eprocess结构中读取peb的虚拟地址为0x7ffdd000,由映射t(v):v→p访问该虚拟地址的数据并构建peb结构,在peb中读取ldr的虚拟地址为0x773f7880。ldr结构中包含三个双向链表ininitializationordermodulelist、inmemoryordermodulelist、inloadordermodulelist。以ininitializationordermodulelist为例,该链表在ldr中偏移量为0xc,读取到相邻两个链表项的的虚拟地址为0x3b1790和0x3b1810。在该虚拟地址0x3b1790处构建_ldr_data_table_entry结构,读取代码模块的虚拟地址为0x484f0000,即vsmss_0x484f0000∈vsmss_l。_ldr_data_table_entry结构开头是相邻两个链表项的虚拟地址,由此可以遍历ininitializationordermodulelist链表。ldr中其他两个链表的结构具有相同的结构,可以按照同样的方法遍历并读取加载模块地址,最终得到vsmss_l。[0093]s106:比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。[0094]具体地,因为驱动模块与dll文件有相同的文件头特征,因此集合pe中包含了一部分驱动代码模块,但是驱动模块加载在虚拟内存的内核空间,并且不会出现在ldr链表中,检测时需要排除这些驱动模块所在页面。因此要得到用户空间代码模块虚拟内存页面集合vu∩ve。最后判断其中每个虚拟页面是否出现在集合vl中,如果不在vl中则该虚拟页面为隐蔽注入页面,即:v表示需要检测的虚拟内存页面。[0095]本发明实施例还提供了相应的算法代码,如算法2所示:[0096][0097][0098]本发明实施例提供的基于内存结构逆向分析的代码注入攻击取证检测方法,首先从物理角度在内存映像中基于dll特征定位其对应的物理内存页面,设计了一种物理内存空间与虚拟内存空间映射算法,建立了映射关系t,实现了dll代码模块对应的物理页面子集逆向重建机制。然后从虚拟内存空间着手,逆向重建进程的ldr链表结构,并设计了一种dll虚拟页面子集逆向重建算法,实现了其虚拟空间重建。最后设计并实现了基于物理内存页面子集和虚拟空间页面子集的dll注入攻击隐蔽页面检测算法。该方法在检测过程中不使用vad结构,因此不受vad属性篡改攻击的影响。在实践中本发明方法由于更高的准确度,适合作为检测隐藏内存页的首选方法,以快速确定取证分析的调查方向。[0099]实施例2[0100]对应上述的方法,如图8所示,本发明实施例还提供一种基于内存结构逆向分析的代码注入攻击取证检测系统,包括:预处理模块、物理定位模块、虚拟空间逆向构建模块和隐蔽页面识别模块;[0101]其中,预处理模块用于对内存映像文件进行预处理,得到物理内存页面集合p。物理定位模块用于基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe。虚拟空间逆向构建模块用于逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;以及用于逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl。隐蔽页面识别模块用于根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;以及用于比较虚拟内存页面集合ve、代码模块虚拟内存页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。[0102]需要说明的是,本发明实施例提供的系统是为了实现上述方法实施例的,其功能具体可参考上述方法实施例,此处不再赘述。[0103]图9为本发明实施例提供的电子设备的结构框图。如图9所示,该电子设备包括:存储器902和处理器901,所述处理器901和所述存储器902通过总线903完成相互间的通信;所述存储器902存储有可被所述处理器执行的程序指令,所述处理器901调用所述程序指令能够执行如下方法,例如包括:对内存映像文件进行预处理,得到物理内存页面集合p;基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。[0104]本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:对内存映像文件进行预处理,得到物理内存页面集合p;基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。[0105]本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:对内存映像文件进行预处理,得到物理内存页面集合p;基于dll特征在物理内存页面集合p中定位得到dll代码模块物理内存页面集合pe;逆向重建虚拟内存空间以构建虚拟内存空间到物理内存空间的页面映射t;根据页面映射t,计算用户空间页面集合vu并逆向查找得到物理内存页面集合pe对应的虚拟内存页面集合ve;逆向重建进程的ldr链表结构以获取dll代码模块虚拟内存页面集合vl;比较虚拟内存页面集合ve、用户空间页面集合vu和dll代码模块虚拟内存页面集合vl,得到隐蔽的注入dll代码模块虚拟内存页面集合vh。[0106]为验证本发明方法和系统的有效性和通用性,本发明还提供有下述实验。[0107]以新型代码注入攻击的windows系统物理内存映像文件为实验对象。选取了processhollowing、reflectivedll、vadremapping三种注入技术的poc,以及spyeye、cridex和zeus病毒作为测试样本,在不同版本的windows系统中运行后获取内存映像文件,如表1所示。[0108]对以上测试样本,将本发明方法同目前常用的检测方法(包括malfind、malthfind和ptemalfind)进行对比实验,结果如表2和表3所示,其中进程准确率计算方法为正确报告的注入进程数/总报告进程数;页面准确率计算方法为正确报告的注入页面数/总报告页面数。其中malthfind检测的目标是线程,因此本实验将该插件报告的调用代码模块所在的页面作为其报告的隐藏页面。[0109]表1实验样本[0110]序号样本名称系统版本1processhollowingwin7sp0x86,内存1gb2reflectivedllwin7sp0x86,内存1gb3spyeyewin7sp1x64,内存1gb4vadremappingwin10_1903,内存2gb5cridexwinxpsp2x86,内存512m6zeuswinxpsp2x86,内存512m[0111]表2进程准确率[0112]样本1样本2样本3样本4样本5样本6平均本发明方法100%100%100%100%100%100%100.0%malfind25%33.3%42.9%0%96%50%41.2%malthfind0%100%60%0%100%100%60.0%ptemalfind3.9%3.9%8.6%3.9%\\5.1%[0113]表3页面准确率[0114]样本1样本2样本3样本4样本5样本6平均本发明方法100%100%100%100%100%100%100.0%malfind20%25%40%0%79%17%30.2%malthfind0%100%60%0%100%100%60.0%ptemalfind0.1%0.1%0.2%0.1%\\0.1%[0115]需要说明的是样本2实验中,reflectivedll在注入时会先把载荷dll文件作为数据直接读取到内存中,然后再次申请内存空间,重新以可执行代码的模式映射载荷代码模块,所以内存中存在两个注入模块,一个是文件数据页面,另一个是可执行的内存页。由于注入的数据页面通常会被释放,因此只把可执行的内存页面作为检测目标页面计入准确率,但是本发明方法仍然可以发现注入的数据页面作为系统可能被攻击的迹象。[0116]malfind方法仅检测vad节点的私有属性、保护属性,检测条件粗略导致准确率不高。在样本4中,由于vad的属性被恶意篡改,导致malfind完全无法检测到注入页面。[0117]malthfind方法基于重建调用栈以发现未知的调用模块,在检测运行中的恶意注入页面时有较高的准确率,如样本2、5、6,但是无法检测到未执行的潜在注入页面,如样本3和4中,部分注入页面没有执行而不存在调用栈,因此无法检测到。[0118]ptemalfind对样本5、6无法运行,原因是winxp系统的pte结构中缺少ptemalfind检测需要的属性。同时发现该方法几乎可以检测到所有方法注入的内存页面,但是其准确率极低,导致在实践中难以应用。[0119]本发明方法对6个实验样本都能完全检测出隐藏的注入页面,且没有误报,弥补了现有方法的不足。实验结果表明,本发明所述方法的准确率高于现有方法,并且能够准确检测到vadremapping(样本4)技术注入的内存页面。[0120]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献