经过一番调研,本文筛选了近三年来一直在持续更新的13款针对PHP的白盒审计工具进行分析。本文主要介绍这些白盒审计框架的原理并简单分析下它们的规则列表,未对具体的挖洞效果进行评估。这主要考虑以下两个原因:一方面,不同白盒审计框架的侧重点是不一致的,有的是为了挖洞设计的,有的实际产出必须经过人工复核;再者,即使都是以挖洞为目标设计的,有的是针对特定的框架,有的又是可以通用的。所以,大家如果感兴趣的话,可以自行选择相应的框架进行测试。
目前,主流的PHP开源白盒审计工具在设计思路上大都是依据敏感函数的参数部分/全部来自未经安全函数处理的外部输入这一经验。最终落实到具体的实现上又可以划分成以下两大类:
基于文本特征:也就是我们常说的正则方式,基于人工代码审计时发现漏洞点的源代码规律,从而归纳出相应的正则表达式,然后基于此正则表达式来查找此类漏洞。基于文本特征的白盒审计工具优点在于审计速度相对较快,且规则维护起来成本较低,但是缺点又在于准确率相对较低,误报率也比较高。
基于静态分析:即借助传统静态分析技术来进行白盒审计。常见的技术主要有数据流分析、污点传播和控制流分析等。静态分析的方式能够更加准确的判断外部输入是否经过安全函数的处理,这点是基于文本特征的方式很难实现的。此外,基于静态分析的方式在判断一个变量是否部分/全部来自外部输入的时候也更有优势,尤其在针对框架进行审计的时候。但是,有好的一面就有坏的一面,基于静态分析的问题在于:1)时间开销大,做一次完整的分析所需的时间远大于基于文本特征的方式;2)适配成本高,针对不同的目标,需要适配相应的解析器来生成所需的AST树和CFG等信息,此外,检测规则的适配也是一个相对较重的成本。
如下图所示,在本文中所介绍的13款白盒审计工具安全中,基于文本特征的审计工具有7款,基于静态分析的审计工具有6款。
上篇
基于文本特征
graudit▲▲▲Github: