一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

Web应用白盒审计方法、装置、设备及介质与流程

2023-02-01 14:59:48 来源:中国专利 TAG:

web应用白盒审计方法、装置、设备及介质
技术领域
1.本发明涉及计算机网络安全技术领域,尤其涉及一种web应用白盒审计方法、装置、设备及介质。


背景技术:

2.web应用通常以脚本语言(例如php、java等)作为后端支持,以html、css以及javascript作为前端展示,搭配数据库(例如mysql、mongodb等)作为数据存贮,常见的web应用中存贮着大量用户的机密数据,甚至包括信用卡号、密码等个人隐私数据。因此,web应用的安全性变得至关重要。
3.抽象语法树(abstract syntax tree,简称ast)是现代编译原理中,表示源代码常用的一种中间语言形式,其数据结构为树形。ast树的基本构造方法是将表达式的操作数作为树结构的叶子,将表达式的操作符号作为树结构的根,依次循环迭代进行构造。将ast树作为中间语言优点主要有两个:其一,结构简洁、层次分明,能够直观地反映代码的复杂逻辑,包括判断、循环以及跳转;其二,ast树是较为独立的一种中间语言形式,不受语言本身的约束,即能够表示各种程序语言。对于后端处理而言,web应用代码具有较大的冗余,直接对代码进行处理具有较大难度。不仅存在难以处理的空格,代码本身还非常灵活,代码的编写方法多样,以php程序为例,仅仅简单的数组赋值语句就有三四种不同的写法。使用抽象语法树作为一个过渡,可以有效地规避这些问题。由于是树形结构的特点,ast树非常适合遍历,有利于后端处理。
4.程序控制流图(control flow graph,简称cfg)是静态语义分析过程中的另一种状态,可以反映程序代码控制流程。其实,程序控制流图是由一个入口、若干个出口组成的有向图,图中的每一个节点代表一个基本块,基本块中可以有一系列顺序执行的语句;图中的有向边,代表从出发节点到目标节点的控制依赖关系。由于ast树是比较高层次的表示形式,其中模块之间的调用、循环等不利于数据流的处理,因此很多时候需要对ast树进一步处理,转化为更底层的程序控制流图。程序控制流图以基本块与跳转组成,将ast树中的所有分支结构(判断、循环、迭代)转化成判断(if)与跳转(jump)的组合。对于ast树,通过遍历即可完成向cfg图转化。
5.为保证web应用的安全性,通常需要进行污点分析,污点分析的核心思想是认为所有用户的输入都是恶意的,如果输入的污染源作为下一个语句的参数或者直接赋值给其他变量,则认为污染范围进一步传播;如果污染到敏感参数,则认为存在疑似漏洞。基于漏洞本质的检测思路,其核心的思想就是污点分析。污点分析被认为是一种在不执行代码的情况下较为完善的分析策略,因为在静态语义分析的过程中,不可能遍历所有执行路径上的所有输入可能,因为保守地认为所有的输入都是恶意的是一种最为稳妥的方法。
6.现有技术的web应用自动化审计方法主要通过黑盒审计实现。黑盒审计的局限在于程序代码覆盖率无法保证;随着测试粒度的上升,代码的覆盖率逐渐收敛于一个上限,到达瓶颈。对于一些隐藏较深、触发条件苛刻的漏洞黑盒分析往往显得很乏力。
7.综上,对于web应用代码大且复杂的特点,亟需一种对web应用进行审计以挖掘漏洞的方法。


技术实现要素:

8.为了克服现有技术的不足,本发明的目的之一在于提供一种web应用白盒审计方法,其基于语义分析,实现对应用代码的白盒审计。
9.本发明的目的之一采用以下技术方案实现:
10.一种web应用白盒审计方法,包括以下步骤:
11.读取web应用输入代码,并根据所述输入代码构造抽象语法树;
12.遍历所述抽象语法树,并转化为程序流程控制图;
13.采用惰性策略对所述程序流程控制图进行污染源回溯,当遇到污染源或安全顾虑函数时,停止回溯;
14.对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞;
15.输出漏洞数量。
16.进一步地,读取web应用输入代码,包括:将所述输入代码解析成函数、基本块、表达式、操作数,所述函数包括主函数及其他函数,所述表达式包括操作数与操作符。
17.进一步地,根据所述输入代码构造抽象语法树,包括以下步骤:
18.将组成所述函数的所述基本块链接到对应的表达式上;
19.将所述表达式链接到对应的操作数上;
20.基于php-parser将所述操作数作为树结构的叶子,将所述操作符作为树结构的根,依次循环迭代构造所述抽象语法树。
21.进一步地,转化为程序流程控制图时,将所述抽象语法树中的所有分支结构转化成判断与跳转组合。
22.进一步地,采用惰性策略对所述程序流程控制图进行污染源回溯,包括:以所述基本块中的潜在敏感函数及潜在敏感参数作为起点,回溯污染源;所述敏感函数包括数据库操作函数、文件操作函数、代码执行函数、命令执行函数、结果输出函数、反序列化函数。
23.进一步地,对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞,包括:
24.输入所述操作数至所述程序流程控制图;
25.若所述操作数指向正确基本块,标记对应的操作数及表达式为真变量,否则,标记为假变量;
26.回溯标记为真的所述操作数,若其满足真截止条件且存在于疑似漏洞的回溯路径上,则漏洞成立;
27.回溯标记为假的所述操作数,若其满足假截止条件且存在于疑似漏洞的回溯路径上,则漏洞不成立。
28.进一步地,所述真截止条件为:操作数标记为真变量时,污染范围停止,所述真截止条件满足:变量等于常量且属于php内置函数;所述假截止条件为:操作数标记为假变量时,污染范围停止,所述假截止条件满足:变量不等于常量。
29.本发明的目的之二在于提供一种web应用白盒审计装置,其通过前期编译结合语
义分析,进而识别出代码中的漏洞。
30.本发明的目的之二采用以下技术方案实现:
31.一种web应用白盒审计装置,其包括:
32.抽象语法树构建模块,用于读取web应用输入代码,并根据所述输入代码构造抽象语法树;
33.程序控制流图构建模块,用于遍历所述抽象语法树,并转化为程序流程控制图;
34.污点回溯分析模块,用于采用惰性策略对所述程序流程控制图进行污染源回溯,当遇到污染源或安全顾虑函数时,停止回溯;
35.控制流分析模块,用于对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞;
36.漏洞报告模块,用于输出漏洞数量。
37.本发明的目的之三在于提供执行发明目的之一的电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,所述计算机程序被处理器执行时实现上述的web应用白盒审计方法。
38.本发明的目的之四在于提供存储发明目的之一的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的web应用白盒审计方法。
39.相比现有技术,本发明的有益效果在于:
40.本发明通过静态语义分析的手段自动化定位漏洞,引入前期编译过程,将代码转换成抽象语法树,并输出适合后续处理的程序控制流图,将程序控制流图作为输入,定位潜在威胁函数的同时进行污点回溯分析与控制流分析。结合惰性策略,对传统静态分析流程进行了改进和优化,通过判断污染源到达潜在威胁函数的执行路径上是否存在有效的过滤函数来确定web应用漏洞的存在与否,极大提高了漏洞检测性能。
附图说明
41.图1是实施例一的web应用白盒审计方法的流程图;
42.图2是实施例一的抽象语法树转化示意图;
43.图3是实施例一的控制流图转换结果示意图;
44.图4是实施例二的web应用白盒审计装置的结构框图;
45.图5是实施例三的电子设备的结构框图。
具体实施方式
46.以下将结合附图,对本发明进行更为详细的描述,需要说明的是,以下参照附图对本发明进行的描述仅是示意性的,而非限制性的。各个不同实施例之间可以进行相互组合,以构成未在以下描述中示出的其他实施例。
47.实施例一
48.实施例一提供了一种基于语义分析的web应用白盒审计方法,旨在通过将抽象语法树转化为程序流程控制图,通过污点回溯分析并结合流敏感分析得到漏洞信息。
49.请参照图1所示,一种web应用白盒审计方法,包括以下步骤:
50.s1、读取web应用输入代码,并根据所述输入代码构造抽象语法树;
51.上述的读取web应用输入代码包括:将所述输入代码解析成函数、基本块、表达式、操作数,所述函数包括主函数及其他函数,所述表达式包括操作数与操作符。具体地,将web应用的代码分为主函数与其他函数集合,每一个函数(简称func)由基本块(简称block)组成;在每一个基本块中是顺序执行的语句,每一条语句称为表达式,简称op;在每一个表达式中,有不同的变量与操作符组成,每一个变量称作操作数,简称operand。由此,对于任何一个web应用的代码,解析出func、block、op与operand四个对象。web应用输入代码包括web应用文件的所有代码。
52.请参照图2所示的抽象语法树(ast树)转化示意图,多个block组成func,block链接到基本块下所有op,每一个op再链接到多个operand,最终将整个web应用的代码串接起来。对于每一个使用的变量operand都可以找到其定义的op,所以可以将operand与它有效定义连接起来,即在operand加入ops属性,指向定义此变量的op;再通过开源php-parser将表达式的操作数作为树结构的叶子,将表达式的操作符号作为树结构的根,依次循环迭代构造抽象语法树。具体地,包括以下步骤:
53.将组成所述函数的所述基本块链接到对应的表达式上;
54.将所述表达式链接到对应的操作数上;
55.基于php-parser将所述操作数作为树结构的叶子,将所述操作符作为树结构的根,依次循环迭代构造所述抽象语法树。
56.上述的php-parser是常用的php解析器,因此本实施例不加以赘述其原理及工作过程。
57.s2、遍历所述抽象语法树,并转化为程序流程控制图;
58.请参照图3所示的控制流图转换结果示意图,s2在转化为程序流程控制图(cfg图)时,通过开源的php cfg,加入补充php类型的支持,包括常量、常量函数、引用等,以便程序流程控制图的横向拓展,将所述抽象语法树中的所有分支结构转化成判断(if)与跳转(jump)组合,通过遍历即可转换成cfg图,本实施例中,上述分支结构包括判断、循环、迭代。
59.s3、采用惰性策略对所述程序流程控制图进行污染源回溯,当遇到污染源或安全过滤函数时,停止回溯;
60.s3中,当回溯流遇到安全过滤函数时,即停止回溯,因为即使之前的变量用户可以污染到,安全过滤函数也已经做了有效的过滤。安全过滤函数可以分为两类:
61.第一类对于任何pvf都有效的安全过滤函数。php中常见的函数有加密类函数如:md5、sha256、sha512等,编码类函数如:base64,强制类型转化类函数:如intval。另一类则是每个漏洞特定的安全过滤函数,对数据库注入来说,特有的安全过滤函数有addslashes、mysql_real_escape_string等,对于跨站脚本攻击则有html_entity_encode。安全过滤函数属于常规技术手段,本实施例不再展开赘述。
62.s3中的污染源包括所有用户可以控制的输入。对于一个web应用,用户通过发送http请求包进行通信,http请求包中的所有数据都是用户可以控制的,即污染源;此外,污染源还包括来自数据库的返回结果和读取的文件内容,此类污染源属于用户无法控制的系统文件。
63.s3中惰性策略指的是当多个基本块存在同一变量不同的赋值语句且相遇时,则引入一个虚构的选择符函数(phi函数)。对于phi选择符号的放置,采取惰性(lazy)算法策略,
初始状态不标记任何变量,仅当一个变量被使用时,找到最近路径的reaching definition定义,如果没有则向下寻找,直到遇到有效的定义就放置phi选择符。
64.s3具体包括:以所述基本块中的潜在敏感函数及潜在敏感参数作为起点,回溯污染源;所述敏感函数包括数据库操作函数、文件操作函数、代码执行函数、命令执行函数、结果输出函数、反序列化函数。
65.潜在敏感函数是指当攻击者可以控制这些函数时,有可能发生越权行为。php中潜在敏感函数可以分为以下几类:数据库操作函数、文件操作函数、代码执行函数、命令执行函数、结果输出函数、反序列化函数。由于潜在敏感函数只是特定的某个参数或者几个参数是存在潜在威胁的,需要统计每一个pvf中的潜在威胁参数(pvp),最终从潜在敏感参数回溯污染源。
66.s4、对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞;
67.s4中,由于cfg图已经去除了程序多余的语法部分,只留下if的判断。可以将if认为是一个函数,输入一个operand,如果该operand为真,走向正确的block;如果该operand为假,则走向错误的block。因此,在正确block以及其所有的op上加入真变量属性,例如标记为rcond属性,放置为真的operand;加入假变量属性,例如标记为fcond属性,放置为假的operand。
68.本实施例中,为了实现流敏感分析,定义了真假截止条件,真截止条件为:操作数标记为真变量时,污染范围停止,真截止条件满足:变量等于常量且属于php内置函数,如is_int,is_float等;假截止条件为:操作数标记为假变量时,污染范围停止,所述假截止条件满足:变量不等于常量。
69.具体而言,对于条件属性,如rcond属性,回溯rcond中的变量,判断是否满足真截止条件而且存在于疑似漏洞的回溯路径上,如果满足条件,即使该变量可以回溯至污染源,攻击者同样无法控制。同样,回溯fcond中的变量,由于fcond是假的条件,如果满足假截止条件而且存在于疑似漏洞的回溯路径上,则同样认为该回溯路径无效,疑似漏洞不成立。
70.综上所述,s4包括:
71.输入所述操作数至所述程序流程控制图;
72.若所述操作数指向正确基本块,标记对应的操作数及表达式为真变量,否则,标记为假变量;
73.回溯标记为真的所述操作数,若其满足真截止条件且存在于疑似漏洞的回溯路径上,则漏洞成立;
74.回溯标记为假的所述操作数,若其满足假截止条件且存在于疑似漏洞的回溯路径上,则漏洞不成立。
75.需要说明的是,本实施例所描述的流敏感分析建立在web应用不存在死代码的情况下,即所有的路径都在某种情况下执行到,以此为前提进行流敏感分析。
76.具体而言,上述的疑似漏洞回溯路径指的是:编译器有一种结构叫def-use链,对于每一个变量operand,利用def-use链可以找到def端的语句表达式op,判断op是否安全,是否为用户自定义函数,是否为污染源函数;并对op所有return的operand重复利用def-use链寻找表达式op,直到迭代结束,确定疑似漏洞回溯路径存在与否。发现回溯中遇到了污染源即可停止认为存在疑似漏洞。
77.s5、输出漏洞数量。
78.上述的s1、s2属于编译阶段,s3、s4为漏洞检测阶段。
79.实施例二
80.实施例二公开了一种对应上述实施例的web应用白盒审计装置,为上述实施例的虚拟装置结构,请参照图4所示,包括:
81.抽象语法树构建模块210,用于读取web应用输入代码,并根据所述输入代码构造抽象语法树;
82.程序控制流图构建模块220,用于遍历所述抽象语法树,并转化为程序流程控制图;
83.污点回溯分析模块230,用于采用惰性策略对所述程序流程控制图进行污染源回溯,当遇到污染源或安全顾虑函数时,停止回溯;
84.控制流分析模块240,用于对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞;
85.漏洞报告模块250,用于输出漏洞数量。
86.优选地,读取web应用输入代码,包括:将所述输入代码解析成函数、基本块、表达式、操作数,所述函数包括主函数及其他函数,所述表达式包括操作数与操作符。
87.优选地,根据所述输入代码构造抽象语法树,包括以下步骤:
88.将组成所述函数的所述基本块链接到对应的表达式上;
89.将所述表达式链接到对应的操作数上;
90.基于php-parser将所述操作数作为树结构的叶子,将所述操作符作为树结构的根,依次循环迭代构造所述抽象语法树。
91.转化为程序流程控制图时,将所述抽象语法树中的所有分支结构转化成判断与跳转组合。
92.优选地,采用惰性策略对所述程序流程控制图进行污染源回溯,包括:以所述基本块中的潜在敏感函数及潜在敏感参数作为起点,回溯污染源;所述敏感函数包括数据库操作函数、文件操作函数、代码执行函数、命令执行函数、结果输出函数、反序列化函数。
93.优选地,对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞,包括:
94.输入所述操作数至所述程序流程控制图;
95.若所述操作数指向正确基本块,标记对应的操作数及表达式为真变量,否则,标记为假变量;
96.回溯标记为真的所述操作数,若其满足真截止条件且存在于疑似漏洞的回溯路径上,则漏洞成立;
97.回溯标记为假的所述操作数,若其满足假截止条件且存在于疑似漏洞的回溯路径上,则漏洞不成立。
98.所述真截止条件为:操作数标记为真变量时,污染范围停止,所述真截止条件满足:变量等于常量且属于php内置函数;所述假截止条件为:操作数标记为假变量时,污染范围停止,所述假截止条件满足:变量不等于常量。
99.实施例三
100.图5为本发明实施例三提供的一种电子设备的结构示意图,如图5所示,该电子设备包括处理器310、存储器320、输入装置330和输出装置340;计算机设备中处理器310的数量可以是一个或多个,图5中以一个处理器310为例;电子设备中的处理器310、存储器320、输入装置330和输出装置340可以通过总线或其他方式连接,图5中以通过总线连接为例。
101.存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的web应用白盒审计方法对应的程序指令/模块。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述实施例一的web应用白盒审计装置方法。
102.存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
103.输入装置330可用于接收输入的用户身份信息、应用代码等。输出装置340可包括显示屏等显示设备。
104.实施例四
105.本发明实施例四还提供一种包含计算机可执行指令的存储介质,该存储介质可用于计算机执行web应用白盒审计方法,该方法包括:
106.读取web应用输入代码,并根据所述输入代码构造抽象语法树;
107.遍历所述抽象语法树,并转化为程序流程控制图;
108.采用惰性策略对所述程序流程控制图进行污染源回溯,当遇到污染源或安全过滤函数时,停止回溯;
109.对所述污染源回溯的回溯路径进行流敏感分析,筛选出成立的漏洞;
110.输出漏洞数量。
111.当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的基于web应用白盒审计方法中的相关操作。
112.通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
113.值得注意的是,上述基于web应用白盒审计方法装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
114.对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献