一种利用栈相关寄存器检测软件漏洞的方法及装置与流程

文档序号:24754721发布日期:2021-04-21 00:14阅读:125来源:国知局
一种利用栈相关寄存器检测软件漏洞的方法及装置与流程

1.本发明涉及计算机信息安全领域,尤其涉及一种利用栈相关寄存器检测软件漏洞的方法及装置。


背景技术:

2.软件漏洞是指应用软件在逻辑设计上的缺陷或在编写时产生的错误,这个缺陷或错误可以被不法者或者电脑黑客利用,通过植入木马、病毒等方式来攻击或控制整个电脑,从而窃取用户电脑中的重要资料和信息,给用户带来损失。
3.现有的软件漏洞检测方法通常采用源代码扫描的方式,这种检测方法主要针对开放源代码的程序,通过检查程序中不符合安全规则的文件结构、命名规则、函数、堆栈指针等,进而发现程序中可能隐含的安全缺陷。这种漏洞分析技术需要熟练掌握编程语言,并预先定义出不安全代码的审查规则,通过表达式匹配的方法检查源程序代码。但是由于程序运行时是动态变化的,如果不考虑函数调用的参数和调用环境,不对源代码进行词法分析和语法分析,就没有办法准确地把握程序的语义,因此这种方法对使用者的专业技术水平要求极高,且不能发现程序动态运行过程中的安全漏洞,对漏洞的检测不全面。


技术实现要素:

4.为解决上述技术问题,本发明提出了一种利用栈相关寄存器检测软件漏洞的方法及装置,用以解决现有技术无法全面检测软件漏洞的技术问题。
5.根据本发明的第一方面,提供一种利用栈相关寄存器检测软件漏洞的方法,所述方法包括以下步骤:
6.步骤s1,在待检测软件的执行路径中设置检测点;
7.步骤s2,在待检测软件的线程运行到所述检测点时,获取所述线程对应的栈相关寄存器的值;
8.步骤s3,查询系统创建所述线程时设置的栈地址空间范围;
9.步骤s4,判断所述寄存器的值是否在所述地址空间范围内,如果判断结果为否,则所述待检测软件存在漏洞。进一步地,所述检测点为系统api的挂钩函数。
10.进一步地,在所述步骤s3中,查询到的所述栈地址空间范围包括:所述栈地址空间的最小值和最大值;
11.所述步骤s4中,判断所述寄存器的值是否在所述地址空间范围内,具体包括:将所述寄存器的值与所述栈地址空间的最小值和最大值比较,如果所述寄存器的值小于所述栈地址空间的最小值或者大于所述栈地址空间的最大值,则所述寄存器的值不在所述地址空间范围内。
12.进一步地,当所述待检测软件存在漏洞时,发出预警提示。
13.根据本发明第二方面,提供一种利用栈相关寄存器检测软件漏洞的装置,所述装置包括:
14.设置检测点模块,用于在待检测软件的执行路径中设置检测点;
15.获取模块,用于在待检测软件的线程运行到所述检测点时,获取所述线程对应的栈相关寄存器的值;
16.查询模块,用于查询系统创建所述线程时设置的栈地址空间范围;
17.判断模块,用于判断所述寄存器的值是否在所述地址空间范围内,如果判断结果为否,则所述待检测软件存在漏洞。
18.进一步地,所述检测点为系统api的挂钩函数。
19.进一步地,所述查询模块查询到的所述栈地址空间范围包括:所述栈地址空间的最小值和最大值;
20.所述判断模块进一步包括比较模块,用于将所述寄存器的值与所述栈地址空间的最小值和最大值进行比较,如果所述寄存器的值小于所述栈地址空间的最小值或者大于所述栈地址空间的最大值,则所述寄存器的值不在所述地址空间范围内。
21.进一步地,所述装置进一步包括预警模块,用于当所述待检测软件存在漏洞时,发出预警提示。
22.根据本发明第三方面,提供一种利用栈相关寄存器检测软件漏洞的系统,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如前所述的利用栈相关寄存器检测软件漏洞的方法。
23.根据本发明第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序用于由处理器加载并执行如前所述的利用栈相关寄存器检测软件漏洞的方法。
24.根据本发明的上述方案,能够获得以下技术效果:对漏洞的检测方式简单、高效,能够准确地检测软件漏洞,检测率更高且检出更加全面。
25.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
26.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
27.图1为本发明一个实施方式的利用栈相关寄存器检测软件漏洞的方法流程图;
28.图2为本发明一个实施方式的利用栈相关寄存器检测软件漏洞的装置结构框图。
具体实施方式
29.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
30.首先结合图1说明本发明一个实施方式的利用栈相关寄存器检测软件漏洞的方法流程图。如图1所示,所述方法包括以下步骤:
31.步骤s1,在待检测软件的执行路径中设置检测点;
32.在该步骤中,该检测点可以为系统api的挂钩函数。在一个优选的实施例中,在cpu架构是x86的windows系统中,该系统api的挂钩函数可以是ntdll!kifastsystemcall函数。在支持快速调用的cpu上,由于系统api调用最终都会调用ntdll!kifastsystemcall函数进入内核,因此当软件存在漏洞需要调用系统调用时,通过挂钩ntdll!kifastsystemcall函数进行系统调用,就可以在该检测点,对线程的栈相关寄存器的值作检测,从而可以准确地检测到软件漏洞的存在。
33.此外,该检测点还可以为windows系统中的virtualprotect、virutalprotectex、loadlibraryexa、loadlibraryexw、getprocaddress等函数。
34.步骤s2,在待检测软件的线程运行到所述检测点时,获取所述线程对应的栈相关寄存器的值;
35.该步骤中,如果是32位操作系统,则获取的是esp寄存器的值;如果是64位操作系统,则获取的是rsp寄存器的值。
36.步骤s3,查询系统创建所述线程时设置的栈地址空间范围;
37.该步骤中,设置栈地址空间范围的方法包括:设置栈地址空间的最小值和最大值;
38.步骤s4,判断所述寄存器的值是否在所述地址空间范围内,如果判断结果为否,则所述待检测软件存在漏洞。
39.该步骤中,将所述寄存器的值与所述栈地址空间的最小值和最大值比较,如果所述寄存器的值小于所述栈地址空间的最小值或者大于所述栈地址空间的最大值,则所述寄存器的值不在所述地址空间范围内,那么认为所述待检测软件存在漏洞。在这种情况下,则发出预警提示,从而用户可以根据不同的情况采取相应的防护措施。
40.由于在现有的漏洞利用过程中,通常采用替换栈相关寄存器的技术来绕过现有防护,因此本发明通过在待检测软件的执行路径设置监测点的方式,获取所述待检测软件线程的相关栈寄存器的值与系统设置的栈的地址空间范围进行比较,来判断是否发生了替换栈相关寄存器的软件漏洞利用行为,从而检测软件漏洞。
41.本发明实施例提供的漏洞检测方式简单、高效,能够准确地检测软件漏洞,检测率更高且检出更加全面。
42.本发明实施例进一步给出一种利用栈相关寄存器检测软件漏洞的装置,如图2所示,所述装置包括:
43.设置检测点模块,用于在待检测软件的执行路径中设置检测点;
44.获取模块,用于在待检测软件的线程运行到所述检测点时,获取所述线程对应的栈相关寄存器的值;
45.查询模块,用于查询系统创建所述线程时设置的栈地址空间范围;
46.判断模块,用于判断所述寄存器的值是否在所述地址空间范围内,如果判断结果为否,则所述待检测软件存在漏洞。
47.进一步地,所述检测点为系统api的挂钩函数。
48.进一步地,所述查询模块查询到的所述栈地址空间范围包括:所述栈地址空间的最小值和最大值;
49.所述判断模块进一步包括比较模块,用于将所述寄存器的值与所述栈地址空间的最小值和最大值进行比较,如果所述寄存器的值小于所述栈地址空间的最小值或者大于所
述栈地址空间的最大值,则所述寄存器的值不在所述地址空间范围内。
50.进一步地,所述装置进一步包括预警模块,用于当所述待检测软件存在漏洞时,发出预警提示。
51.本实施例中的利用栈相关寄存器检测软件漏洞的装置各功能模块所执行的功能与前述两个实施例中的利用栈相关寄存器检测软件漏洞方法的步骤相对应,在此不再赘述。
52.本发明实施例进一步给出一种利用栈相关寄存器检测软件漏洞的系统,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如前所述的利用栈相关寄存器检测软件漏洞的方法。
53.本发明实施例进一步给出一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序用于由处理器加载并执行如前所述的利用栈相关寄存器检测软件漏洞的方法。
54.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
55.在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
56.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
57.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
58.上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括计算机程序用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装windows、windows server、linux所有版本操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
59.以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1