本发明属于网络安全领域,特别是涉及一种基于静态和动态结合分析js代码的扫描器攻击同步框架。
背景技术:
1、漏洞扫描器是网络安全领域中用于检测web应用程序是否存在漏洞的工具,它通过模拟黑客攻击web应用程序的过程,收集目标的攻击面,构造攻击载荷并分析响应来检测漏洞。漏洞扫描器只要能够访问目标即可工作,因此很多web应用在正式使用前都会使用扫描器来检测是否存在漏洞。
2、在当今web应用程序愈加复杂的场景下,web应用程序会使用javascript代码来增加程序的动态能力,提高用户的使用体验。而传统的漏洞扫描器仅通过http请求和响应来进行漏洞检测,这使得漏洞扫描器忽略这些动态内容,导致扫描的覆盖率低,甚至无法扫描目标。这些动态内容在web应用中都是通过javascript代码存在,如果可以帮助扫描器分析这些代码,从中挖掘攻击面,就可以让扫描器适应新环境的web应用程序。但是由于很多javascript都是动态加载并且会使用混淆等技术处理,因此通过分析javascript来挖掘攻击面并同步给扫描器具有一定的挑战性。
技术实现思路
1、为了克服现有扫描器的不足,本发明提出了一种基于静态和动态结合分析js代码的扫描器攻击同步框架,可以从js中挖掘更多攻击面同步给多个扫描器并让扫描器协同工作,具有更好的漏洞检测效果。
2、本发明所采用的的技术方案是:一种基于静态和动态结合分析js代码的扫描器攻击同步框架,包括:
3、代理模块,用于通过代理的方式捕获扫描器的请求包和web应用的响应包,并解析数据包的内容,得到请求方式、请求路径、请求中的有效载荷、响应状态码和响应内容信息;
4、攻击面挖掘模块,用于通过请求方式、请求路径、请求中的有效载荷生成攻击面,初步构造攻击面集合;结合静态和动态的方法对javascript代码进行分析,挖掘攻击面添加到攻击面集合中并对攻击面集合进行筛选;
5、攻击同步模块,用于根据请求路径从攻击面集合中选择相关的攻击面生成索引页面,并将索引页面附加到响应内容。
6、优选地,通过代理的方式捕获扫描器的请求包和web应用的响应包,并解析数据包的内容,得到请求方式、请求路径、请求中的有效载荷、响应状态码和响应内容信息的具体方法为:
7、使用mitmproxy框架编写一个代理中间件,利用代理中间间捕获并拦截扫描器的流量,提取流量中的数据包;
8、对数据包原始的文本内容进行解析,从中提取出请求方式、请求路径、请求中的有效载荷、响应状态码和响应内容信息。
9、优选地,通过请求方式、请求路径、请求中的有效载荷生成攻击面,初步构造攻击面集合的具体方法为:
10、通过代理模块从数据包中提取的响应状态码判断响应是否合法,并通过合法响应对应的请求方式、请求路径和有效载荷生成一个攻击面添加到攻击面集合中,初步构造攻击面集合。
11、优选地,结合静态和动态的方法对javascript代码进行分析,挖掘攻击面添加到攻击面集合中的具体方法为:
12、从响应内容中提取javascript代码;
13、将源代码转换成抽象语法树(ast),遍历抽象语法树中变量声明、常量定义和函数调用等类型节点,获得与变量相关的代码片段;
14、判断代码片段中是否包含攻击面相关代码中经常出现的特征字符串来初步判断代码片段是否存在攻击面,并将有可能的代码分为含有攻击面的代码片段和变量赋值代码片段存储起来;
15、对含有攻击面的代码片段进行静态和动态结合分析,挖掘攻击面,具体为:
16、静态分析阶段从请求相关的代码片段中提取攻击面的特征,判断含有攻击面的代码片段中是否包含请求路径这一特征,针对请求路径这个特征,如果代码片段中包含javascript代码中与请求无关的字符串则排除代码片段是请求路径的可能性;
17、从代码片段对应的ast中寻找字面量或值能完全匹配请求方式字符串的节点来判断该代码片段使用的请求方式;提取代码片段中的每一个对象作为一个有可能的有效载荷;
18、以请求路径、请求方式和可能的有效载荷为基础构建一个攻击面;
19、动态分析阶段,攻击面挖掘模块同时在本地维持一个浏览器实例,通过浏览器的远程调试技术将变量赋值代码片段发送到浏览器中执行,并记录执行结果作为变量可能的值记录下来;
20、然后将变量的值回代到含攻击面的代码片段中,将收集到的攻击面中存在的未知变量都替换成具体的值,由此得到准确的攻击面。
21、优选地,对攻击面集合进行筛选的具体方法为:
22、针对扫描器发现的攻击面,计算攻击面对应响应内容的hash值来标识,将具有相同标识的攻击面视为相同的攻击面,同一个标识对应的攻击面只保留一个;
23、针对静态和动态分析javascript代码得到的攻击面,计算每个攻击面的权重并保留权重高于设定阈值的攻击面。
24、优选地,计算每个攻击面的权重的具体方法为:
25、统计包含攻击面的代码片段中标识符的出现次数作为每个标识符的权重,计算所有标识符权重的平均值ave_weightidentifier;
26、查看标识符是否包含请求发送的特征字符串,将包含这些特征字符串的标识符权重增加ave_weightidentifier;
27、针对每个攻击面,累加其对应的代码片段中包含的标识符的权重,将累加后的结果作为攻击面的权重;
28、计算所有攻击面的平均权重,将权重高于平均值的攻击面保留在攻击面集合中。
29、优选地,所述攻击同步模块中攻击同步包括攻击范围同步和攻击面同步,攻击范围同步具体指:
30、在代理模块捕获到扫描器访问robots.txt文件时,提取出当前攻击面集合的扫描范围将其按照文件的格式添加到响应数据包中;
31、攻击面的同步是指,当捕获到扫描器对其它位置扫描时,从攻击面集合中挑选相关的攻击面,将攻击面的详细信息转换成特定格式添加到索引页面中,最后将索引页面添加到对应的响应数据包中
32、本发明与现有技术相比,其显著优点为:本发明可以同步多个基础扫描器之间的攻击面和攻击向量,让基础扫描器之间互相弥补缺点,协同工作,提高漏洞检测能力。本发明同时还可以从响应中提取javascript代码进行分析,从中挖掘基础扫描器无法发现的攻击面,从而提高并精确扫描范围。
33、下面结合附图对本发明做进一步详细的描述。
1.一种基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,包括:
2.根据权利要求1所述的基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,通过代理的方式捕获扫描器的请求包和web应用的响应包,并解析数据包的内容,得到请求方式、请求路径、请求中的有效载荷、响应状态码和响应内容信息的具体方法为:
3.根据权利要求1所述的基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,通过请求方式、请求路径、请求中的有效载荷生成攻击面,初步构造攻击面集合的具体方法为:
4.根据权利要求1所述的基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,结合静态和动态的方法对javascript代码进行分析,挖掘攻击面添加到攻击面集合中的具体方法为:
5.根据权利要求1所述的基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,对攻击面集合进行筛选的具体方法为:
6.根据权利要求5所述的基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,计算每个攻击面的权重的具体方法为:
7.根据权利要求1所述的基于静态和动态结合分析js代码的扫描器攻击同步框架,其特征在于,所述攻击同步模块中攻击同步包括攻击范围同步和攻击面同步,攻击范围同步具体指:
