自动化代码审计的四大思路及简单实现参考
思路一
简单正则匹配危险函数,跟入函数看输入变量是否可控。
优点
简单,可用程序完成不少工作。
缺点
- 误报多,需要一个个确认输入变量。
- 不容易发现二次注入之类二次漏洞。
参考
- seay代码审计工具
思路二
解析程序语法树,分析危险函数调用关系
优点
- 纯静态分析,可全由程序处理
- 可发现漏洞类型全,误报少
缺点
- 实现难
- 无法直接处理面向对象类型的代码
参考
RIPS
这个rips已经做的很好了,所以还没有自己去实现
思路三
将程序当作黑盒,外部通过工具查找输入,做出各种fuzz。观察并记录黑盒所有操作,如web请求,sql执行记录/错误记录,文件系统变更情况,php代码执行记录。而后和fuzz变量做比对,找出对应结果(或者可以通过时间来找出对应),记下fuzz请求即为漏洞点。
优点
- 误报较少
- 无人工
缺点
- 需要匹配fuzz请求和结果正则(可能需要正则)
- 需要实现各种记录工具,较难
- 如何记录fuzz请求和相应结果对应关系??目前可以想到时间或正则,但各有缺点
- 效率极低
参考
http://cnki.scstl.org/KCMS/detail/detail.aspx?filename=1015528099.nh&dbcode=CMFD&dbname=CMFD2015
这个思路是之前忽然想到的,但是还没有实现,因为觉得效率会极低,没想到知网搜到一个文章……
思路四
通过Hook PHP底层函数,获得PHP执行时的如下信息:
- 当前函数名称
- 当前文件名称
- 当前参数
当执行到危险函数时,跟踪执行流,找到危险函数的参数来源,如果来源可控,且没有过滤函数,那么认为是有漏洞
优点
- 可以直接分析任何架构的PHP代码
- 误报低
缺点
- 需要人工执行程序的各个功能
- 开发难度高,需开发PHP扩展,目前的几个有关扩展几乎都存在问题
参考
最近写了这个的Demo,不过还没有完全完成,有兴趣的可以跟我一起看看。
目前完成了函数栈追述,函数参数可控定位,但是还有一些小问题没有解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)