一种恶意线程检测方法及系统与流程

文档序号:11134537阅读:355来源:国知局
一种恶意线程检测方法及系统与制造工艺

本发明涉及线程检测领域,尤其涉及一种恶意线程检测方法及系统。



背景技术:

随着科学技术的发展,计算机已经成为人们生活中必不可少的日常用品。无论是工作、学习还是娱乐,计算机都给人们提供了很多的便利。但是,会有不法分子通过线程注入技术破坏我们的计算机系统,窃取计算机中的重要数据,破解受合法保护的软件产品和游戏作弊等,我们将上述对计算机系统造成损害或对计算机使用者的权益造成损害的外部线程称为恶意线程。因此,需要及时检测出恶意线程并进行拦截。

现有技术中,已存在使用HOOK技术挂钩线程初始化函数,当系统调用线程初始化函数时,转向伪线程初始化函数,所述伪线程初始化函数可先对待初始化线程进行检测,若检测到待初始化线程为恶意线程,则不创建该线程并返回警报信息,否则调用初始化函数创建该线程。但是,可通过PCHunter工具检测到上述方法中的挂钩位置,使得不法分子可定位到挂钩位置从而做出相应的应对策略。



技术实现要素:

本发明所要解决的技术问题是:提供一种恶意线程检测方法及系统,实现可检测恶意线程的同时隐藏检测的位置。

为了解决上述技术问题,本发明采用的技术方案为:

本发明提供一种恶意线程检测方法,包括:

获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

获取所述第一函数的入口地址,得到第二地址;

设置所述中转指针的地址为所述第二地址;

设置所述第一函数的函数指针指向所述第一地址。

本发明还提供一种恶意线程检测系统,包括:

第一获取模块,用于获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设模块,用于预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

第二获取模块,用于获取所述第一函数的入口地址,得到第二地址;

第一设置模块,用于设置所述中转指针的地址为所述第二地址;

第二设置模块,用于设置所述第一函数的函数指针指向所述第一地址。

本发明的有益效果在于:通过调换中转指针和第一函数的函数指针所指向的入口地址,实现在系统初始化线程之前,检测待测线程是否为恶意线程,若所述待测线程为恶意线程,则不初始化该线程,否则初始化该线程,有利于保护系统安全和计算机使用者的权益;其中,所述中转指针为线程在用户层和内核层间转换时的中转站,所述第一函数用于检测恶意线程和初始化线程;由于中转指针是所有函数都要经过的地址,以中转指针作为待测点可实现检测工具无法定位具体的待测点,从而避免了不法分子针对待测点做出相对应的操作破坏计算机的系统安全及计算机使用者的权益。

附图说明

图1为本发明一种恶意线程检测方法的流程框架;

图2为本发明一种恶意线程检测方法的结构框图;

图3为PCHunter检测工具检测挂钩位置的示意图;

图4为PCHunter检测工具检测挂钩位置的另一示意图;

标号说明:

1、第一获取模块;2、预设模块;3、第二获取模块;4、第一设置模块;5、第二设置模块。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

本发明最关键的构思在于:通过调换中转指针和第一函数的函数指针所指向的入口地址,实现在系统初始化线程之前,检测待测线程是否为恶意线程;其中,所述中转指针为线程在用户层和内核层间转换时的中转站,所述第一函数用于检测恶意线程和初始化线程。

如图1所示,本发明提供一种恶意线程检测方法,包括:

获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

获取所述第一函数的入口地址,得到第二地址;

设置所述中转指针的地址为所述第二地址;

设置所述第一函数的函数指针指向所述第一地址。

中转指针为线程在用户层和内核层间转换时的中转站,即内核级线程的创建和调用均必须先将线程地址暂存在中转指针中,然后再进行相应的线程初始化或调用操作;通过交换中转指针的地址和第一函数的函数指针所指向的入口地址,使得当系统调用中转指针时,中转指针的地址是第一函数的入口地址,因此,执行的是第一函数的函数体。第一函数先检测待初始化的线程是否为恶意线程,若不是,则继续初始化所述待初始化的线程。

进一步地,所述检测恶意线程具体为:

获取所述中转指针中存储的线程地址;

获取安全的地址空间;

判断所述线程地址是否在所述地址空间的范围内,若是,则初始化线程,否则,返回错误信息。

由上述描述可知,通过将待初始化的线程地址与安全的地址空间进行比较,可识别出待初始化的线程是否为恶意线程。

其中,所述安全的地址空间为系统中已知安全程序的地址空间,若待初始化的线程地址不属于安全的地址空间范围内,则待初始化的线程为外来线程,可能会对系统进行恶意攻击,因此为了保障计算机系统安全需要拦截恶意线程。

进一步地,所述检测恶意线程具体为:

获取所述中转指针中存储的线程地址;

获取系统函数的索引;

根据所述系统函数的索引和线程地址识别出线程所要执行的操作,得到当前操作名;

获取危险操作表;所述危险操作表中存储对创建所述线程的进程会造成损害的操作的名称;

在所述危险操作表中搜索是否存在所述当前操作名,若是,则返回错误信息,否则,初始化线程。

由上述描述可知,可通过分析待初始化线程的地址,识别出待初始化线程所要执行的操作,并拦截会对创建所述待初始化线程的进程造成损害的待初始化线程。

每个函数都有相应的索引号,通过调用索引号获取相应函数的入口地址实现调用函数。将函数的入口地址与特征库中记录的函数地址进行比较,识别出函数所能执行的操作。所述特征库中存储了系统中各个函数的入口地址及其相对应的操作。

进一步地,所述返回错误信息之前,还包括:

存储所述线程地址至黑名单;所述黑名单用于保存已识别的恶意线程的地址。

进一步地,所述检测恶意线程具体为:

获取所述中转指针中存储的线程地址;

获取黑名单;所述黑名单用于保存已识别的恶意线程的地址;

在所述黑名单中搜索是否存在所述线程地址,若存在,则返回错误信息,否则,初始化线程。

由上述描述可知,通过在保存有已识别的恶意线程地址的黑名单中搜索是否存在当前待初始化的恶意线程,可快速识别出恶意线程。

同一恶意线程攻击一般会出现多次,当检测到恶意线程时将其记录在黑名单中,有利于相同的恶意线程再次攻击计算机系统时,可以快速识别出恶意线程并及时拦截。

如图2所示,本发明还提供一种恶意线程检测系统,包括:

第一获取模块1,用于获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设模块2,用于预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

第二获取模块3,用于获取所述第一函数的入口地址,得到第二地址;

第一设置模块4,用于设置所述中转指针的地址为所述第二地址;

第二设置模块5,用于设置所述第一函数的函数指针指向所述第一地址。

进一步地,还包括:

第三获取模块,用于获取所述中转指针中存储的线程地址;

第四获取模块,用于获取安全的地址空间;

第一判断模块,用于判断所述线程地址是否在所述地址空间的范围内,若是,则初始化线程,否则,返回错误信息。

进一步地,还包括:

第五获取模块,用于获取所述中转指针中存储的线程地址;

第六获取模块,用于获取系统函数的索引;

识别模块,用于根据所述系统函数的索引和线程地址识别出线程所要执行的操作,得到当前操作名;

第七获取模块,用于获取危险操作表;所述危险操作表中存储对创建所述线程的进程会造成损害的操作的名称;

第一搜索模块,用于在所述危险操作表中搜索是否存在所述当前操作名,若是,则返回错误信息,否则,初始化线程。

进一步地,还包括:

存储模块,用于存储所述线程地址至黑名单;所述黑名单用于保存已识别的恶意线程的地址。

进一步地,还包括:

第八获取模块,用于获取所述中转指针中存储的线程地址;

第九获取模块,用于获取黑名单;所述黑名单用于保存已识别的恶意线程的地址;

第二搜索模块,用于在所述黑名单中搜索是否存在所述线程地址,若存在,则返回错误信息,否则,初始化线程。

本发明的实施例一为:

获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

获取所述第一函数的入口地址,得到第二地址;

设置所述中转指针的地址为所述第二地址;

设置所述第一函数的函数指针指向所述第一地址;

当系统初始化线程时,需获取中转指针中存储的线程地址,由于此时中转指针的地址为第一函数的入口地址,因此当系统调用中转指针时实际上执行第一函数的函数体;

获取所述中转指针中存储的线程地址;由于此时中转指针的地址为第一函数的入口地址,第一函数的函数指针所指向的入口地址为中转指针的地址,因此应通过调用第一函数的函数指针所指向的地址获取中转指针中存储的线程地址;

获取安全的地址空间;

判断所述线程地址是否在所述地址空间的范围内,若是,则初始化线程,否则,返回错误信息。

由上述描述可知,通过本实施例可实现拦截不属于安全地址空间的线程,且无法通过检测工具定位检测点。

优选地,可通过微软Hook库中封装好的函数DetourAttach()实现当系统调用中转指针时转向调用第一函数。

现有技术中,已存在使用HOOK技术挂钩线程初始化函数,当系统调用线程初始化函数时,转向伪线程初始化函数,所述伪线程初始化函数可先对待初始化线程进行检测,若检测到待初始化线程为恶意线程,则不创建该线程并返回警报信息,否则调用初始化函数创建该线程。但是,如图3所示可通过PCHunter工具检测到上述方法中的挂钩位置,使得不法分子可定位到挂钩位置从而做出相应的应对策略。如图4所示,当使用上述实施例检测恶意线程时,PCHunter工具无法检测到挂钩位置,只能检测到系统模块。

本发明的实施例二为:

获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

获取所述第一函数的入口地址,得到第二地址;

设置所述中转指针的地址为所述第二地址;

设置所述第一函数的函数指针指向所述第一地址;

当系统初始化线程时,需获取中转指针中存储的线程地址,由于此时中转指针的地址为第一函数的入口地址,因此当系统调用中转指针时实际上执行第一函数的函数体;

获取所述中转指针中存储的线程地址;由于此时中转指针的地址为第一函数的入口地址,第一函数的函数指针所指向的入口地址为中转指针的地址,因此应通过调用第一函数的函数指针所指向的地址获取中转指针中存储的线程地址;

获取系统函数的索引;

根据所述系统函数的索引和线程地址识别出线程所要执行的操作,得到当前操作名;

获取危险操作表;所述危险操作表中存储对创建所述线程的进程会造成损害的操作的名称;

在所述危险操作表中搜索是否存在所述当前操作名,若是,则返回错误信息,否则,初始化线程。

由上述描述可知,本实施例可实现拦截可执行对计算机系统造成损害的操作的线程,且无法通过检测工具定位检测点。

本发明的实施例三为:

获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

获取所述第一函数的入口地址,得到第二地址;

设置所述中转指针的地址为所述第二地址;

设置所述第一函数的函数指针指向所述第一地址;

当系统初始化线程时,需获取中转指针中存储的线程地址,由于此时中转指针的地址为第一函数的入口地址,因此当系统调用中转指针时实际上执行第一函数的函数体;

获取所述中转指针中存储的线程地址;由于此时中转指针的地址为第一函数的入口地址,第一函数的函数指针所指向的入口地址为中转指针的地址,因此应通过调用第一函数的函数指针所指向的地址获取中转指针中存储的线程地址;

获取黑名单;所述黑名单用于保存已识别的恶意线程的地址;

在所述黑名单中搜索是否存在所述线程地址,若存在,则返回错误信息,否则:

获取安全的地址空间;

判断所述线程地址是否在所述地址空间的范围内,若是,则初始化线程,否则,存储所述线程地址至黑名单,所述黑名单用于保存已识别的恶意线程的地址,返回错误信息。

由上述描述可知,本实施例先在黑名单中搜索是否存在待初始化线程,若存在,则直接返回错误信息判定待初始化线程为恶意线程,否则获取安全的地址空间,判断待初始化线程地址是否在所述安全的地址空间的范围内,若是,则初始化线程,否则判定待初始化线程为恶意线程并存储至黑名单中。可实现快速检测出已攻击过本计算机的恶意线程,拦截不属于安全地址空间的线程,且无法通过检测工具定位检测点。

本发明的实施例四为:

获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

获取所述第一函数的入口地址,得到第二地址;

设置所述中转指针的地址为所述第二地址;

设置所述第一函数的函数指针指向所述第一地址;

当系统初始化线程时,需获取中转指针中存储的线程地址,由于此时中转指针的地址为第一函数的入口地址,因此当系统调用中转指针时实际上执行第一函数的函数体;

获取所述中转指针中存储的线程地址;由于此时中转指针的地址为第一函数的入口地址,第一函数的函数指针所指向的入口地址为中转指针的地址,因此应通过调用第一函数的函数指针所指向的地址获取中转指针中存储的线程地址;

获取黑名单;所述黑名单用于保存已识别的恶意线程的地址;

在所述黑名单中搜索是否存在所述线程地址,若存在,则返回错误信息,否则:

获取系统函数的索引;

根据所述系统函数的索引和线程地址识别出线程所要执行的操作,得到当前操作名;

获取危险操作表;所述危险操作表中存储对创建所述线程的进程会造成损害的操作的名称;

在所述危险操作表中搜索是否存在所述当前操作名,若是,则存储所述线程地址至黑名单,所述黑名单用于保存已识别的恶意线程的地址,返回错误信息,否则,初始化线程。

由上述描述可知,本实施例先在黑名单中搜索是否存在待初始化线程,若存在,则直接返回错误信息判定待初始化线程为恶意线程,否则获取系统函数的索引,识别出待初始化线程可执行的操作,若所述操作会对计算机系统造成损害,则判定待初始化线程为恶意线程并存储至黑名单中,否则初始化待初始化线程。可实现,快速检测出已攻击过本计算机的恶意线程,拦截可执行对计算机系统造成损害的操作的线程,且无法通过检测工具定位检测点。

本发明的实施例五为:

第一获取模块获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设模块预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

第二获取模块获取所述第一函数的入口地址,得到第二地址;

第一设置模块设置所述中转指针的地址为所述第二地址;

第二设置模块设置所述第一函数的函数指针指向所述第一地址;

第三获取模块获取所述中转指针中存储的线程地址;

第四获取模块获取安全的地址空间;

第一判断模块判断所述线程地址是否在所述地址空间的范围内,若是,则初始化线程,否则,存储模块存储所述线程地址至黑名单;所述黑名单用于保存已识别的恶意线程的地址;返回错误信息。

本发明的实施例六为:

第一获取模块获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设模块预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

第二获取模块获取所述第一函数的入口地址,得到第二地址;

第一设置模块设置所述中转指针的地址为所述第二地址;

第二设置模块设置所述第一函数的函数指针指向所述第一地址;

第五获取模块获取所述中转指针中存储的线程地址;

第六获取模块获取系统函数的索引;

识别模块根据所述系统函数的索引和线程地址识别出线程所要执行的操作,得到当前操作名;

第七获取模块获取危险操作表;所述危险操作表中存储对创建所述线程的进程会造成损害的操作的名称;

第一搜索模块在所述危险操作表中搜索是否存在所述当前操作名,若是,则存储模块存储所述线程地址至黑名单;所述黑名单用于保存已识别的恶意线程的地址;返回错误信息,否则,初始化线程。

本发明的实施例七为:

第一获取模块获取中转指针的地址,得到第一地址;所述中转指针为线程在用户层和内核层间转换时的中转站;

预设模块预设第一函数;所述第一函数用于检测恶意线程和初始化线程;

第二获取模块获取所述第一函数的入口地址,得到第二地址;

第一设置模块设置所述中转指针的地址为所述第二地址;

第二设置模块设置所述第一函数的函数指针指向所述第一地址;

第八获取模块获取所述中转指针中存储的线程地址;

第九获取模块获取黑名单;所述黑名单用于保存已识别的恶意线程的地址;

第二搜索模块在所述黑名单中搜索是否存在所述线程地址,若存在,则返回错误信息,否则,初始化线程。

综上所述,本发明提供的一种恶意线程检测方法及系统,通过调换中转指针和第一函数的函数指针所指向的入口地址,实现在系统初始化线程之前,检测待测线程是否为恶意线程,若所述待测线程为恶意线程,则不初始化该线程,否则初始化该线程,有利于保护系统安全和计算机使用者的权益;其中,所述中转指针为线程在用户层和内核层间转换时的中转站,所述第一函数用于检测恶意线程和初始化线程;以中转指针作为待测点可实现检测工具无法定位具体的待测点,从而避免了不法分子针对待测点做出相对应的操作破坏计算机的系统安全及计算机使用者的权益;通过将待初始化的线程地址与安全的地址空间进行比较,可识别出待初始化的线程是否为恶意线程;可通过分析待初始化线程的地址,识别出待初始化线程所要执行的操作,并拦截会对创建所述待初始化线程的进程造成损害的待初始化线程;通过在保存有已识别的恶意线程地址的黑名单中搜索是否存在当前待初始化的恶意线程,可快速识别出恶意线程。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1