漏洞挖掘技术简介

1. 漏洞挖掘概述

1.1 Fuzz测试

这是一种黑盒测试,与基于功能性的测试有所不同,Fuzz主要目的是"crash"、"break"、"destroy"。

Fuzz的测试用例往往是带有攻击性的畸形数据,用以触发各种类型的漏洞。

Fuzz测试的优点:很少出现误报,能够快速找到真正的漏洞
Fuzz测试的缺点:永远不能保证系统中已经没有漏洞

1.2 学术界与工业界的区别

学术界偏向于对源代码进行静态分析,直接在程序的逻辑上寻找漏洞。方法和理论有:(可追溯于1976年在ACM Computing Surveys上的论文Data Flow Analysis Software Reliability)

  • 数据流分析
  • 类型验证系统
  • 边界检验系统
  • 状态机系统等

1.3 审计源代码的工具

  1. Fortify在编译阶段扫描若干安全风险
  2. Rough Auditing Tool for Security(RATS)用于分析C/C++语言的语法树,寻找存在潜在安全问题的函数调用
  3. BEAM(Bugs Errors And Mistakes),IBM的静态代码分析工具,使用数据楼分析的方法,分析源代码的所有可执行路径,以检测代码中潜在的bug
  4. SLAM用于检测驱动中的bug
  5. Flaw Finder用Python语言开发的代码分析工具
  6. Prexis可审计多种语言的源代码,审计的漏洞类型超过30种

2. 动态测试技术

2.1 SPIKE

SPIKE是Protocol Fuzz(针对网络协议的模糊测试)工具
基于Block的数据定义方法

spike运行在linux环境下,当然对代码进行一定的修改之后就可以运行在windows上。
Dave Aitel实现了一套功能强大的API和数据结构用于定义数据块。SPIKE就是这样一套函数与数据结构的集合。

Hello World用例:

2.2 beSTORM简介

由Beyond Security安全公司开发,运行在windows上的一款全能型安全审计程序,其利用模糊测试技术实现对网络协议的安全测试。

3. 静态代码审计

Coverity是用来提高软件质量的源代码静态分析工具。
Coverity使用checker模块来检测漏洞,默认情况下的checker包括:

  1. C checkers,内存错误、缓冲区溢出、函数的参数及返回值
  2. Concurrency checkers,线程同步、锁机制等
  3. Security checker,可信数据流的分析、字符串溢出等

所有静态代码分析的理论和技术都面临的棘手问题:
如何处理程序逻辑中由动态因素引起的复杂条件分支和循环