[0001]
本申请涉及网络安全技术领域,尤其是涉及到一种防御漏洞攻击的方法及装置、存储介质、计算机设备。
背景技术:[0002]
近年来,内网安全事件频繁发生,企业或组织内部重要数据或敏感数据丢失,对政府、企业造成的损失和影响是十分严重的。为防止漏洞攻击对用户终端或网站服务器造成不良影响,现有技术中主要通过漏洞检测的方式查找应用程序或操作系统的漏洞,并对查找到的漏洞进行修复,防止黑客基于未修补的漏洞进行攻击。一般情况下,漏洞检测可以分为对已知漏洞的检测和对未知漏洞的检测。已知漏洞的检测主要是通过安全扫描技术,检测系统是否存在已公布的安全漏洞;而未知漏洞检测的目的在于发现软件系统中可能存在但尚未发现的漏洞。现有的未知漏洞检测技术有源代码扫描、反汇编扫描、环境错误注入等。
[0003]
在上述防御漏洞攻击的方式中,攻击防御的原则是以修补漏洞为主,通过修补漏洞的方式减少黑客攻击的可能性。实际生活中,应用程序或者操作系统中的漏洞并无法被查找穷尽,伴随漏洞的修补可能还会出现新的漏洞。因此这种防御方式较为被动。此外,随着黑客技术的不断提升,漏洞攻击的自动化程度及攻击速度日渐提升,如若在产生漏洞攻击后再进行编写补丁、打补丁等操作处理,那么漏洞攻击早已在较大范围内实现了广泛传播,殃及更多的用户终端或服务器。因此,如何设计出一种快速、高效的攻击防御机制,在漏洞攻击产生后对其进行及时防御,就成为摆放在本领域技术人员眼前的一道难题。
技术实现要素:[0004]
有鉴于此,本申请提供了一种防御漏洞攻击的方法及装置、存储介质、计算机设备,能够实现即使网站存在漏洞,也能够保证该漏洞无法被利用实现网站攻击,起到安全防护作用。
[0005]
根据本申请的一个方面,提供了一种防御漏洞攻击的方法,其特征在于,包括:
[0006]
监控软件框架中的关键函数;
[0007]
当所述关键函数被调用时,通过钩子函数捕获调用所述关键函数的操作请求,并获取与所述操作请求对应的实际函数调用栈;
[0008]
若所述实际函数调用栈与所述操作请求对应的标准函数调用栈不一致,则拦截所述操作请求。
[0009]
具体地,所述获取与所述操作请求对应的实际函数调用栈之后,所述方法还包括:
[0010]
在关键函数标准操作调用白栈中查询与捕获到的所述操作请求相匹配的所述标准函数调用栈。
[0011]
具体地,所述获取与所述操作请求对应的实际函数调用栈,具体包括:
[0012]
查询所述关键函数标准操作调用白栈中是否包含捕获到的所述操作请求;
[0013]
若所述关键函数标准操作调用白栈包含捕获到的所述操作请求,则获取与所述操作请求对应的实际函数调用栈;
[0014]
若所述关键函数标准操作调用白栈不包含捕获到的所述操作请求,则拦截所述操作请求。
[0015]
具体地,所述监控语言解析器中的关键函数之前,所述方法还包括:
[0016]
通过所述钩子函数捕获至少一次调用所述关键函数的正常操作请求,并获取与所述正常操作请求对应的正常函数调用栈;
[0017]
根据所述正常操作请求以及对应的所述正常函数调用栈,建立所述关键函数标准操作调用白栈中。
[0018]
具体地,所述方法还包括:
[0019]
若所述实际函数调用栈与所述标准函数调用栈一致,则放行所述操作请求。
[0020]
根据本申请的另一方面,提供了一种防御漏洞攻击的装置,其特征在于,包括:
[0021]
监控模块,用于监控软件框架中的关键函数;
[0022]
实际调用栈获取模块,用于当所述关键函数被调用时,通过钩子函数捕获调用所述关键函数的操作请求,并获取与所述操作请求对应的实际函数调用栈;
[0023]
拦截模块,用于若所述实际函数调用栈与所述操作请求对应的标准函数调用栈不一致,则拦截所述操作请求。
[0024]
具体地,所述装置还包括:
[0025]
标准调用栈获取模块,用于获取与所述操作请求对应的实际函数调用栈之后,在关键函数标准操作调用白栈中查询与捕获到的所述操作请求相匹配的所述标准函数调用栈。
[0026]
具体地,所述实际调用栈获取模块,具体包括:
[0027]
白栈查询单元,用于查询所述关键函数标准操作调用白栈中是否包含捕获到的所述操作请求;
[0028]
实际调用栈获取单元,用于若所述关键函数标准操作调用白栈包含捕获到的所述操作请求,则获取与所述操作请求对应的实际函数调用栈;
[0029]
第一拦截单元,用于若所述关键函数标准操作调用白栈不包含捕获到的所述操作请求,则拦截所述操作请求。
[0030]
具体地,所述装置还包括:
[0031]
正常调用栈获取模块,用于监控语言解析器中的关键函数之前,通过所述钩子函数捕获至少一次调用所述关键函数的正常操作请求,并获取与所述正常操作请求对应的正常函数调用栈;
[0032]
白栈建立模块,用于根据所述正常操作请求以及对应的所述正常函数调用栈,建立所述关键函数标准操作调用白栈中。
[0033]
具体地,所述装置还包括:
[0034]
放行模块,用于若所述实际函数调用栈与所述标准函数调用栈一致,则放行所述操作请求。
[0035]
依据本申请又一个方面,提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述防御漏洞攻击的方法。
[0036]
依据本申请再一个方面,提供了一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述防御漏洞攻击的方法。
[0037]
借由上述技术方案,本申请提供的一种防御漏洞攻击的方法及装置、存储介质、计算机设备,监控软件框架中的关键函数,在发生关键函数调用时,对调用关键函数的操作请求的实际函数调用栈进行匹配,并在实际函数调用栈与预先设定的该操作请求所对应的标准函数调用栈不一致时,进行操作请求的拦截。本申请实施例能够实现攻击请求的拦截,即使网站存在漏洞,也能够保证该漏洞无法被利用实现网站攻击,起到安全防护作用。
[0038]
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
[0039]
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0040]
图1示出了本申请实施例提供的一种防御漏洞攻击的方法的流程示意图;
[0041]
图2示出了本申请实施例提供的另一种防御漏洞攻击的方法的流程示意图;
[0042]
图3示出了本申请实施例提供的一种防御漏洞攻击的装置的结构示意图;
[0043]
图4示出了本申请实施例提供的另一种防御漏洞攻击的装置的结构示意图。
具体实施方式
[0044]
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0045]
在本实施例中提供了一种防御漏洞攻击的方法,如图1所示,该方法包括:
[0046]
步骤101,监控软件框架中的关键函数。
[0047]
现如今开发网站大多都是采用框架进行开发,有固定的模式,底层功能都被封装进了框架中,开发人员只需要完成业务代码即可,因此,本申请实施例中,对软件开发框架中的关键函数进行监视,例如,java在进行反序列化时调用java.io.objectinputstream.resolveclass。
[0048]
需要说明的是,本申请实施例中主要针对于内网服务器的软件框架中关键函数的监控,关键函数主要是指与数据库访问操作请求、文件访问操作请求以及网络访问操作请求相关的调用函数,当然并不仅限于上述类型的函数,另外,可以同时对多个关键函数进行监控。
[0049]
另外,需要说明的是,本申请实施例可以用于对php、python、java等语言的基础架构的防御,具体可以监控语言解析器中的关键函数,语言解析器具体可以包括php语言解析器、python语言解析器以及java语言解析器。
[0050]
步骤102,当关键函数被调用时,通过钩子函数捕获调用关键函数的操作请求,并获取与操作请求对应的实际函数调用栈。
[0051]
当内网服务器检测到预先指定的关键函数被调用时,利用相应的钩子函数捕获调
用该关键函数的操作请求,在系统没有调用该函数、执行该请求之前,钩子程序就先捕获该消息,钩子函数先得到控制权,以便在对操作请求的安全性进行分析后,确定对该操作请求的处理方式,具体钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。
[0052]
另外,当钩子函数捕获到该关键函数被操作请求调用后,对该操作请求的执行流程进行收集,也即获取与该操作请求对应的实际函数调用栈,从而获知该请求调用的函数以及调用函数的顺序。
[0053]
步骤103,若实际函数调用栈与操作请求对应的标准函数调用栈不一致,则拦截操作请求。
[0054]
将实际函数调用栈与预先设定的正常的与该操作请求相应的标准函数调用栈进行比较,如果二者不一致,说明本次操作请求的执行流程与预先设定的正常执行流程有所偏差,本次请求若继续执行可能存在风险,此时应强制结束该操作请求的传递,即对本次操作请求进行拦截。由于漏洞攻击过程中通常是需要改变函数调用栈来实现的,因此通过对关键函数请求的函数调用栈进行标准匹配,即使开发网站存在漏洞,也可以避免网站漏洞受到攻击,实现漏洞攻击的安全防护。
[0055]
例如,在框架中实现反序列化功能,正常操作需要调用函数a、b、c,之后调用java.io.objectinputstream.resolveclass,但是通过反序列化漏洞对服务器进行攻击时,该操作的函数调用栈就变成了a、b、d之后调用java.io.objectinputstream.resolveclass,应用本申请实施例的方法,可以该攻击及时进行拦截,保护网站安全。
[0056]
通过应用本实施例的技术方案,监控软件框架中的关键函数,在发生关键函数调用时,对调用关键函数的操作请求的实际函数调用栈进行匹配,并在实际函数调用栈与预先设定的该操作请求所对应的标准函数调用栈不一致时,进行操作请求的拦截。本申请实施例能够实现攻击请求的拦截,即使网站存在漏洞,也能够保证该漏洞无法被利用实现网站攻击,起到安全防护作用。
[0057]
进一步的,作为上述实施例具体实施方式的细化和扩展,为了完整说明本实施例的具体实施过程,提供了另一种防御漏洞攻击的方法,如图2所示,该方法包括:
[0058]
步骤201,通过钩子函数捕获至少一次调用关键函数的正常操作请求,并获取与正常操作请求对应的正常函数调用栈。
[0059]
步骤202,根据正常操作请求以及对应的正常函数调用栈,建立关键函数标准操作调用白栈中。
[0060]
在本申请实施例中,为了分析实际操作请求是否是被恶意攻击产生的,在对关键函数进行监控之前,应预先确定关键函数的正常操作请求对应的标准函数调用栈,建立关键函数标准操作调用白栈,其中,关键函数标准操作调用白栈是对关键函数的多次正常调用操作行为相应的函数调用栈进行提取得到的。
[0061]
具体如步骤201和步骤202,可以由技术人员发起对关键函数进行调用的相关正常操作,通过hook技术(钩子函数)对调用关键函数的正常操作请求进行捕获,提取出该正常操作请求对应的函数调用栈,将该正常操作请求对应的函数调用栈作为该操作请求对应的标准函数调用栈,从而建立关键函数标准操作调用白栈,其中,关键函数标准操作调用白栈中保存有相应关键函数对应的标准操作请求及其相应的标准函数调用栈。
[0062]
本申请实施例可以对需要调用关键函数的多种正常操作请求所对应的标准函数调用栈进行收集,另外,关键函数也可以包括多个,从而在后续监控到相应的实际操作请求时将实际操作请求对应的实际函数调用栈与白栈中的标准函数调用栈进行比较,确定操作请求的处理方案。
[0063]
步骤203,监控软件框架中的关键函数。
[0064]
步骤204,当关键函数被调用时,通过钩子函数捕获调用关键函数的操作请求。
[0065]
建立关键函数标准操作调用白栈后,对软件框架中的关键函数进行监控,从而在关键函数被调用时进行捕获。
[0066]
步骤205,查询关键函数标准操作调用白栈中是否包含捕获到的操作请求。
[0067]
捕获到关键函数的调用操作请求时,在预先建立的关键函数标准操作调用白栈中查询该操作请求是否属于预先规定的标准操作请求。例如,反序列化操作需调用关键函数java.io.objectinputstream.resolveclass,该关键函数对应的标准操作调用白栈中存储有反序列化操作以及反序列化操作对应的函数调用栈,则在监控到关键函数java.io.objectinputstream.resolveclass被调用,并捕获到调用该关键函数的为反序列化请求时,可知改关键函数的标准操作调用白栈中包含该操作请求。
[0068]
步骤206,若关键函数标准操作调用白栈包含捕获到的操作请求,则获取与操作请求对应的实际函数调用栈。
[0069]
若捕获到的实际的操作请求属于关键函数标准操作调用白栈中记录的标准操作请求,说明该请求属于预先约定的可以调用该关键函数的标准操作请求,则应进一步获取该请求对应的实际函数调用栈,判断该操作请求是否为漏洞攻击,从而确定对该操作请求的处理方案。
[0070]
步骤207,若关键函数标准操作调用白栈不包含捕获到的操作请求,则拦截操作请求。
[0071]
而若捕获到的实际的操作请求不属于关键函数标准操作调用白栈中记录的标准操作请求,说明该操作请求不属于预先约定的可以调用该关键函数的标准操作请求,可能是对网站的漏洞攻击行为,则应将该操作请求进行拦截,阻止其进一步被执行,有助于对网站的漏洞攻击行为进行有效阻止,本申请实施例先对操作请求是否符合预先规定的标准操作请求进行判断,有助于提升漏洞攻击防护效果。
[0072]
步骤208,在关键函数标准操作调用白栈中查询与捕获到的操作请求相匹配的标准函数调用栈。
[0073]
步骤209,若实际函数调用栈与操作请求对应的标准函数调用栈不一致,则拦截操作请求。
[0074]
步骤210,若实际函数调用栈与标准函数调用栈一致,则放行操作请求。
[0075]
如果操作请求的实际函数调用栈与预先设定的安全的标准函数调用栈一致,说明此次请求为安全的请求,则可以放行此次请求。
[0076]
作为本申请的另一个实施例,在步骤209中,实际函数调用栈与操作请求对应的标准函数调用栈不一致时,还可以采用以下方案:
[0077]
步骤2091,查询关键函数调用黑栈中是否包含与操作请求对应的实际函数调用栈。
[0078]
获取实际的操作请求对应的实际函数调用栈后,还应在关键函数标准操作调用白栈中查询与该实际的操作请求相对应的标准函数调用栈。对比该实际函数调用栈与标准函数调用栈的一致性,若二者不一致,则说明该操作请求与原有记录在关键函数标准操作调用白栈中的标准操作请求的执行流程存在差异,可以进一步判断此次请求是否属于预先记录在关键函数调用黑栈中的攻击请求,具体来说,关键函数调用黑栈中预先存储了已知的对关键函数的攻击请求对应的函数调用栈,因此,应在关键函数调用黑栈中查询此次的操作请求对应的实际函数调用栈是否包含在关键函数调用黑栈中。
[0079]
步骤2092,若关键函数调用黑栈中包含实际函数调用栈,则拦截操作请求。
[0080]
如果此次请求的实际函数调用栈符合关键函数调用黑栈中的记录,说明此次请求属于攻击请求,若放行会对网站造成攻击,因此,应拦截此次的操作请求,避免网站攻击。
[0081]
步骤2093,若关键函数调用黑栈中不包含实际函数调用栈,则记录并上报实际函数调用栈。
[0082]
而如果此次请求的实际函数调用栈不符合关键函数调用黑栈中的记录,说明此次请求不属于已知的攻击请求,安全性未知,可以进一步上报由管理员或专家系统等对此次操作请求的安全性进行分析,故记录并上报此次的操作请求及其对应的实际函数调用栈,避免错误拦截。
[0083]
步骤2094,接收与上报的实际函数调用栈对应的请求处理反馈信息。
[0084]
管理员或专家系统根据上报的操作请求及其对应的实际函数调用栈进行分析后,可以对此次上报信息进行反馈,服务器可以接收相应的反馈信息,以便根据该反馈信息处理此次操作请求。
[0085]
步骤2095,若请求处理反馈信息为拦截操作请求,则拦截操作请求,并将实际函数调用栈加入至关键函数调用黑栈中。
[0086]
若接收到拦截此次操作请求的反馈信息,说明管理员或专家系统判断此次操作请求属于攻击请求,则根据接收到的反馈信息将此次操作请求进行拦截,阻止攻击行为,并且将该实际函数调用栈加入至关键函数调用黑栈中,以便下次网站遭受相同的攻击,能够根据该黑栈快速对攻击做出拦截,提升网站安全性和防护效率。
[0087]
通过应用本实施例的技术方案,预先对常用操作的函数调用栈进行收集形成关键函数标准操作调用白栈,当监控到关键函数被调用时,将调用操作请求对应的实际函数调用栈与白栈中的标准函数调用栈进行匹配,若二者一致则放行,否则进一步判断该实际函数调用栈是否与关键函数调用黑栈中已知的攻击请求相应的函数调用栈匹配,若匹配则直接拦截该操作请求,否则将其上报并根据反馈信息处理该操作请求,另外,在反馈信息为拦截时,将此次的实际函数调用栈加入至关键函数调用黑栈中。本申请不仅能够实现对攻击请求的拦截,即使网站存在漏洞也可以使漏洞无法被利用,阻止漏洞攻击,还可以实现对攻击请求的收集和归纳,提升攻击防护效率。
[0088]
进一步的,作为图1方法的具体实现,本申请实施例提供了一种防御漏洞攻击的装置,如图3所示,该装置包括:监控模块31、实际调用栈获取模块32、拦截模块33。
[0089]
监控模块31,用于监控软件框架中的关键函数;
[0090]
实际调用栈获取模块32,用于当关键函数被调用时,通过钩子函数捕获调用关键函数的操作请求,并获取与操作请求对应的实际函数调用栈;
[0091]
拦截模块33,用于若实际函数调用栈与操作请求对应的标准函数调用栈不一致,则拦截操作请求。
[0092]
在具体的应用场景中,如图4所示,装置还包括:标准调用栈获取模块34。
[0093]
标准调用栈获取模块34,用于获取与操作请求对应的实际函数调用栈之后,在关键函数标准操作调用白栈中查询与捕获到的操作请求相匹配的标准函数调用栈。
[0094]
在具体的应用场景中,如图4所示,实际调用栈获取模块32,具体包括:白栈查询单元321、实际调用栈获取单元322、第一拦截单元323。
[0095]
白栈查询单元321,用于查询关键函数标准操作调用白栈中是否包含捕获到的操作请求;
[0096]
实际调用栈获取单元322,用于若关键函数标准操作调用白栈包含捕获到的操作请求,则获取与操作请求对应的实际函数调用栈;
[0097]
第一拦截单元323,用于若关键函数标准操作调用白栈不包含捕获到的操作请求,则拦截操作请求。
[0098]
在具体的应用场景中,如图4所示,装置还包括:正常调用栈获取模块35、白栈建立模块36。
[0099]
正常调用栈获取模块35,用于监控语言解析器中的关键函数之前,通过钩子函数捕获至少一次调用关键函数的正常操作请求,并获取与正常操作请求对应的正常函数调用栈;
[0100]
白栈建立模块36,用于根据正常操作请求以及对应的正常函数调用栈,建立关键函数标准操作调用白栈中。
[0101]
在具体的应用场景中,如图4所示,装置还包括:放行模块37。
[0102]
放行模块37,用于若实际函数调用栈与标准函数调用栈一致,则放行操作请求。
[0103]
在具体的应用场景中,拦截模块33,具体包括:黑栈查询单元331、第二拦截单元332、上报单元333。
[0104]
黑栈查询单元331,用于若实际函数调用栈与操作请求对应的标准函数调用栈不一致,则查询关键函数调用黑栈中是否包含与操作请求对应的实际函数调用栈;
[0105]
第二拦截单元332,用于若关键函数调用黑栈中包含实际函数调用栈,则拦截操作请求;
[0106]
上报单元333,用于若关键函数调用黑栈中不包含实际函数调用栈,则记录并上报实际函数调用栈。
[0107]
在具体的应用场景中,如图4所示,装置还包括:反馈信息接收模块38、黑栈建立模块39。
[0108]
反馈信息接收模块38,用于接收与上报的实际函数调用栈对应的请求处理反馈信息;
[0109]
黑栈建立模块39,用于若请求处理反馈信息为拦截操作请求,则拦截操作请求,并将实际函数调用栈加入至关键函数调用黑栈中。
[0110]
需要说明的是,本申请实施例提供的一种防御漏洞攻击的装置所涉及各功能单元的其他相应描述,可以参考图1和图2中的对应描述,在此不再赘述。
[0111]
基于上述如图1和图2所示方法,相应的,本申请实施例还提供了一种存储介质,其
上存储有计算机程序,该程序被处理器执行时实现上述如图1和图2所示的防御漏洞攻击的方法。
[0112]
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
[0113]
基于上述如图1、图2所示的方法,以及图3、图4所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种计算机设备,具体可以为个人计算机、服务器、网络设备等,该计算机设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1和图2所示的防御漏洞攻击的方法。
[0114]
可选地,该计算机设备还可以包括用户接口、网络接口、摄像头、射频(radio frequency,rf)电路,传感器、音频电路、wi-fi模块等等。用户接口可以包括显示屏(display)、输入单元比如键盘(keyboard)等,可选用户接口还可以包括usb接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、wi-fi接口)等。
[0115]
本领域技术人员可以理解,本实施例提供的一种计算机设备结构并不构成对该计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0116]
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理和保存计算机设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与该实体设备中其它硬件和软件之间通信。
[0117]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现监控软件框架中的关键函数,在发生关键函数调用时,对调用关键函数的操作请求的实际函数调用栈进行匹配,并在实际函数调用栈与预先设定的该操作请求所对应的标准函数调用栈不一致时,进行操作请求的拦截。本申请实施例能够实现攻击请求的拦截,即使网站存在漏洞,也能够保证该漏洞无法被利用实现网站攻击,起到安全防护作用。
[0118]
本发明实施例提供了以下技术方案:
[0119]
1、一种防御漏洞攻击的方法,包括:
[0120]
监控软件框架中的关键函数;
[0121]
当所述关键函数被调用时,通过钩子函数捕获调用所述关键函数的操作请求,并获取与所述操作请求对应的实际函数调用栈;
[0122]
若所述实际函数调用栈与所述操作请求对应的标准函数调用栈不一致,则拦截所述操作请求。
[0123]
2、根据1所述的方法,所述获取与所述操作请求对应的实际函数调用栈之后,所述方法还包括:
[0124]
在关键函数标准操作调用白栈中查询与捕获到的所述操作请求相匹配的所述标准函数调用栈。
[0125]
3、根据2所述的方法,所述获取与所述操作请求对应的实际函数调用栈,具体包括:
[0126]
查询所述关键函数标准操作调用白栈中是否包含捕获到的所述操作请求;
[0127]
若所述关键函数标准操作调用白栈包含捕获到的所述操作请求,则获取与所述操作请求对应的实际函数调用栈;
[0128]
若所述关键函数标准操作调用白栈不包含捕获到的所述操作请求,则拦截所述操作请求。
[0129]
4、根据2或3所述的方法,所述监控语言解析器中的关键函数之前,所述方法还包括:
[0130]
通过所述钩子函数捕获至少一次调用所述关键函数的正常操作请求,并获取与所述正常操作请求对应的正常函数调用栈;
[0131]
根据所述正常操作请求以及对应的所述正常函数调用栈,建立所述关键函数标准操作调用白栈中。
[0132]
5、根据4所述的方法,所述方法还包括:
[0133]
若所述实际函数调用栈与所述标准函数调用栈一致,则放行所述操作请求。
[0134]
6、一种防御漏洞攻击的装置,包括:
[0135]
监控模块,用于监控软件框架中的关键函数;
[0136]
实际调用栈获取模块,用于当所述关键函数被调用时,通过钩子函数捕获调用所述关键函数的操作请求,并获取与所述操作请求对应的实际函数调用栈;
[0137]
拦截模块,用于若所述实际函数调用栈与所述操作请求对应的标准函数调用栈不一致,则拦截所述操作请求。
[0138]
7、根据6所述的装置,所述装置还包括:
[0139]
标准调用栈获取模块,用于获取与所述操作请求对应的实际函数调用栈之后,在关键函数标准操作调用白栈中查询与捕获到的所述操作请求相匹配的所述标准函数调用栈。
[0140]
8、根据7所述的装置,所述实际调用栈获取模块,具体包括:
[0141]
白栈查询单元,用于查询所述关键函数标准操作调用白栈中是否包含捕获到的所述操作请求;
[0142]
实际调用栈获取单元,用于若所述关键函数标准操作调用白栈包含捕获到的所述操作请求,则获取与所述操作请求对应的实际函数调用栈;
[0143]
第一拦截单元,用于若所述关键函数标准操作调用白栈不包含捕获到的所述操作请求,则拦截所述操作请求。
[0144]
9、根据7或8所述的装置,所述装置还包括:
[0145]
正常调用栈获取模块,用于监控语言解析器中的关键函数之前,通过所述钩子函数捕获至少一次调用所述关键函数的正常操作请求,并获取与所述正常操作请求对应的正常函数调用栈;
[0146]
白栈建立模块,用于根据所述正常操作请求以及对应的所述正常函数调用栈,建立所述关键函数标准操作调用白栈中。
[0147]
10、根据9所述的装置,所述装置还包括:
[0148]
放行模块,用于若所述实际函数调用栈与所述标准函数调用栈一致,则放行所述操作请求。
[0149]
11、一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现1至5中任一项所述的防御漏洞攻击的方法。
[0150]
12、一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现1至5中任一项所述的防御漏洞攻击的方法。
[0151]
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0152]
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。