基于Windows的远程线程检测方法、装置及系统与流程

未命名 08-29 阅读:231 评论:0

基于windows的远程线程检测方法、装置及系统
技术领域
1.本发明涉及远程线程检测技术领域,更为具体的,涉及一种基于windows的远程线程检测方法、装置及系统。


背景技术:

2.远程线程注入技术能实现在windows系统下进程的隐藏。其主要核心在于一个windows api函数createremotethread,通过它可以在另外一个进程中注入一个线程并执行。在提供便利的同时,正是因为如此,使得系统内部出现了安全隐患。
3.随着攻防技术的发展,对于一个windows系统来说,有效检测远程线程驻留是十分重要的。然而,由于黑客的攻击手段层出不穷,对于不断出现的新家族,以及病毒变种,现有方案无法解决,会导致正常进程被注入远程线程,加大发现与清理的难度。


技术实现要素:

4.本发明的目的在于克服现有技术的不足,提供一种基于windows的远程线程检测方法、装置及系统,可以有效的检测内存中是否有远程线程注入的问题,并减少对特征库的依赖,能够及时发现潜在的威胁等。
5.本发明的目的是通过以下方案实现的:
6.一种基于windows的远程线程检测方法,包括以下步骤:
7.根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况。
8.进一步地,所述根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,包括子步骤:
9.每个线程有个代码开始执行的内存地址,在包含该地址的一段内存区中,搜索是否存在pe标志,并且根据_mmvad数据结构中的字段值,来判断这片内存区是否由操作系统打开文件时创建的文件映射区对象。
10.进一步地,所述根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,具体包括子步骤:
11.s1:遍历操作系统中的线程,挂靠到所属的进程,并读取所属进程的_mmvad数据结构,找到线程执行所在内存区;
12.s2:判断线程执行所在内存区对象是否是正常打开文件而创建的。
13.进一步地,在步骤s1中,包括子步骤:
14.s11,通过驱动程序获取进程eprocess并遍历activeprocesslinks链表,找到需要处理的进程,获取到对应进程的eprocess后,获得其vadroot根结点并进行遍历vad树;
15.s12,把线程的执行地址与_mmvad中的起始地址startingvpn与结束地址
endingvpn形成的区间进行比对,如果目标地址在区间内,则表明找到线程执行所在内存区。
16.进一步地,在步骤s2中,所述判断线程执行所在内存区对象是否是正常打开文件而创建的,包括子步骤:
17.通过mmad数据结构,找到control_area结构,在control_area结构中有filepointer指针指向着文件对象,若为空,则代表着此内存区对象并不是操作系统正常打开且运行文件而创建的内存区对象;若不为空,则代表着此内存区对象是操作系统正常打开且运行文件而创建的内存区对象。
18.进一步地,远程线程执行的内存区包括两种情况:一种是通过跨进程申请的,另一种是调用loadlibrary函数时,操作系统为加载文件时创建的。
19.进一步地,_control_area结构的filepointer指向的是内存块对应的file_object对象,如果_file_object有效就能够得到对应文件的filename信息;如果没有filename的信息,则该内存区的创建判断为跨进程申请的。
20.进一步地,所述file_object对象的后3位置0。
21.一种基于windows的远程线程检测装置,包括处理器和存储器,在存储器中存储有程序,当程序被处理器加载时执行如上任一项所述的基于windows的远程线程检测方法。
22.一种基于windows的远程线程检测系统,包括如上所述的基于windows的远程线程检测装置。
23.本发明的有益效果包括:
24.本发明可以有效的检测内存中是否有远程线程注入的问题,并减少对特征库的依赖,能够及时发现潜在的威胁。
25.本发明可以有效的检测是否有被注入的远程线程,并减少对特征库的依赖,及时发现潜在的威胁,从而保证正常进程的执行,快速形成针对于远程线程注入的进程防护系统。
附图说明
26.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
27.图1为本发明实施例的方法检测流程示意图。
具体实施方式
28.本说明书中所有实施例公开的所有特征,或隐含公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合和/或扩展、替换。
29.术语解释
30.内存区对象(sectionobject):被称为文件映射对象,表示可以被两个或更多进程所共享的内存块,当两个进程对同一个内存区对象建立视图时,便发生了对内存区对象的共享。内存区对象是一种使用物理内存资源的方式,主要用于进程映像的加载,进程间共享
内存,文件映射,缓存管理等。
31.鉴于背景中的问题,本发明的发明人进一步分析后发现:
32.常用的系统注入手段有两种:一种是远程dll注入,另一种是远程代码注入。后者相对起来更加隐蔽,也更难被杀软检测。
33.section是内存映射的管理结构,内含segment。当文件的内容被映射到内存后,segment中的原型pte是指向即将被映射到内存中的文件页面在磁盘或者换页文件中的位置(偏移,类似linux管理被换出的交换页面)。
34.而controlarea也是一个管理结构,其后的subsection中有一pte类型指针,每个子内存区对象对应segment中的一段原型pte阵列。而mmvad本身就是记录进程地址空间分配情况,现在用于内存映射,当文件被映射到进程空间中,理所当然要用mmvad来管理。而controlarea则是联系这些结构的核心。
35.在现有技术中,通常采用设置hook createremotethread函数的方法来防止非法线程的注入。该方法能够在一定程度上防止远程线程的注入。但是存在如下缺点:hook技术存在一些固有的弊端,例如增加了系统对每个消息的处理使响应变慢;木马制造者可以反挂钩createremotethread函数,绕过hook,从而达到远程线程注入的目的。因此,使用挂钩createremotethread的技术不能完全杜绝远程线程的注入。
36.因此,为了解决上述技术问题,本发明构思中,通过线程执行所在内存区的特点,通过正常打开运行文件后内存区对象正常的状态,与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,可以有效的检测是否有被注入的远程线程,并减少对特征库的依赖,及时发现潜在的威胁,从而保证正常进程的执行,快速形成针对于远程线程注入的进程防护系统。
37.在本发明具体实施方式中,如图1所示,每个线程有个代码开始执行的内存地址,本发明方案在包含该地址的一段内存区中,搜索是否存在pe标志,并且根据_mmvad数据结构中的某些字段值,来判断这片内存区是否由操作系统打开文件时创建的文件映射区对象。由系统正常打开文件的映射区对象,与调用allocpage等系统调用函数分配的内存区对象,在某些细节方面是不一样的,借此来判断这片内存区是否是在创建远程线程前申请的一块内存。具体的,包括如下步骤:
38.步骤1:遍历操作系统中的线程,挂靠到所属的进程,并读取所属进程的_mmvad数据结构。
39.应用层进程会通过调用virtualalloc分配多个内存块,每个内存块包含1个或多个内存页。windows操作系统为了有效的管理这些内存块构建了一个avl二叉树,这个avl树就是vad树。应用层的每一个内存块(包含virtualalloc申请的私有的和mapping共享的)都对应一个vad树结点(结构体类型为_mmvad)。
40.本发明通过驱动程序获取进程eprocess并遍历activeprocesslinks链表找到需要处理的进程(通过断此链可以实现进程隐藏),获取到对应进程的eprocess后获得其vadroot根结点并进行遍历vad树。
41.接着,就可以把线程的执行地址,与结构中的起始地址(startingvpn)与结束地址(endingvpn)形成的区间进行比对,如果目标地址在区间内,就表明找到该内存块了。
42.步骤2:判断该内存区对象是否是正常打开文件而创建的
43.远程线程执行的内存区,有2种情况。一种是通过跨进程申请的,另一种是调用loadlibrary函数时,操作系统为加载文件时创建的。本发明能识别出2种类型的区别之处。
44.通过mmad数据结构,继而找到control_area结构,该结构中有filepointer指针指向着文件对象,若为空,则代表着此内存区对象并不是操作系统正常打开、运行文件而创建的内存区对象。
[0045]45._control_area结构的filepointer指向的是内存块对应的file_object对象(后3位需要置0),如果_file_object有效就可以得到对应文件的filename等信息。如果没有filename的信息,则该内存区的创建有极大的可能是跨进程申请的。需要说明的是,在本发明权利要求书中所限定的保护范围内,以下实施例均可以从上述具体实施方式中,例如公开的技术原理,公开的技术特征或隐含公开的技术特征等,以合乎逻辑的任何方式进行组合和/或扩展、替换。实施例1一种基于windows的远程线程检测方法,包括以下步骤:根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况。实施例2在实施例1的基础上,所述根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,包括子步骤:
[0046]
每个线程有个代码开始执行的内存地址,在包含该地址的一段内存区中,搜索是否存在pe标志,并且根据_mmvad数据结构中的字段值,来判断这片内存区是否由操作系统
打开文件时创建的文件映射区对象。
[0047]
实施例3
[0048]
在实施例1的基础上,所述根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,具体包括子步骤:
[0049]
s1:遍历操作系统中的线程,挂靠到所属的进程,并读取所属进程的_mmvad数据结构,找到线程执行所在内存区;
[0050]
s2:判断线程执行所在内存区对象是否是正常打开文件而创建的。
[0051]
实施例4
[0052]
在实施例3的基础上,在步骤s1中,包括子步骤:
[0053]
s11,通过驱动程序获取进程eprocess并遍历activeprocesslinks链表,找到需要处理的进程,获取到对应进程的eprocess后,获得其vadroot根结点并进行遍历vad树;
[0054]
s12,把线程的执行地址与_mmvad结构中的起始地址startingvpn与结束地址endingvpn形成的区间进行比对,如果目标地址在区间内,则表明找到线程执行所在内存区。
[0055]
实施例5
[0056]
在实施例3的基础上,在步骤s2中,所述判断线程执行所在内存区对象是否是正常打开文件而创建的,包括子步骤:
[0057]
通过mmad数据结构,找到control_area结构,在control_area结构中有filepointer指针指向着文件对象,若为空,则代表着此内存区对象并不是操作系统正常打开且运行文件而创建的内存区对象;若不为空,则代表着此内存区对象是操作系统正常打开且运行文件而创建的内存区对象。
[0058]
实施例6
[0059]
在实施例5的基础上,远程线程执行的内存区包括两种情况:一种是通过跨进程申请的,另一种是调用loadlibrary函数时,操作系统为加载文件时创建的。
[0060]
实施例7
[0061]
在实施例5的基础上,_control_area结构的filepointer指向的是内存块对应的file_object对象,如果_file_object有效就能够得到对应文件的filename信息;如果没有filename的信息,则该内存区的创建判断为跨进程申请的。
[0062]
实施例8
[0063]
在实施例5的基础上,所述file_object对象的后3位置0。
[0064]
实施例9
[0065]
一种基于windows的远程线程检测装置,包括处理器和存储器,在存储器中存储有程序,当程序被处理器加载时执行如实施例1~实施例8任一项所述的基于windows的远程线程检测方法。
[0066]
实施例10
[0067]
一种基于windows的远程线程检测系统,包括如实施例9所述的基于windows的远程线程检测装置。
[0068]
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬
件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
[0069]
根据本发明的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的方法。
[0070]
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现上述实施例中所述的方法。
[0071]
本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。
[0072]
上述技术方案只是本发明的一种实施方式,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施方式所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。
[0073]
除以上实例以外,本领域技术人员根据上述公开内容获得启示或利用相关领域的知识或技术进行改动获得其他实施例,各个实施例的特征可以互换或替换,本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

技术特征:
1.一种基于windows的远程线程检测方法,其特征在于,包括以下步骤:根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况。2.根据权利要求1所述的基于windows的远程线程检测方法,其特征在于,所述根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,包括子步骤:每个线程有个代码开始执行的内存地址,在包含该地址的一段内存区中,搜索是否存在pe标志,并且根据_mmvad数据结构中的字段值,来判断这片内存区是否由操作系统打开文件时创建的文件映射区对象。3.根据权利要求1所述的基于windows的远程线程检测方法,其特征在于,所述根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况,具体包括子步骤:s1:遍历操作系统中的线程,挂靠到所属的进程,并读取所属进程的_mmvad数据结构,找到线程执行所在内存区;s2:判断线程执行所在内存区对象是否是正常打开文件而创建的。4.根据权利要求3所述的基于windows的远程线程检测方法,其特征在于,在步骤s1中,包括子步骤:s11,通过驱动程序获取进程eprocess并遍历activeprocesslinks链表,找到需要处理的进程,获取到对应进程的eprocess后,获得其vadroot根结点并进行遍历vad树;s12,把线程的执行地址与_mmvad中的起始地址startingvpn与结束地址endingvpn形成的区间进行比对,如果目标地址在区间内,则表明找到线程执行所在内存区。5.根据权利要求3所述的基于windows的远程线程检测方法,其特征在于,在步骤s2中,所述判断线程执行所在内存区对象是否是正常打开文件而创建的,包括子步骤:通过mmad数据结构,找到control_area结构,在control_area结构中有filepointer指针指向着文件对象,若为空,则代表着此内存区对象并不是操作系统正常打开且运行文件而创建的内存区对象;若不为空,则代表着此内存区对象是操作系统正常打开且运行文件而创建的内存区对象。6.根据权利要求5所述的基于windows的远程线程检测方法,其特征在于,远程线程执行的内存区包括两种情况:一种是通过跨进程申请的,另一种是调用loadlibrary函数时,操作系统为加载文件时创建的。7.根据权利要求5所述的基于windows的远程线程检测方法,其特征在于,_control_area结构的filepointer指向的是内存块对应的file_object对象,如果_file_object有效就能够得到对应文件的filename信息;如果没有filename的信息,则该内存区的创建判断为跨进程申请的。8.根据权利要求5所述的基于windows的远程线程检测方法,其特征在于,所述file_object对象的后3位置0。9.一种基于windows的远程线程检测装置,其特征在于,包括处理器和存储器,在存储器中存储有程序,当程序被处理器加载时执行如权利要求1~8任一项所述的基于windows的远程线程检测方法。
10.一种基于windows的远程线程检测系统,其特征在于,包括如权利要求9所述的基于windows的远程线程检测装置。

技术总结
本发明公开了一种基于Windows的远程线程检测方法、装置及系统,属于远程线程检测领域,包括步骤:根据线程执行所在内存区的特点,通过正常打开运行文件后所在内存区对象正常的状态与远程线程注入后的状态的差异,来启发式检测是否存在远程线程的情况。本发明可以有效检测内存中是否有远程线程注入的问题,并减少对特征库的依赖,能够及时发现潜在的威胁。能够及时发现潜在的威胁。能够及时发现潜在的威胁。


技术研发人员:王强 黄兴 刘飞 李国臣 罗骏 黄云婷 宋斌 李振强 顾春晖 曹永辉
受保护的技术使用者:中国电子科技集团公司第三十研究所
技术研发日:2023.04.25
技术公布日:2023/8/14
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐