自动化审计入门

污点分析

所需概念

  1. source、sink、sanitizers定义
  2. ast、cfg的构建(很多文章的污点分析实现方式)
    • PHP-Parse
  3. CFG要点

自动化方案

  1. 危险函数匹配
    Seay, 没啥好说的

  2. 代码相似性比对
    一些开发者会复制其他框架的代码,或者使用各种框架。如果事先有建立对应的漏洞图谱,则可使用相似性方法来找到漏洞。

  3. 控制流分析
    在2012年,Dahse J等人设计了RIPS,该工具引入AST进行数据流与控制流分析,结合过程内与过程间的分析得到审计结果,相对危险函数匹配的方式来说误报率少了很多,但是同样的也增加了开销。RIPS初始的版本开放源代码,而后闭源进行商业化。

  4. 基于图的分析
    基于图的分析是对控制流分析的一个改进,其利用CFG的特性和图计算的算法,一定程度上简化了计算,比较有代表性的是微软的Semmle QL和NDSS 2017年发表的文章Efficient and Flexible Discovery of PHP Application Vulnerabilities。

注:Semmle就是CodeQL的开发公司,因此SemmleQL实际就是CodeQL的前身。

  1. 灰盒分析
    基于控制流的分析开销较大,于是有人提出了基于运行时的分析方式,对代码进行Hook,当执行到危险函数时自动回溯输入,找到输入并判断是否可用。

这种方式解决了控制流分析实现复杂、计算路径开销大的问题,在判断过滤函数上也有一定的突破,但是灰盒的方式并不一定会触发所有的漏洞。fate0大佬开发的prvd就是基于这种设计思路。

注:除此之外,像php-taint、rasp等应该都是这种思路。但这里的分析应该是基于代码覆盖率的。

已有的工具和思路学习

  • fate0-PRVD
    PRVD分为taint和payload两种模式。
    taint模式就是和php-taint一样对输入做标记然后分析。但是由于一些filter的成功/不成功过滤,使得分析容易误报/漏报。因此产生payload模式:直接打payload,然后在sink点观测payload。

  • 隐形人-phpvulhunter
    这个工具手工实现了php->AST->CFG的过程,虽然看大佬们的评论说有点简陋,但对于我来说很有学习的意义。
    工具核心思路是:ast—>cfg,然后检测cfg中调用了敏感函数,就停下来进行污染传播分析,进行过程间分析、过程内分析,找到对应的污点数据。然后基于数据流分析过程中搜集的信息,进行净化信息和编码信息的判断,从而判断是否为漏洞。

不错的入门资料

符号执行

概念

在计算机科学中,符号执行技术指的是通过程序分析的方法,确定哪些输入向量会对应导致程序的执行结果为某个向量的方法(绕)。通俗的说,如果把一个程序比作DOTA英雄,英雄的最终属性值为程序的输出(包括攻击力、防御力、血槽、蓝槽),英雄的武器出装为程序的输入(出A杖还是BKB)。那么符号执行技术的任务就是,给定了一个英雄的最终属性值,分析出该英雄可以通过哪些出装方式达到这种最终属性值效果。

可以发现,符号执行技术是一种白盒的静态分析技术。

知识点

  • klee解决了文件处理等导致的符号传递中断问题
  • 符号执行分为过程内分析和过程间分析。程序的全局分析是在过程内分析的基础上进行的,如果过程内分析中包含了函数调用,就引入了过程间分析。

利用

是否可以把符号执行+Fuzz应用在web的基于运行时的动态代码审计中。

Proudly powered by Hexo and Theme by Hacker
© 2021 LFY