一种检测漏洞脚本的方法及装置
技术领域
本发明涉及网络安全技术领域,特别涉及一种检测漏洞脚本的方法及装置。
背景技术
随着互联网的发展,各种网络应用层出不穷,在实现了各种功能的同时,也引入了各种安全漏洞,给攻击者提供了方便。针对网站安全需求的不断增长,出现了许多网站漏洞扫描器,扫描器通常会根据用户提供的URL“爬行”整个网站,将网页下载下来,再将网页的内容进行检测、分析以检查网页中是否有漏洞存在。
采用扫描器进行漏洞的检测策略缺乏灵活性且效率低,无法快速的扩展,也不便于安全研究人员使用。
发明内容
本发明所要解决的技术问题是:提供一种检测漏洞脚本的方法及装置,能够提高检测效率。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种检测漏洞脚本的方法,包括步骤:
S1、通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表;
S2、根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,执行步骤S3;
S3、获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种检测漏洞脚本的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
S1、通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表;
S2、根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,执行步骤S3;
S3、获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程。
本发明的有益效果在于:通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表,根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程,从而有效的避免重复操作,提高检测效率。
附图说明
图1为本发明实施例检测漏洞脚本的方法流程图;
图2为本发明实施例检测漏洞脚本的装置的结构示意图;
标号说明:
1、检测漏洞脚本的装置; 2、存储器; 3、处理器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过第一进程获取待检测漏洞脚本的依赖关系和键值链表,并根据所述依赖关系和键值链表对当前检测漏洞脚本进行检测,并通过创建第二进程执行依赖脚本,从而有效的避免重复操作,提高检测效率请参照图1,一种检测漏洞脚本的方法,包括步骤:
S1、通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表;
S2、根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,执行步骤S3;
S3、获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程。
从上述描述可知,本发明的有益效果在于:通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表,根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程,从而有效的避免重复操作,提高检测效率。
进一步的,步骤S1具体为:
通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表。
由上述描述可知,通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表,便于后续判断是否优先执行当前检测脚本以及当前检测脚本的依赖脚本是否已执行,便于提高检测速度。
进一步的,步骤S3具体为:
S31、获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程;
S32、通过所述第二进程执行所述依赖脚本,得到检测结果返回至所述第一进程。
由上述描述可知,通过获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程,通过所述第二进程执行所述依赖脚本,得到检测结果返回至所述第一进程,通过创建第二进行执行依赖脚本,在保证检测效率的同时降低了第一进程的压力。
进一步的,步骤S32具体包括:
S321、通过所述第二进程执行所述依赖脚本,并判断所述依赖脚本的类型;
S322、根据判断结果确定是否设置所述依赖脚本的键值,若设置,则在检测结果中通知第一进程在键值链表中增加相应的键值。
由上述描述可知,通过所述第二进程执行所述依赖脚本,并判断所述依赖脚本的类型,提高了检测效率,通过根据判断结果确定是否设置所述依赖脚本的键值,若设置,则在检测结果中通知第一进程在键值链表中增加相应的键值,便于后续第一进程判断当前检测漏洞脚本的依赖脚本是否已执行,有利于提高检测的速度和准确性。
进一步的,步骤S321中所述的根据判断结果确定是否设置所述依赖脚本的键值具体为:
若所述依赖脚本的类型为预设类型,则设置所述依赖脚本的键值,否则,不设置。
由上述描述可知,通过在所述依赖脚本的类型为预设类型时,设置所述依赖脚本的键值,便于进一步提高检测速度。
请参照图2,一种检测漏洞脚本的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
S1、通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表;
S2、根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,执行步骤S3;
S3、获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程。
从上述描述可知,本发明的有益效果在于:通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表,根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程,从而有效的避免重复操作,提高检测效率。
进一步的,步骤S1具体为:
通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表。
由上述描述可知,通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表,便于后续判断是否优先执行当前检测脚本以及当前检测脚本的依赖脚本是否已执行,便于提高检测速度。
进一步的,步骤S3具体为:
S31、获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程;
S32、通过所述第二进程执行所述依赖脚本,得到检测结果返回至所述第一进程。
由上述描述可知,通过获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程,通过所述第二进程执行所述依赖脚本,得到检测结果返回至所述第一进程,通过创建第二进行执行依赖脚本,在保证检测效率的同时降低了第一进程的压力。
进一步的,步骤S32具体包括:
S321、通过所述第二进程执行所述依赖脚本,并判断所述依赖脚本的类型;
S322、根据判断结果确定是否设置所述依赖脚本的键值,若设置,则在检测结果中通知第一进程在键值链表中增加相应的键值。
由上述描述可知,通过所述第二进程执行所述依赖脚本,并判断所述依赖脚本的类型,提高了检测效率,通过根据判断结果确定是否设置所述依赖脚本的键值,若设置,则在检测结果中通知第一进程在键值链表中增加相应的键值,便于后续第一进程判断当前检测漏洞脚本的依赖脚本是否已执行,有利于提高检测的速度和准确性。
进一步的,步骤S321中所述的根据判断结果确定是否设置所述依赖脚本的键值具体为:
若所述依赖脚本的类型为预设类型,则设置所述依赖脚本的键值,否则,不设置。
由上述描述可知,通过在所述依赖脚本的类型为预设类型时,设置所述依赖脚本的键值,便于进一步提高检测速度。
实施例一
请参照图1,一种检测漏洞脚本的方法,包括步骤:
S1、通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表,所述待检测的漏洞脚本包括多个漏洞脚本;
步骤S1具体为:
通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表;
S2、根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,执行步骤S3;
S3、获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程;
步骤S3具体为:
S31、获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程;
S32、通过所述第二进程执行所述依赖脚本,得到检测结果返回至所述第一进程;
步骤S32具体包括:
S321、通过所述第二进程执行所述依赖脚本,并判断所述依赖脚本的类型;
步骤S321中所述的根据判断结果确定是否设置所述依赖脚本的键值具体为:
若所述依赖脚本的类型为预设类型,则设置所述依赖脚本的键值,否则,不设置;
S322、根据判断结果确定是否设置所述依赖脚本的键值,若设置,则在检测结果中通知第一进程在键值链表中增加相应的键值。
实施例二
本实施例将结合具体的应用场景,进一步说明本发明上述检测漏洞脚本的方法是如何实现的:
1、通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表,若键值链表中已有当前检测漏洞脚本的键值,则说明当前检测漏洞脚本已检测,因此,在根据依赖关系判断当前检测漏洞脚本是否存在依赖脚本之前,先判断当前漏洞脚本是否已检测;
2、根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,执行步骤3;
3、获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程;
3.1、获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程;
第二进程的创建可以调用fork函数,由fork创建的第二进程为子进程(childprocess),fork函数被调用一次但返回两次,两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID;
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本;注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间;
3.2、通过所述第二进程执行所述依赖脚本,并判断所述依赖脚本的类型;
若所述依赖脚本的类型为预设类型,则设置所述依赖脚本的键值,否则,不设置;
3.3、根据判断结果确定是否设置所述依赖脚本的键值,若设置,则在检测结果中通知第一进程在键值链表中增加相应的键值;
例如,漏洞名称:Apache Tomcat默认错误页面检测
漏洞编号:NVE-01-2009-0324
依赖脚本:空
依赖键值:空
漏洞描述:
远程主机上运行着Apache Tomcat应用程序,该程序的默认错误页面上含有其版本号信息,远程攻击者能够利用该信息进行更加深入的攻击;
漏洞名称:Apache Tomcat 6.0.x<6.0.48/7.0.x<7.0.73/8.0.x<8.0.39/8.5.x<8.5.8多个漏洞
漏洞编号:NVE-01-2016-11145
CVE编号:CVE-2016-6816CVE-2016-6817CVE-2016-8735
依赖脚本:NVE-01-2009-0324
依赖键值:www/tomcat
漏洞描述:
据其自报的版本号,远程主机上运行的Apache Tomcat的版本号范围是:6.0.x<6.0.48/7.0.x<7.0.73/8.0.x<8.0.39/8.5.x<8.5.8,因此存在以下漏洞:
Apache Tomcat某些版本解析HTTP请求行的代码允许存在无效的字符,这可使攻击者篡改HTTP响应,对Web缓存投毒,执行XSS攻击或获取敏感信息;(CVE-2016-6816)
Apache Tomcat某些版本收到的标头若大于可用的缓冲区,可使HTTP/2标头解析器进入无限循环,导致拒绝服务;(CVE-2016-6817)
Apache Tomcat某些版本在JmxRemoteLifecycleListener的实现上存在安全漏洞,可导致远程代码执行;(CVE-2016-8735)
NVE-01-2016-11145脚本依赖于NVE-01-2009-0324脚本;
脚本调度中心先调用NVE-01-2009-0324脚本,其没有依赖脚本和键值,率先执行;
子进程执行依赖脚本NVE-01-2009-0324,并通过tomcat容器判断所述依赖脚本的类型是否为预设类型,如果是就设置键值为www/tomcat,否则不设置;检测主进程收到子进程通知,如果有设置键值,主进程键值链表增加相应的键值,待NVE-01-2009-0324执行结束,调用NVE-01-2016-11145脚本,查看键值链表是否有www/tomcat键值,如果有,就执行NVE-01-2016-11145脚本,否则就不执行。
实施例三
请参照图2,一种检测漏洞脚本的装置1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述程序时实现实施例一中的各个步骤。
综上所述,本发明提供的一种检测漏洞脚本的方法及装置,通过第一进程获取待检测漏洞脚本,得到所述待检测漏洞脚本的依赖关系和键值链表,根据所述依赖关系判断当前检测漏洞脚本是否存在依赖脚本,若否,则执行所述当前检测漏洞脚本,得到检测结果,否则,获取所述依赖脚本的键值,并根据所述键值和所述键值链表判断是否创建第二进程,所述第二进程用于执行所述依赖脚本,得到检测结果返回至所述第一进程,从而有效的避免重复操作,提高检测效率,通过第一进程获取待检测漏洞脚本,并读取所述漏洞脚本中关键信息的依赖关系和键值,得到所述待检测漏洞脚本的依赖关系和键值链表,便于后续判断是否优先执行当前检测脚本以及当前检测脚本的依赖脚本是否已执行,便于提高检测速度,通过获取所述依赖脚本的键值,判断所述键值链表中是否存在第一键值与所述键值相等,若否,则创建第二进程,通过所述第二进程执行所述依赖脚本,得到检测结果返回至所述第一进程,通过创建第二进行执行依赖脚本,在保证检测效率的同时降低了第一进程的压力。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。