面向现代Web应用中存储型XSS漏洞的静态检测方法及装置

文档序号:36931354发布日期:2024-02-02 21:56阅读:15来源:国知局
面向现代Web应用中存储型XSS漏洞的静态检测方法及装置

本发明涉及软件安全与漏洞挖掘领域,尤其涉及一种面向现代web应用中存储型xss漏洞的静态检测方法及装置。


背景技术:

1、在web应用的注入类漏洞当中,如果攻击者将攻击载荷发送到目标系统中,并没有直接触发漏洞,而是通过存入到数据库中,并在稍后进行触发,就会构成二次注入漏洞(second-order vulnerabilities)。

2、二次注入漏洞是一种污点类漏洞,此类漏洞的形成原因是用户将攻击载荷通过系统的交互点传入系统,攻击载荷在系统中经过传播后,最终到达产生危害的位置。而存储型xss漏洞是web应用程序中的一种典型的二次注入类漏洞,其原理是将触发xss的攻击载荷存储到数据库中,并在之后的操作里将攻击载荷从数据库中读取并触发。由于其攻击载荷会持久地存储在系统的持久存储介质中,因此具有较大的危害,可应用于用户cookie盗取、键盘监控、大规模蠕虫攻击等场景中。

3、通常,本领域技术人员将传入攻击载荷的系统交互点称作污点源,将产生危害的位置成为污点汇聚点,将在攻击载荷在系统中传播所经过的路径成为污点传播路径。在二次注入漏洞中,一条完整的污点传播路径是需要经过数据库的,因此在挖掘二次注入漏洞时,需要识别数据库的读写,并将两条污点传播路径并进行连接,因此挖掘此类漏洞必须要得到代码中对于数据库操作的读写操作的相关信息。

4、传统的针对二次注入类漏洞的静态挖掘,通常采用基于字符串分析(stringanalysis)的方法:通过收集目标web应用源代码中的字符串内容,并对所有的字符串静态计算字符串表达式可能的取值,进而从代码中解析出完整的sql查询语句,由此获取数据库操作的读写位置信息。然而,上述方法并不适用于对现代web应用中数据库读写操作的位置信息获取。因为现代web应用为了满足代码的解耦需求,通常采用用户业务与数据模型分离的开发模式,在整个系统中进行了分层,主要包括用户业务层与数据访问层。其中数据访问层(data access layer,dal)专门负责数据库的模型构建与操作,并提供接口供用户业务层使用。也就是说,在现代web应用中,由数据访问层控制着数据库的读写操作,且用户业务层往往采取了动态的方式对数据访问层进行调用。这些动态调用引入的动态特性使得静态程序分析技术难以准确追踪数据库查询语句的构造过程。具体到数据访问层内部,由于web应用需要适配不同的数据库,数据访问层通常采用动态加载驱动的方式,这使得完整的数据库查询语句在运行时才能够被动态拼接。基于以上原因,传统的字符串解析方法将在引入数据访问层的web应用中失效。


技术实现思路

1、针对上述问题,本发明提出了一种面向现代web应用中存储型xss漏洞的静态检测方法及装置,尤其适用于对web应用中的存储型xss(stored-xss)漏洞的挖掘。本发明可以在源代码中识别潜在的数据库读写位置,从而帮助静态污点分析工具识别污点数据在数据库中的读写位置,并在拼接污点读路径和污点写路径之后,发现存储型xss漏洞在系统中的位置。

2、一种面向现代web应用中存储型xss漏洞的静态检测方法,包括:

3、获取目标程序的源代码;

4、基于所述源代码,获取数据库操作三元组信息,所述数据库操作三元组信息包括:数据库的操作动作、所述操作动作的表名和所述操作动作的字段名;

5、基于所述数据库操作三元组信息进行污点源到数据库写操作和数据库读操作到污点汇聚点的两段式污点分析,以得到存储型xss漏洞的静态检测结果。

6、进一步地,基于所述源代码,获取数据库操作三元组信息,包括:

7、针对所述源代码,基于字符串分析技术进行完整sql语句的提取;

8、在获取到完整sql语句的情况下,对所述完整sql语句进行语义分析,以得到数据库操作三元组信息;

9、在未获取到完整sql语句的情况下,构建所述目标程序对应的数据库模型和可分析形式,并根据所述数据库模型和所述可分析形式,得到数据库操作三元组信息;其中,所述可分析形式包括:代码属性图或codeql。

10、进一步地,根据所述数据库模型和所述可分析形式,得到数据库操作三元组信息,包括:

11、基于所述可分析形式进行锚点api的推导,所述锚点api为包含数据库操作三元组信息的源代码片段对应的api调用点;

12、结合所述数据库模型进行锚点api的分析和对比,以得到数据库操作三元组信息。

13、进一步地,基于所述可分析形式进行锚点api的推导,包括:

14、从污点源进行前向的数据流分析,从污点汇聚点进行后向的数据流分析,并结合可分析形式,收集路径上所有出现的api调用;

15、去除所述路径上所有出现的api调用中不符合条件的api调用;其中,所述不符合条件的api调用包括:php的内置函数、无害处理函数和字符串处理函数;

16、对去除不符合条件后的api调用进行调用频度统计,并根据调用频度统计结果,形成锚点api集合。

17、进一步地,结合所述数据库模型进行锚点api的分析和对比,以得到数据库操作三元组信息,包括:

18、在所述源代码中找到每个锚点api的调用点,以得到该锚点api对应的代码集合;

19、对所述代码集合进行php解析和sql解析,以形成所述代码集合对应的token序列;

20、将所述token序列与数据库模型进行比对,得到数据库操作三元组信息对应的位置。

21、进一步地,在所述源代码中找到每个锚点api的调用点,以得到该锚点api对应的代码集合,包括:

22、判断所述锚点api是否为链式api;

23、在所述锚点api为链式api的情况下,基于与链的起始标识符相同的调用点,得到该锚点api对应的代码集合;其中,所述链的起始标识符包括:类名或对象名;

24、在所述锚点api为非链式api的情况下,获取该锚点api的函数调用点,并基于该函数调用点的参数进行后向数据流分析,得到该锚点api对应的代码集合。

25、进一步地,将所述token序列与数据库模型进行比对,得到数据库操作三元组信息对应的位置,包括:

26、按照设定条件,将所述token序列与数据库模型进行比对;其中,所述设定条件包括:忽略大小写、前后缀、token出现顺序、设置每个token数据库模型内的信息的相似度、字段属性判断、字符串类型长度判断;

27、根据比对结果,得到数据库操作三元组信息对应的位置。

28、进一步地,基于所述数据库操作三元组信息进行污点源到数据库写操作和数据库读操作到污点汇聚点的两段式污点分析,以得到存储型xss漏洞的静态检测结果,包括:

29、找到从污点源到数据库写位置的所有污点传播路径,并通过分析污点源是否能够将污点传播到可污染的数据库读位置,得到写污点传播路径集合;

30、找到从数据库读位置到污点汇聚点的所有污点传播路径,并通过分析发现数据库内的污点读出的位置,以及该位置是否能够到达某个污点汇聚点,得到读污点传播路径集合

31、根据每条读污点传播路径和写污点传播路径的数据库读写位置进行匹配,从而存储型xss漏洞的静态检测结果。

32、一种面向现代web应用中存储型xss漏洞的静态检测装置,包括:

33、源代码获取模块,用于获取目标程序的源代码;

34、源代码解析模块,用于基于所述源代码,获取数据库操作三元组信息,所述数据库操作三元组信息包括:数据库的操作动作、所述操作动作的表名和所述操作动作的字段名;

35、污点分析模块,用于基于所述数据库操作三元组信息进行污点源到数据库写操作和数据库读操作到污点汇聚点的两段式污点分析,以得到存储型xss漏洞的静态检测结果。

36、一种计算机设备,其特征在于,所述计算机设备包括:处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现上述任一项所述的面向现代web应用中存储型xss漏洞的静态检测方法。

37、与现有技术相比,本发明无需从代码中获得完整的数据库查询语句,直接从php代码中发现数据访问层的入口位置,并在这些位置出收集代码片段。经本发明的研究发现,只要在这些代码片段中发现三个元素:数据库的操作动作(读或者写)、具体操作的表名和字段名,就可以完成读污点传播路径和写污点传播路径的拼接。因此本发明将三个元素定义为数据库操作三元组(database operate triple),而对于那些能够在调用位置发现数据库操作三元组的api,本发明将其称之为锚点api(anchor point api)。另一方面,由于本发明在锚点api中收集到的代码信息通常是不符合sql语句的语法规则的,因此很难通过正常的解析去获得数据库操作三元组信息。因此本发明使用了一种模糊解析的技术(fuzzyparse)来处理代码片段,模糊解析技术会先将目标代码当做php代码进行处理,再当做sql代码进行处理,最后对比数据库模型(database schema),提取出数据库操作三元组信息,拼接读污点传播路径和写污点传播路径,最终发现二次注入漏洞。

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