0

Code Audit

 2 years ago
source link: https://blue-bird1.github.io/posts/code-audit/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Nov 26, 2019

Code Audit

代码审计是白盒测试的重要部分,对它的自动化探索也从未停止,但是在现实环境复杂度下现有的工具 实用性并不用.只能实现发现简单漏洞.本文讨论现有的代码审计工具和理论.

自动化代码审计

介绍常见的自动化审计

最简单的方法自然是不对代码进行分析 直接进行正则匹配,发现危险模式.例如

eval($GET['xxx'])

自然就是一种危险模式,缺点不然而喻误报率高 检测率低. 优点则是容易实现 很简单就能集成到ci上,作为一种代码规范 自动不需要考虑误报率这个问题了.
(检测出来就是你代码不符合安全规范)

污点分析在安全人员的手工审计思路上可以体现为 先搜一下危险函数, 然后看看危险函数参数可不可控,在分析可不可控中 需要看之前的代码.

以下是现有工具的基本实现逻辑
污点分析基于对代码路径的分析,首先也需要标记危险函数和输入源(在php一般可以认为是$GET, $POST, $COOKIES).
和安全函数 然后对代码进行解析 生成语法树. 这方面已经有多个库实现了.
再寻找标记的危险函数和其参数, 然后参数就是输入源 基本可以确认是漏洞了. 如果不是 需要进行回溯 确认这个参数的来源. 在这个过程如果遇到安全函数进行过滤,则可以认为这里不存在漏洞.

污点分析理论上是没有问题 只是一种审计思路 当然在代码实现上存在一些问题.
例如安全函数过滤后并不能真的确认没有问题了, 换做真人审计肯定是要确认这些函数的效果. 这个问题在mvc框架下非常明显, 框架使用的安全函数太多了.

要解决上面的问题, 彻底解析所有php代码,但基础函数并不能分析,必须提供基础函数的数据. 理解这些代码到底起了什么作用.

最后代码审计工具只需要声明 某函数不应该可以输入什么样的参数.例如 echo函数 不应可以输入 <xxx>的参数.
这里的判断可以归结于一个 约束求解. 首先一个外部输入源是不存在约束的,可以任意输入 然后例如通过intval函数后添加了一个约束 这个参数只能是0-9.
显然这种约束后 是不可能存在<xxx>的解的.

这种方法的优势很明显 但是实现非常困难 光是语义分析就没有已实现的例子.

本文总结了常见的自动代码审计实现,但自动化归自动化. 我们安全人员在审计时需要考虑这次审计对自身技术有提升么?重复在一些低劣cms上审计 固然是容易挖漏洞刷cve 但是对自身技术没什么帮助.

http://blog.fatezero.org/2018/11/11/prvd/
https://wooyun.js.org/drops/PHP%E8%87%AA%E5%8A%A8%E5%8C%96%E7%99%BD%E7%9B%92%E5%AE%A1%E8%AE%A1%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%AE%9E%E7%8E%B0.html


937 Words

2019-11-26 04:56 +0000


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK