一种漏洞自动化利用方法、装置、电子设备及存储介质与流程

文档序号:35699835发布日期:2023-10-11 23:23阅读:25来源:国知局
一种漏洞自动化利用方法、装置、电子设备及存储介质与流程

本发明涉及漏洞识别与利用,尤其涉及一种漏洞自动化利用方法、装置、电子设备及存储介质。


背景技术:

1、在发现漏洞后需要构造测试用例进行漏洞的验证工作,但是目前软硬件程序的规模相当庞大,仅靠人工手动构造利用几乎是不可能的。考虑到安全漏洞存在较长的修复周期,研究者不可能对所有的漏洞都投入大量的人力与物力,所以漏洞的可利用性评估就显得至关重要。如何快速的自动识别漏洞并分析其可利用性成为当前漏洞挖掘与利用的关键问题之一。

2、随着软件开发技术的迭代升级,软件的复杂程度远超过去,在漏洞自动化利用方面,仍存在着许多问题。符号执行作为可以实现漏洞自动化利用的一种有效方法,是一种重要的形式化方法和软件分析技术。符号执行通过将输入符号化,在执行程序的同时收集路径条件,不可避免会产生路径爆炸的问题,严重影响漏洞自动化利用生成的效率。同时,现有的基于符号执行的漏洞自动化利用方法虽然能够解决漏洞自动化利用问题,但这些方法大多未考虑堆栈执行保护和地址随机化等因素带来的影响,只是考虑了简单条件下的漏洞利用模型,难以对抗复杂条件下的防护机制。因此,现有技术中存在漏洞利用效率较低的问题。


技术实现思路

1、本发明提供了一种漏洞自动化利用方法、装置、电子设备及存储介质,以至少解决相关技术中存在漏洞利用效率较低的问题。

2、根据本发明实施例的第一方面,提供了一种漏洞自动化利用方法,该方法包括:获取程序中可利用的危险函数;生成所述可利用的危险函数对应的漏洞约束;根据预设方式生成所述可利用的危险函数对应的利用约束;对所述漏洞约束和所述利用约束进行约束求解;判断约束求解是否成功,若约束求解成功则根据约束求解结果生成利用,若约束求解失败则获取程序中其他可利用的危险函数并生成对应的漏洞约束和利用约束进行约束求解,直至约束求解成功或程序中没有其他可利用的危险函数。

3、可选地,所述获取程序中可利用的危险函数,包括:获取程序中的危险函数,所述危险函数为程序中的标准输入函数;将所述危险函数加入至开放列表;获取并判断所述开放列表中的任一危险函数是否可利用;若所述任一危险函数可利用,将所述任一危险函数作为可利用的危险函数,获取所述可利用的危险函数;若所述任一危险函数不可利用,将所述任一危险函数从所述开放列表中删除,重复执行获取并判断所述开放列表中的任一危险函数是否可利用的步骤。

4、可选地,所述获取并判断所述开放列表中的任一危险函数是否可利用,包括:获取传入任一危险函数的参数的大小以及所述任一危险函数提供给所述参数的缓冲区大小;判断所述参数的大小是否大于所述缓冲区大小;若所述参数的大小大于所述缓冲区大小,所述任一危险函数可利用;若所述参数的大小小于等于所述缓冲区大小,所述任一危险函数不可利用。

5、可选地,所述根据预设方式生成所述可利用的危险函数对应的利用约束,包括:获取程序信息,所述程序信息包括程序采取的编译方式以及程序开启的安全缓解措施;若程序未开启安全缓解措施,根据预设方式生成可利用的危险函数对应的利用约束;若程序已开启安全缓解措施,采用代码复用技术根据所述编译方式、所述安全缓解措施以及预设方式生成可利用的危险函数对应的利用约束。

6、可选地,所述若程序已开启安全缓解措施,采用代码复用技术根据所述编译方式、所述安全缓解措施以及预设方式生成可利用的危险函数对应的利用约束,包括:当编译方式为静态编译时,获取可利用代码片段,对所述可利用代码片段进行拼接生成利用代码;根据所述利用代码以及预设方式生成利用约束;当程序编译方式为动态编译时,根据安全缓解措施对应的绕过方式以及预设方式生成利用约束。

7、可选地,所述安全缓解措施对应的绕过方式包括:当安全缓解措施为仅开启地址随机化时,将可利用的危险函数执行完成后的返回地址修改为跳板指令地址,其中,所述跳板指令为程序中用于动态定位的指令,所述跳板指令指向shellcode的起始地址;当安全缓解措施为仅开启堆栈不可执行时,调用动态链接库中的函数,获取所述动态链接库中的函数中的可利用代码片段,对所述可利用代码片段进行拼接生成利用代码。

8、可选地,所述安全缓解措施对应的绕过方式还包括:当安全缓解措施为开启地址随机化以及堆栈不可执行时,通过在程序中插入伪造的结构链表,获取库函数中的可利用代码片段,对所述可利用代码片段进行拼接生成利用代码。

9、根据本发明实施例的第二方面,还提供了一种漏洞自动化利用装置,该装置包括:获取模块,用于获取程序中可利用的危险函数;第一生成模块,用于生成所述可利用的危险函数对应的漏洞约束;第二生成模块,用于根据预设方式生成所述可利用的危险函数对应的利用约束;求解模块,用于对所述漏洞约束和所述利用约束进行约束求解;循环模块,用于判断约束求解是否成功,若约束求解成功则根据约束求解结果生成利用,若约束求解失败则获取程序中其他可利用的危险函数并生成对应的漏洞约束和利用约束进行约束求解,直至约束求解成功或程序中没有其他可利用的危险函数。

10、可选地,所述获取模块包括:第一获取单元,用于获取程序中的危险函数,所述危险函数为程序中的标准输入函数;存储单元,用于将所述危险函数加入至开放列表;判断单元,用于获取并判断所述开放列表中的任一危险函数是否可利用;第二获取单元,用于若所述任一危险函数可利用,将所述任一危险函数作为可利用的危险函数,获取所述可利用的危险函数;循环单元,用于若所述任一危险函数不可利用,将所述任一危险函数从所述开放列表中删除,重复执行获取并判断所述开放列表中的任一危险函数是否可利用的步骤。

11、可选地,所述判断单元包括:获取子模块,用于获取传入任一危险函数的参数的大小以及所述任一危险函数提供给所述参数的缓冲区大小;判断子模块,用于判断所述参数的大小是否大于所述缓冲区大小;第一比较子模块,用于若所述参数的大小大于所述缓冲区大小,所述任一危险函数可利用;第二比较子模块,用于若所述参数的大小小于等于所述缓冲区大小,所述任一危险函数不可利用。

12、可选地,所述第二生成模块包括:第三获取单元,用于获取程序信息,所述程序信息包括程序采取的编译方式以及程序开启的安全缓解措施;第一生成单元,用于若程序未开启安全缓解措施,根据预设方式生成可利用的危险函数对应的利用约束;第二生成单元,用于若程序已开启安全缓解措施,采用代码复用技术根据所述编译方式、所述安全缓解措施以及预设方式生成可利用的危险函数对应的利用约束。

13、可选地,所述第二生成单元包括:第一生成子模块,用于当编译方式为静态编译时,获取可利用代码片段,对所述可利用代码片段进行拼接生成利用代码;第二生成子模块,用于根据所述利用代码以及预设方式生成利用约束;第三生成子模块,用于当程序编译方式为动态编译时,根据安全缓解措施对应的绕过方式以及预设方式生成利用约束。

14、可选地,所述安全缓解措施对应的绕过方式包括:当安全缓解措施为仅开启地址随机化时,将可利用的危险函数执行完成后的返回地址修改为跳板指令地址,其中,所述跳板指令为程序中用于动态定位的指令,所述跳板指令指向shellcode的起始地址;当安全缓解措施为仅开启堆栈不可执行时,调用动态链接库中的函数,获取所述动态链接库中的函数中的可利用代码片段,对所述可利用代码片段进行拼接生成利用代码。

15、可选地,所述安全缓解措施对应的绕过方式还包括:当安全缓解措施为开启地址随机化以及堆栈不可执行时,通过在程序中插入伪造的结构链表,获取库函数中的可利用代码片段,对所述可利用代码片段进行拼接生成利用代码。

16、根据本发明实施例的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上存储的所述计算机程序来执行上述任一实施例中的漏洞自动化利用方法。

17、根据本发明实施例的第四方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的漏洞自动化利用方法。

18、在本发明实施例中,通过获取程序中可利用的危险函数;生成可利用的危险函数对应的漏洞约束;根据预设方式生成可利用的危险函数对应的利用约束;对漏洞约束和利用约束进行约束求解;判断约束求解是否成功,若约束求解成功则根据约束求解结果生成利用,若约束求解失败则获取程序中其他可利用的危险函数并生成对应的漏洞约束和利用约束进行约束求解,直至约束求解成功或程序中没有其他可利用的危险函数。由于自动化地获取可利用危险函数,并生成对应的漏洞约束和利用约束进行求解,然后根据求解结果生成利用,从而实现了漏洞自动化利用。避免了依靠人工手动构造利用,减少了漏洞利用的成本,提高了漏洞利用的效率,解决了相关技术中存在的漏洞利用效率较低的问题。

19、在本发明实施例中,通过获取并比较传入危险函数参数的大小以及危险函数提供给该参数的缓冲区大小,实现了自动分析危险函数可利用性以及减少使用符号执行探索无关路径的时间成本,在一定程度上缓解了符号执行技术存在的路径爆炸问题,提高了漏洞自动化利用效率。

20、在本发明实施例中,采用代码复用技术实现了自动化绕过程序中开启的漏洞缓解机制的目的,达到了在复杂条件下高效地自动化生成漏洞利用,提升了漏洞自动化利用的实用性。

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