软件开发培训班 >> 网络技术 >> 网络安全
PHP自动化白盒审计技术与实现 |
|
本文标签:白盒审计 PHP PHP自动化审计 0x00 前言 国内公开的PHP自动化审计技术 材料较少,相比之下,国外已经浮现了 比较优异的自动化审计实现, 比方RIPS是基于token流为 根底进行一系列的代码 综合 。传统静态 综合技术如数据流 综合、 传染 流传 综合 利用于PHP这种动态脚本语言 综合 绝对较少,然而却是实现白盒自动化技术中 比较 要害的技术点 。今日小编重要介绍一下近期的探究与实现 成就,在此抛砖引玉, 盼望国内更多的安全探究人员将精力投入至PHP自动化审计技术这一有 意思的领域中 。 0x01 根底 常识 自动化审计的实现 模式有多种, 比方直接 使用正则 抒发式 规定库进行定位匹配,这种 步骤最 容易,然而精确率是最低的 。最牢靠的思路是 联合静态 综合技术领域中的 常识进行设计,一般静态 综合安全工具的流程大多是下图的 模式: ![]() 静态 综合工作所要做的第一件 事件便是将源码进行建模,通俗丝毫讲,便是将字符串的源码转为容易于我们后续 漏洞 综合的之间 示意 模式,即一组代表此代码的数据 构造 。建模工作中一般会采纳编译技术领域中的 步骤,如词法 综合生成token,生成 形象语法树,生成操纵流程图等 。建模工作的优劣,直接影响到后续 传染 流传 综合和数据流 综合的 动机 。 执行 综合便是 联合安全 常识,对载入的代码进行 漏洞 综合和 解决 。最终,静态 综合工具要生成推断 后果,从而 完毕这一阶段的工作 。 0x02 实现思路 通过一段 工夫的 奋力,小编和小 搭档也 大体实现了一款针对自动化的静态 综合工具 。具体实现思路正是采纳了静态 综合技术,假如想 深刻了解实现思路, 可以浏览之前发过的文章 。 在工具中,自动化审计流程如下: ![]() 首先载入消费者输入的待扫描的工程目录中全部的PHP文件,并对这些PHP文件做 推断,假如扫描的PHP文件是Main file,即真正 解决消费者 申请的PHP文件,那么对这 品种型的文件进行 漏洞 综合 。假如不是Main file类型, 比方PHP工程中的类定义,工具函数定义文件,则跳过不做 综合 。 其次进行全局数据的 征集,重点 征集的信息有待扫描的工程中类信息的定义,如类所在的文件路径、类中的属性、类中的 步骤以及参数等信息 。同时对每个文件生成文件摘要,文件摘要中重点 征集各个赋值语句的信息,以及赋值语句中 有关变量的净化信息和编码信息 。 全局初始化之后,进行编译前端模块的 有关工作, 使用开源工具PHP-Parser 对待 综合的PHP代码进行 形象语法树(AST)的构建 。在AST的 根底上, 使用CFG构建算法构建操纵流图,并实时地生成 根本块的摘要信息 。 编译前端的工作中,假如发现敏感函数的调用,就停下来进行 传染 流传 综合,进行过程间 综合、过程内 综合,找到对应的污点数据 。 而后基于数据流 综合过程中 征集的信息,进行净化信息和编码信息的推断,从而推断是不是为 漏洞代码 。 假如上一步是
漏洞代码,则转入
漏洞报告模块进行
漏洞代码段的收集 。其实现的
根底是在系统环境中
保护一个单例模式的
后果集上下文对象,假如生成一条
漏洞记录,则加入至
后果集中 。当整个扫描工程
后果之后,
使用Smarty将
后果集输出到前端,前端做扫描
后果的可视化 。
|