本发明实施例涉及网络技术领域,尤其涉及一种漏洞检测方法及装置。
背景技术:
随着互联网技术应用的越来越广泛,网络安全成也越来越受到重视,恶意攻击者通常会利用漏洞对网络系统进行攻击,因此进行必要的漏洞检测成为防护恶意攻击的重要手段。
目前主流的网络漏洞是由于攻击者输入的恶意参数未经安全过滤而引起的,现有技术中,通常采用动态代码检测技术对被测系统进行检测,如果某些关键函数直接使用了来自用户输入的参数,而没有经过安全过滤处理,即可以认为被测系统出现漏洞,但是这种方式容易出现误报,影响漏洞检测的准确性。
技术实现要素:
本发明实施例提供一种漏洞检测方法及装置,用以解决现有技术中漏洞检测存在误报、准确性较低技术问题。
本发明实施例的第一方面提供一种漏洞检测方法,包括:
监测输入被测系统的用户访问请求;
利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞;
如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供所述检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
可选地,所述用户访问参数发送步骤包括:
如果所述被测系统存在漏洞,重定向异常输出操作至所述检测服务器,以发送所述用户访问参数至所述检测服务器。
可选地,还包括:
如果所述被测系统存在漏洞,捕获所述被测系统当前运行状态的调用栈;
根据所述调用栈的调用信息获取漏洞相关信息;
将所述漏洞相关信息发送至所述检测服务器,以供所述检测服务器验证所述漏洞无误时,生成包括所述漏洞相关信息的漏洞提示信息。
本发明实施例的第二方面提供了一种漏洞检测方法,包括:
获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
可选地,所述验证步骤包括:
根据所述漏洞的漏洞特征,判断漏洞数据库中是否存在所述漏洞;
如果所述漏洞数据库中不存在所述漏洞,基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误;
所述方法还包括:
如果验证所述漏洞无误时,记录所述漏洞至所述漏洞数据库中。
本发明实施例的第三方面提供了一种漏洞检测装置,包括:
监测模块,用于监测输入被测系统的用户访问请求;
检测模块,用于利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞;
第一发送模块,用于如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供所述检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
可选地,所述发送模块具体用于如果所述被测系统存在漏洞,重定向异常输出操作至所述检测服务器,以发送所述用户访问参数至所述检测服务器。
可选地,还包括:
捕获模块,用于如果所述被测系统存在漏洞,捕获所述被测系统当前运行状态的调用栈;根据所述调用栈的调用信息获取漏洞相关信息;
第二发送模块,用于将所述漏洞相关信息发送至所述检测服务器,以供所述检测服务器验证所述漏洞无误时,生成包括所述漏洞相关信息的漏洞提示信息。
本发明实施例的第四方面提供了一种漏洞检测装置,包括:
参数获取模块,用于获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
验证模块,用于基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
可选地,所述验证模块包括:
判断单元,根据所述漏洞的漏洞特征,判断漏洞数据库中是否存在所述漏洞;
验证单元,用于如果所述判断单元判断所述漏洞数据库中不存在所述漏洞,基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误;
记录单元,用于如果所述验证单元验证所述漏洞无误时,记录所述漏洞至所述漏洞数据库中。
本发明实施例中,对于输入被测系统的用户访问请求,首先利用动态代码检测技术进行检测,以确定是否存在漏洞;在存在漏洞的情况下,调用黑盒测试工具进行验证,以验证所述漏洞是否有误,通过结合黑盒测试工具进行验证,可以有效避免漏洞误报的问题,提高了漏洞检测的准确性。
本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明实施例提供的一种漏洞检测方法一个实施例的流程图;
图2示出了本发明实施例提供的一种漏洞检测方法又一个实施例的流程图;
图3示出了本发明实施例提供的一种漏洞检测装置一个实施例的结构示意图;
图4示出了本发明实施例提供的一种漏洞检测装置又一个实施例的结构示意图;
图5示出了本发明实施例提供的一种电子设备一个实施例的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
在本发明的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
本发明技术方案主要用于web漏洞检测,例如被测系统可以是基于php的网站系统。
目前主流的web漏洞例如sql((structuredquerylanguage,结构化查询语言)注入、xss(crosssitescripting,跨站脚本攻击)等,是用于攻击者输入的恶意参数未经安全过滤而引起的。现有技术中,通常采用动态代码检测技术对被测系统进行检测,也即将用户输入参数设置污染标记,污染标记会随着赋值、函数调用等传递至相关变量中,只有调用了安全过滤函数,污染标记才会被清理。如果携带污染标记的用户输入参数未经过安全过滤处理,则即可以确定系统存在漏洞。
但是,发明人研究发现,目前业界公认的安全过滤函数是有限的,因此会存在很多误报情况,例如假设对于一个用户输入参数a,安全过滤函数限制其字符串最大长度为10,但是用户输入参数a可能包括双引号等标点符号,导致字符串长度超过10,经过安全过滤函数过滤会判定其为漏洞关键函数,系统存在漏洞,但是该用户输入参数a实际上并非漏洞关键参数,因此会出现漏洞误报;又如即便用户可以自定义过滤函数,但是动态代码检测技术并不会采用自定义过滤函数,因此也无法避免误报的情况。
为了解决漏洞检测出现误报的问题,发明人经过一系列研究提出本发明的技术方案,在本发明实施例中,对于输入被测系统的用户访问请求,首先利用动态代码检测技术进行检测,以确定是否存在漏洞;在存在漏洞的情况下,调用黑盒测试工具进行验证,以验证所述漏洞是否有误,通过结合黑盒测试工具进行验证,可以有效避免漏洞误报的问题,提高了漏洞检测的准确性。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的一种漏洞检测方法一个实施例的流程图,该方法可以包括以下几个步骤:
101:监测输入被测系统的用户访问请求。
被测系统可以是指网络端的服务器,例如网站服务器等。
其中,该用户访问请求可以是被测系统实际运行时接收到的来自真实访问用户的用户访问请求,该用户访问请求由真实访问用户通过客户端提交至被测系统。该用户访问请求还可以是被测系统处于测试阶段时通过模拟用户行为获得的测试用例。
其中,用户访问请求基于get、post或者cookie生成,该用户访问请求中包括用户输入参数,也即通过get、post或者cookie方式输入的内容。
102:利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞。
监测被测系统存在用户访问请求时,即采用动态代码检测技术检测被测系统是否存在漏洞。
可选地,该利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞可以包括:
获取用户输入参数;
为所述用户输入参数设置污染标记;所述污染标记跟随所述用户输入参数的调用处理传递至相关变量中;
如果携带所述污染标记的变量被关键函数调用且未经过安全过滤处理,确定存在漏洞。
只有调用了安全过滤函数,污染标记才会被清理。若污染标记未经过安全过滤而被关键函数调用,即表明被测系统存在漏洞。其中,关键函数例如可以包括exec、echo、mysqi、query等。
由于用户输入参数可能包括多个,并非全部参数都存在漏洞,通过动态代码检测技术可以确定其中导致漏洞的漏洞关键参数。
103:如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
由于利用动态代码检测技术进行漏洞检测,存在误报问题,将不存在漏洞的情况误报为存在漏洞。
因此,本发明实施例中,如果利用动态代码检测技术检测被测系统存在漏洞,即发送用户参数至检测服务器,由检测服务器调用黑盒测试工具进行漏洞验证,以确定漏洞是否有误,可以有效避免漏报误报问题。
用户访问参数中包括用户访问地址以及用户输入参数。该用户输入参数中包括漏洞关键参数。黑盒测试工具即具体利用漏洞关键参数,将其进行变体测试来验证漏洞是否有误。
黑盒测试工具是通过模仿用户行为生成测试用例,实现对被测系统进行检测,可以从用户角度证明漏洞的存在和利用方式,其无需了解被测系统的内部实现细节,通过猜测用户输入参数作为测试用例实现测试,利用黑盒测试工具不会出现误报问题。
黑盒测试工具也是目前主流的测试工具,但是黑盒测试工具进行测试,仅知道被测系统的用户访问地址,不了解被测系统的内部实现细节,需要通过猜测用户输入参数来完成测试,因此无法定位漏洞出现位置且测试量非常大,且由于很多系统隐藏接口需要特定输入才能正确运行,黑盒测试工具无法获知该特定输入,因此利用黑盒测试工具会存在漏报问题。
但是采用本发明技术方案,将动态代码技术与黑盒测试工具相结合,利用黑盒测试工具对通过动态代码检测技术确定出的漏洞进行验证,通过将用户访问参数提供给黑盒测试工具,黑盒测试工具基于该用户访问参数进行测试,用户访问参数为真实测试用例,无需猜测测试用例,因此即可以避免误报、漏报问题,且可以明确漏洞位置,降低黑盒测试量,实现漏洞有效检测,提高漏洞检测的准确性。
其中,为了实现检测服务器可以调用黑盒测试工具进行漏洞验证的操作,在某些实施例中,所述如果所述被测系统存在漏洞,发送用户访问参数至检测服务器可以包括:
如果所述被测系统存在漏洞,重定向异常输出操作至所述检测服务器,以发送所述用户访问参数至所述检测服务器。
将异常输出操作重定向至检测服务器,使得检测服务器获得系统控制权,从而可以将用户访问参数发送至检测服务器,由检测服务器基于用户访问参数验证所述漏洞是否有误。
其中,由上文描述可知,用户访问参数中可以包括用户访问地址以及用户输入参数。该用户访问参数可以通过被测系统的程序运行时的超全局变量获得。
超全局变量例如可以包括$_server、$_get、$_post、$_cookie等,通过超全局变量可以获得系统host(主机)地址,可以用于拼接用户访问的url地址,也即用户访问地址;通过超全局变量还可以获得通过get、post、cookie入口输入的用户输入参数。
此外,检测服务器还可以在验证所述漏洞无误时,生成漏洞提示信息。
为了方便测试人员更好的进行漏洞分析,在某些实施例中,如果所述被测系统存在漏洞时,所述方法还可以包括:
如果所述被测系统存在漏洞,捕获所述被测系统当前运行状态的调用栈;
根据所述调用栈的调用信息获取漏洞相关信息;
将所述漏洞相关信息发送至所述检测服务器,以供所述检测服务器验证所述漏洞无误时,生成包括所述漏洞相关信息的漏洞提示信息。
可选地该漏洞相关信息可以包括:
相关源码文件、当前执行位置、携带污染标记的变量、所述用户输入参数中导致所述漏洞的漏洞关键参数以及所述漏洞关键参数的污染链路等。
其中,调用栈中记录了从用户访问接口开始,至当前中断的位置结束,每一层的函数调用信息,可以包括函数名、类名、函数所在源码路径、代码行数、函数调用时的所有入参key/value(键/值)对、变量等信息。
通过分析调用栈即可以获得漏洞相关信息。该漏洞相关信息中,相关源码文件是指被测系统的程序源码;当前执行位置是指确定存在漏洞时的程序中断位置;携带污染标记的变量是指用户输入参数设置污染标记之后,污染标记随着赋值、函数调用而传递至的变量;污染链路是指漏洞关键参数经过层层调用,从输入到输出形成的数据流,根据污染链路可以清晰获知污染标记是如何传递的。
其中,漏洞提示信息中即可以包括该漏洞相关信息,此外还可以包括漏洞验证信息等。
此外,该漏洞相关信息中还可以包括漏洞类型;漏洞类型可以根据调用栈中的出口函数确定。例如,如果是出口函数为数据库query,则可以确定漏洞类型为sql注入漏洞。
从而检测服务器根据漏洞类型可以调用对应的黑盒测试工具。例如对于sql注入漏洞,可以采用以使用sqlmap(一种sql注入检测与辅助工具),其他类型漏洞可以采用awvs(acunetixwebvulnerabilityscanne,一种自动化的web应用程序安全测试工具)或手动脚本验证工具等。
在某些实施例在,结合所述调用栈的调用信息,还可以生成漏洞特征等。
漏洞特征用于唯一标识漏洞,其确定方式可以如下所述:
计算相关源码文件的摘要信息;
将所述相关源码文件的摘要信息、当前执行位置、函数名、类名拼接获得拼接字符串;由上文描述可知,相关源码文件以及当前执行位置可以根据调用栈记录的调用信息获得;函数名以及类名即为调用栈中的调用信息;
计算所述拼接字符串的摘要信息,作为漏洞特征。
其中,可以通过哈希(hash)运算计算摘要信息。
如果被测系统的源码发生改变,则摘要信息会发生变化,从而漏洞特征即发生变化。
由于已重定向异常输出操作至检测服务器,因此,可以还可以发送所述漏洞特征至检测服务器,基于漏洞特征,检测服务器可以首先检测漏洞数据库中是否存在所述漏洞特征,如果是则可以直接判定漏洞无误,否则再调用黑盒测试工具进行验证。
图2为本发明实施例提供的一种漏洞检测方法又一个实施例的流程图,本实施例技术方案应用于检测服务器中,该方法可以包括以下几个步骤:
201:获取动态代码检测组件发送的用户访问参数。
其中,所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的。
该动态代码检测组件嵌入被测系统中,其可以修改被测系统的入口代码、注册异常事件的重定向,以定向至检测服务器,从而可以将用户访问参数发送至检测服务器中。
其中,用户访问参数中可以包括用户访问地址以及用户输入参数;
用户访问地址可以为url(uniformresourcelocator,统一资源定位符)地址,用户输入参数为通过get、post或者cookie方式输入的内容。
用户访问地址以及用户输入参数可以通过分析被测系统程序运行时的超全局变量获得。
202:基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
由黑盒测试工具进行进一步的漏洞检测,可以验证所述漏洞是否有误;且通过将用户访问参数提供给黑盒测试工具,黑盒测试工具基于该用户访问参数进行测试,用户访问参数为真实测试用例,因此无需猜测测试用例,可以避免黑盒测试本身的漏报问题,且可以明确漏洞位置,实现漏洞有效监测。
在某些实施例中,所述基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误可以包括:
根据所述漏洞的漏洞特征,判断漏洞数据库中是否存在所述漏洞;
如果所述漏洞数据库中不存在所述漏洞,基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
其中、漏洞数据库中的存储了不同漏洞的漏洞特征,该不同漏洞的漏洞特征可以是预先配置或者历史记录的漏洞特征;因此,在某些实施例中,所述方法还可以包括:
如果验证所述漏洞无误时,记录所述漏洞至所述漏洞数据库中。
其中,漏洞特征可以结合被测系统当前运行状态的调用栈中的调用信息计算获得,可以参见上文描述,在此不再赘述。
用户访问参数中包括用户访问地址以及用户输入参数,在某些实施例中,所述基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误可以包括:
基于所述用户访问地址以及所述用户输入参数,调用黑盒测试工具模拟所述用户访问请求,并对所述用户输入参数中的漏洞关键参数进行变体测试,以确定所述漏洞是否有误。
其中,变体测试是指不仅对漏洞关键参数进行测试,还对漏洞关键参数的变体进行测试,以保证测试充分性以及准确度。
漏洞关键参数的变体例如可以是指在漏洞关键参数加入空格、括号或者引号等字符串。
在某些实施例中,虽然黑盒测试工具仅基于用户访问参数进行漏洞验证,用输入参数已知,测试用例已知,可以降低测试量,但是黑盒测试工具会针对漏洞关键参数进行变体测试,漏洞关键参数的变体可能也会包括多个,由于黑盒测试工具是通过模拟用户行为向被测系统发送测试用例,如果被测系统正在执行其他访问任务,黑盒测试工具进行漏洞验证就会影响被测系统的处理性能。
因此可选地,所述基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误可以包括:
在所述被测系统处于空闲状态时,基于所述用户访问参数调用黑盒测试工作验证所述漏洞是否有误。
其中,判断被测系统是否处于空闲状态可以有多种方式,例如在特定运行时刻时被测系统即处于空闲状态,因此可以具体是在被测系统处于特定运行时刻时,基于所述用户访问参数调用黑盒测试工作验证所述漏洞是否有误。还可以根据被测系统中访问任务的数量来确定被测系统是否处于空闲状态。
此外,在某些实施例中,所述方法还可以包括:
获取所述动态代码检测组件发送的漏洞相关信息;所述漏洞相关信息为所述动态代码组件根据所述被测系统当前运行状态的调用栈确定的;
如果验证所述漏洞无误,生成包括所述漏洞相关信息的漏洞提示信息。
漏洞提示信息可以通过邮件或者短消息等发送至测试人员,或者输出至显示界面以供测试人员查看。
因此在某些实施例中,生成漏洞提示信息之后,还可以包括:
发送所述漏洞提示信息至用户终端。用户终端也即可以是指测试人员使用的个人终端。
其中,漏洞提示信息还可以包括漏洞验证信息,以方便测试人员了解漏洞的证明过程等。
图3为本发明实施例提供的一种漏洞检测装置一个实施例的结构示意图,该装置在实际应用中可以形成一组件,配置于被测系统中。
该装置可以包括:
监测模块301,用于监测输入被测系统的用户访问请求.
检测模块302,用于利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞。
可选地,该检测模块可以包括:
参数获取单元,用于获取用户输入参数;
标记设置单元,用于为所述用户输入参数设置污染标记;所述污染标记跟随所述用户输入参数的调用处理传递至相关变量中;
漏洞检测单元,用于如果携带所述污染标记的变量被关键函数调用且未经过安全过滤处理,确定存在漏洞。
由于用户输入参数可能包括多个,并非全部参数都存在漏洞,通过动态代码检测技术可以确定其中导致漏洞的漏洞关键参数。
第一发送模块303,用于如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供所述检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
本发明实施例中,将动态代码技术与黑盒测试工具相结合,利用黑盒测试工具对通过动态代码检测技术确定出的漏洞进行验证,通过将用户访问参数提供给黑盒测试工具,黑盒测试工具基于该用户访问参数进行测试,用户访问参数为真实测试用例,无需猜测测试用例,因此即可以避免误报、漏报问题,且可以明确漏洞位置,降低黑盒测试量,实现漏洞有效检测,提高漏洞检测的准确性。
其中,为了实现检测服务器可以调用黑盒测试工具进行漏洞验证的操作,在某些实施例中,所述发送模块可以具体用于如果所述被测系统存在漏洞,重定向异常输出操作至所述检测服务器,以发送所述用户访问参数至所述检测服务器。
为了方便测试人员更好的进行漏洞分析,在某些实施例中,还装置还可以包括:
捕获模块,用于如果所述被测系统存在漏洞,捕获所述被测系统当前运行状态的调用栈;根据所述调用栈的调用信息获取漏洞相关信息;
第二发送模块,用于将所述漏洞相关信息发送至所述检测服务器,以供所述检测服务器验证所述漏洞无误时,生成包括所述漏洞相关信息的漏洞提示信息。
其中,调用栈中记录了从用户访问接口开始,至当前中断的位置结束,每一层的函数调用信息,可以包括函数名、类名、函数所在源码路径、代码行数、函数调用时的所有入参key/value(键/值)对、变量等信息。
通过分析调用栈即可以获得漏洞相关信息,所述漏洞相关信息可以包括相关源码文件、当前执行位置、携带污染标记的变量、所述用户输入参数中导致所述漏洞的漏洞关键参数以及所述漏洞关键参数的污染链路。
此外,该漏洞相关信息中还可以包括漏洞类型;漏洞类型可以根据调用栈中的出口函数确定。例如,如果是出口函数为数据库query,则可以确定漏洞类型为sql注入漏洞。此外,在某些实施例中,该装置还可以包括:
生成模块,用于结合所述调用栈的调用信息,生成漏洞特征;
第三发送模块,用于发送所述漏洞特征至检测服务器,以供所述检测服务器根据所述漏洞的漏洞特征,判断漏洞数据库不存在所述漏洞时,再调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
其中,所述生成模块可以具体用于:
计算相关源码文件的摘要信息;
将所述相关源码文件的摘要信息、当前执行位置、函数名、类名拼接获得拼接字符串;由上文描述可知,相关源码文件以及当前执行位置可以根据调用栈记录的调用信息获得;函数名以及类名即为调用栈中的调用信息;
计算所述拼接字符串的摘要信息,作为漏洞特征。
其中,可以通过哈希(hash)运算计算摘要信息。
由于已重定向异常输出操作至检测服务器,因此,可以还可以发送所述漏洞特征至检测服务器,基于漏洞特征,检测服务器可以首先检测漏洞数据库中是否存在所述漏洞特征,如果是则可以直接判定漏洞无误,否则再调用黑盒测试工具进行验证。
图4为本发明实施例提供的一种漏洞检测装置又一个实施例的结构示意图,该装置可以包括:
参数获取模块401,用于获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
验证模块402,用于基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
在某些实施例中,该验证模块可以包括:
判断单元,根据所述漏洞的漏洞特征,判断漏洞数据库中是否存在所述漏洞;
验证单元,用于在所述判断单元判断所述漏洞数据库中不存在所述漏洞,基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
其中、漏洞数据库中的存储了不同漏洞的漏洞特征,该不同漏洞的漏洞特征可以是预先配置或者历史记录的漏洞特征;因此,在某些实施例中,所述验证模块还可以包括:
记录单元,用于如果验证所述漏洞无误时,记录所述漏洞至所述漏洞数据库中。
用户访问参数中包括用户访问地址以及用户输入参数,在某些实施例中,所述验证模块具体用于基于所述用户访问地址以及所述用户输入参数,调用黑盒测试工具模拟所述用户访问请求,并对所述用户输入参数中的漏洞关键参数进行变体测试,以确定所述漏洞是否有误。
其中,变体测试是指不仅对漏洞关键参数进行测试,还对漏洞关键参数的变体进行测试,以保证测试充分性以及准确度。
漏洞关键参数的变体例如可以是指在漏洞关键参数加入空格、括号或者引号等字符串。
在某些实施例中,为了不影响被测系统的处理性能,所述验证模块可以具体用于在所述被测系统处于空闲状态时,基于所述用户访问参数调用黑盒测试工作验证所述漏洞是否有误。
此外,在某些实施例中,该装置还可以包括:
信息获取模块,用于获取所述动态代码检测组件发送的漏洞相关信息;所述漏洞相关信息为所述动态代码组件根据所述被测系统当前运行状态的调用栈确定的;
信息生成模块,用于如果验证所述漏洞无误,生成包括所述漏洞相关信息的漏洞提示信息。
漏洞提示信息可以通过邮件或者短消息等发送至测试人员,或者输出至显示界面以供测试人员查看。
因此在某些实施例中,该装置还可以包括:
提示触发模块,用于发送所述漏洞提示信息至用户终端。
其中,漏洞提示信息还可以包括漏洞验证信息,以方便测试人员了解漏洞的证明过程等。
在一个可能的设计中,图3所示实施例的漏洞检测装置在实际应用中可以实现为一个组件,因此本发明实施例还提供了一种组件,所述组件配置于被测系统中,用于执行如下操作:
监测输入被测系统的用户访问请求;
利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞;
如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供所述检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
此外,本发明实施例还提供了一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时可以实现上述图1所示实施例漏洞检测方法。
在又一个可能的设计中,图4所示实施例的漏洞检测装置在实际应用中可以实现为电子设备,如图5中所示,该电子设备可以包括一个或多个处理器501以及一个或多个存储器502;
其中,所述一个或多个存储器502一条或多条计算机指令,其中,所述一条或多条计算机指令供所述一个或多个处理器501调用执行。
所述一个或多个处理器501可以用于:
获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
此外,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序;
所述计算机程序使计算机执行时可以实现如图2所示实施例的漏洞检测方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
本发明公开了a1、一种漏洞检测方法,包括:
监测输入被测系统的用户访问请求;
利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞;
如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供所述检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
a2、根据a1所述的方法,所述用户访问参数发送步骤包括:
如果所述被测系统存在漏洞,重定向异常输出操作至所述检测服务器,以发送所述用户访问参数至所述检测服务器。
a3、根据a1所述的方法,所述利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞包括:
获取用户输入参数;
为所述用户输入参数设置污染标记;所述污染标记跟随所述用户输入参数的调用处理传递至相关变量中;
如果携带所述污染标记的变量被关键函数调用且未经过安全过滤处理,确定存在漏洞。
a4、根据a1所述的方法,还包括:
如果所述被测系统存在漏洞,捕获所述被测系统当前运行状态的调用栈;
根据所述调用栈的调用信息获取漏洞相关信息;
将所述漏洞相关信息发送至所述检测服务器,以供所述检测服务器验证所述漏洞无误时,生成包括所述漏洞相关信息的漏洞提示信息。
a5、根据a4所述的方法,所述漏洞相关信息包括相关源码文件、当前执行位置、携带污染标记的变量、所述用户输入参数中导致所述漏洞的漏洞关键参数以及所述漏洞关键参数的污染链路。
a6、根据a4所述的方法,还包括:
结合所述调用栈的调用信息,生成漏洞特征;
发送所述漏洞特征至检测服务器,以供所述检测服务器根据所述漏洞的漏洞特征,判断漏洞数据库不存在所述漏洞时,再调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
b7、一种漏洞检测方法,包括:
获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
b8、根据b7所述的方法,所述验证步骤包括:
根据所述漏洞的漏洞特征,判断漏洞数据库中是否存在所述漏洞;
如果所述漏洞数据库中不存在所述漏洞,基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误;
所述方法还包括:
如果验证所述漏洞无误时,记录所述漏洞至所述漏洞数据库中。
b9、根据b7所述的方法,所述验证步骤包括:
在所述被测系统处于空闲状态时,基于所述用户访问参数调用黑盒测试工作验证所述漏洞是否有误。
b10、根据b7所述的方法,还包括:
获取所述动态代码检测组件发送的漏洞相关信息;所述漏洞相关信息为所述动态代码组件根据所述被测系统当前运行状态的调用栈确定的;
如果验证所述漏洞无误,生成包括所述漏洞相关信息的漏洞提示信息。
b11、根据b10所述的方法,还包括:
发送所述漏洞提示信息至用户终端。
b12、根据b7所述的方法,所述用户访问参数包括用户访问地址以及用户输入参数;
所述验证步骤包括:
基于所述用户访问地址以及所述用户输入参数,调用黑盒测试工具模拟所述用户访问请求,并对所述用户输入参数中的漏洞关键参数进行变体测试,以确定所述漏洞是否有误。
c13、一种漏洞检测装置,包括:
监测模块,用于监测输入被测系统的用户访问请求;
检测模块,用于利用动态代码检测技术检测所述被测系统,以确定是否存在漏洞;
第一发送模块,用于如果所述被测系统存在漏洞,发送用户访问参数至检测服务器,以供所述检测服务器调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
c14、根据c13所述的装置,所述发送模块具体用于如果所述被测系统存在漏洞,重定向异常输出操作至所述检测服务器,以发送所述用户访问参数至所述检测服务器。
c15、根据c13所述的装置,所述检测模块包括:
参数获取单元,用于获取用户输入参数;
标记设置单元,用于为所述用户输入参数设置污染标记;所述污染标记跟随所述用户输入参数的调用处理传递至相关变量中;
漏洞检测单元,用于如果携带所述污染标记的变量被关键函数调用且未经过安全过滤处理,确定存在漏洞。
c16、根据c13所述的装置,还包括:
捕获模块,用于如果所述被测系统存在漏洞,捕获所述被测系统当前运行状态的调用栈;根据所述调用栈的调用信息获取漏洞相关信息;
第二发送模块,用于将所述漏洞相关信息发送至所述检测服务器,以供所述检测服务器验证所述漏洞无误时,生成包括所述漏洞相关信息的漏洞提示信息。
c17、根据c16所述的装置,所述漏洞相关信息包括相关源码文件、当前执行位置、携带污染标记的变量、所述用户输入参数中导致所述漏洞的漏洞关键参数以及所述漏洞关键参数的污染链路。
c18、根据c16所述的装置,还包括:
生成模块,用于结合所述调用栈的调用信息,生成漏洞特征;
第三发送模块,用于发送所述漏洞特征至检测服务器,以供所述检测服务器根据所述漏洞的漏洞特征,判断漏洞数据库不存在所述漏洞时,再调用黑盒测试工具基于所述用户访问参数验证所述漏洞是否有误。
d19、一种漏洞检测装置,包括:
参数获取模块,用于获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
验证模块,用于基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
d20、根据d19所述的装置,所述验证模块包括:
判断单元,根据所述漏洞的漏洞特征,判断漏洞数据库中是否存在所述漏洞;
验证单元,用于如果所述判断单元判断所述漏洞数据库中不存在所述漏洞,基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误;
记录单元,用于如果所述验证单元验证所述漏洞无误时,记录所述漏洞至所述漏洞数据库中。
d21、根据d19所述的装置,所述验证模块具体用于在所述被测系统处于空闲状态时,基于所述用户访问参数调用黑盒测试工作验证所述漏洞是否有误。
d22、根据d19所述的装置,还包括:
信息获取模块,用于获取所述动态代码检测组件发送的漏洞相关信息;所述漏洞相关信息为所述动态代码组件根据所述被测系统当前运行状态的调用栈确定的;
信息生成模块,用于如果验证所述漏洞无误,生成包括所述漏洞相关信息的漏洞提示信息。
d23、根据d22所述的装置,还包括:
提示触发模块,用于发送所述漏洞提示信息至用户终端。
d24、根据d19所述的装置,所述用户访问参数包括用户访问地址以及用户输入参数;
所述验证模块具体用于基于所述用户访问地址以及所述用户输入参数,调用黑盒测试工具模拟所述用户访问请求,并对所述用户输入参数中的漏洞关键参数进行变体测试,以确定所述漏洞是否有误。
e25、一种电子设备,包括一个或多个处理器以及一个或多个存储器;
其中,所述一个或多个存储器一条或多条计算机指令,其中,所述一条或多条计算机指令供所述一个或多个处理器调用执行。
所述一个或多个处理器用于:
获取动态代码检测组件发送的用户访问参数;所述用户访问参数为所述动态代码检测组件监测到输入被测系统的用户访问请求,利用动态代码检测技术检测所述被测系统存在漏洞时发送的;
基于所述用户访问参数调用黑盒测试工具验证所述漏洞是否有误。
f26、一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序;
所述计算机程序使计算机执行时实现如a1~a6任一项所述的漏洞检测方法。
g27、一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序;
所述计算机程序使计算机执行时实现如b7~b12任一项所述的漏洞检测方法。