• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP自动化白盒审批技术与实现

php 搞代码 4年前 (2022-01-24) 22次浏览 已收录 0个评论

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将结果集输出到前端,前端做扫描结果的可视化。

0x03 初始化工作


在真实的PHP审计中,遇到敏感函数的调用,比如mysql_query,我们就会不由自主地去手动分析第一个参数,看是否可控。事实上,很多CMS都会将一些数据库查询的方法进行封装,使得调用方便且程序逻辑清晰,比如封装为一个类MysqlDB。这时,在审计中我们就不会搜索mysql_query关键字了,而是去找比如db->getOne这种类的调用。
那么问题来了,在自动化程序进行分析的时候,如何获知db->getOne函数是个数据库的访问类方法呢?
这就需要在自动化分析的初期就要对整个工程的所有类与定义的方法进行搜集,以便于程序在分析的时候寻找需要跟进的方法体。
对于类信息和方法信息的搜集,应该作为框架初始)本文来(源gaodai#ma#com搞@@代~&码*网2

搞代gaodaima码

化的一部分完成,存储在单例上下文中:

同时,需要识别分析的PHP文件是否是真正处理用户请求的文件,因为有些CMS中,一般会将封装好的类写入单独的文件中,比如将数据库操作类或者文件操作类封装到文件中。对于这些文件,进行污染传播分析是没有意义的,所以在框架初始化的时候需要进行识别,原理很简单,分析调用类型语句和定义类型语句的比例,根据阈值进行判别,错误率很小。
最后,对每个文件进行摘要操作,这一步的目的是为了后续分析时碰到require,include等语句时进行文件间分析使用。主要收集变量的赋值、变量的编码、变量的净化信息。

0x04 用户函数处理



搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP自动化白盒审批技术与实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址