PHP代码安全审计有哪些工具比较好用?

通过大量调查,本文筛选出了近三年来不断更新的13个白盒PHP审计工具,并对其进行了分析。该文主要介绍了这些白盒审计框架的原理,并简单分析了其规则列表,具体的挖掘效果没有进行评价。其主要原因有两个:一方面,不同白盒审计框架的侧重点不一致,有的用于挖洞设计,有的用于实际产出的检查;另一方面,即使全部以挖洞为目标,也有一些用于具体框架,有些用于通用框架。因此,如果大家有兴趣,可以自己选择相应的框架进行测试。


当前,主流的PHP开放源码白盒审计工具的设计思想大多基于部分/全部敏感函数的参数来自于未经安全函数处理的外部输入。最后实施到具体实施时,可分为以下两大类:以文本特征为基础:即我们常说的规则模式,在人工代码审计时,根据发现漏洞点的源代码规则,归纳出相应的正则表达式,然后根据正则表达式来查找这样的漏洞。本文提出了一种基于文本特征的白盒审计工具,其优点是审计速度相对较快,规则维护成本较低,但缺点是准确率较低,误报率较高。


在静态分析的基础上:即借助传统的静态分析技术实现白盒审计。常用技术包括数据流分析,污点扩散,控制流分析等。采用静态分析的方法可以更精确地判断外部输入是否由安全函数处理,但基于文本特征的方法难以实现。另外,以静态分析为基础的方法在判断一个变量是否部分/全部来自外部输入,特别是在对框架进行审计时,具有更大的优势。然而,静态分析的优点和缺点都存在于此,静态分析的问题在于:1)时间开销大,一次完整的分析比基于文本特征的方法花费更多的时间;2)适配成本高,针对不同的目标,需要适配相应的解析器来产生诸如AST树和CFG等所需的信息;此外,检测规则的适配成本也相对较高。


下面的图表显示了13个白盒审计工具安全性,其中7个是基于文本特征的审计工具,6个是基于静态分析的审计工具。Graudit自09年开始在Github上开放源码至今已有10年时间,而且它还在不断地更新。graudit全名greproughaudit,顾名思义,它主要是通过Linux内置的grep命令实现白盒审计,它的核心代码只有200行bash脚本。ASP、C、.NET、Java、JavaScript、Perl、PHP、Python、Ruby等语言都支持graudit。


Graudit根据漏洞挖掘对象的开发语言选择相应的规则库,然后借助grep快速定位源代码,以满足指定的规则的可疑位置,接下来由安全人员手工检查这些可疑位置是否确实存在漏洞。与此同时,graudit经过多年的使用和不断更新,已提供非常全面的漏洞规则库。


分享: