通用代码审计思路
读《代码审计:企业级Web 代码安全架构》,其中讲了四种代码审计的思路
1. 逆向追踪,或叫回溯变量
一般是检查敏感函数的参数, 然后回溯变量, 判断变量是否可控并且没有经过严格的过滤, 这是一个逆向追踪的过程。
- 优点
- 只需要搜索相应敏感关键字, 即可以快速地挖掘想要的漏洞, 具有可定向挖掘和高效, 高质量的优点。
- 缺点
- 由于没有通读代码, 对程序的整体框架了解不够深入, 在挖掘漏洞时定位利用点会花费一点时间, 另外
对逻辑漏洞挖掘覆盖不到
2. 正向追踪,或叫跟踪变量
先找出哪些文件在接收外部传入的参数, 然后跟踪变量的传递过程, 观察是否有变量传入到高危函数里面, 或者传递的过程中是否有代码逻辑漏洞, 这是一种正向追踪的方式, 这样的挖掘方式比逆向追踪挖掘得更全,但可能没有逆向追踪快。
3. 直接挖掘功能点漏洞
根据自身的经验判断该类应用通常在哪些功能中会出现漏洞, 直接全篇阅读该部分功能代码。
4. 通读全文
回溯参数这种方法并不是和运用在企业中做安全运营时的场景, 在企业中做自身产品的代码审计时, 我们需要了解整个应用的业务逻辑, 才能挖掘到更多更有价值的漏洞, 一般这种方法对新手难度可能有点大,老手一般喜欢这种方法。
通读全文的方法
- index 文件, index是一个程序的入口文件, 所以通常我们只要读一读index文件就可以大致了解整个程序的架构, 运行的流程, 包含的文件, 建议最好先将几个核心目录的index文件都简单读一遍
- 函数集文件, 一般在index文件中都会包含函数集文件, 通常命名为functions, common等关键字, 这些文件里面都是一些公共的函数, 提供给其他文件统一调用。
- 配置文件, 通常命名中包括config 关键字,里面包含一些功能性配置选项以及数据库配置信息, 还可以注意下参数值是用单引号还是双引号, 如果是双引号, 则很可能会存在代码执行漏洞; 还需要关注以下数据库编码。
- 安全过滤文件, 文件过滤文件对我们做代码审计至关重要, 关系到我们挖掘到的可疑点能不能利用, 通常命名中有 filter, safe, check 等关键字, 这类文件主要是对参数进行过滤。
- 优点
- 可以更好地了解程序的架构以及业务逻辑, 能够挖掘到更多, 更高质量的逻辑漏洞, 一般老手会喜欢这种方式。 而缺点就是花费的时间比较多, 如果程序比较大, 读起来会比较累。