Smart Fuzzing智能模糊测试

Posted 鸿渐之翼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Smart Fuzzing智能模糊测试相关的知识,希望对你有一定的参考价值。

BSidesLison2016-Keynote-The Smart Fuzzer Revolution by Dan Guido
原作者:Dan Guido 解读:鸿渐之翼

1988年,华盛顿大学的一个教操作系统课程的教授要求学生编写一个程序,该程序通过其他
UNIX命令进行随机输入,我们就像丢垃圾一样像程序里丢数据,我们希望能得到不同的结果。
出人意料,这是一个有效的策略。
Random:“cat /dev/urandom | program”
-Class assignment in "Advanced Operating Systems"at University of Wisconsion(1988)
Generation:Write a BNF spec->introduce anomalies
-PROTOS from OUSPG(2002)&Block-based Fuzzing from Dave Aitel(2002)
在21世纪初期,人们想设计一种特殊的数据结构来对程序测试,有很多小组在参与研究,
奥卢大学与夏威夷大学创建了protos,Dave发表了关于他基于块的模糊测试的创新性论文。
这篇论文成为shell编码器手册中重要的章节。他的论文是Fuzzing的开端。
同时我们还研究了基于突变的模糊测试,这是一种资源密集型的测试,此时的模糊测试出现了
语料集(generate data)
我们通过自己搜集的数据,进行翻转、变异、改变形式的方式生成你的语料集
所有的共同点:
Apply random mutations to well-formed inputs and observe the results.
之后Fuzzing研究者改变这个策略。
目前已经创建了测量代码覆盖率并创建最小的输入集
Measure coverage and create a minimized input set
我们就能够判断哪些数据对程序造成影响,就排除了冗杂输入数据,而不是随机运行。
一旦我们发现了crash,一个有效的崩溃输入,我们就能解释程序的状态,通过模糊测试探索它
周围的代码,崩溃输入一般是聚集在一起的。
Initial attempts at combining SMT solvers and Symbolic Execution for test
generation(EXE[2006],DART[2005])
在2005-2006年,fuzzing将具体的执行与符号相结合。
Microsoft的研究团队在2008年带来了智能模糊测试(Smart Fuzzing)的策略。
Scalable,Automated, Guided Execution(SAGE)in “Automated Whitebox Fuzz Testing”
成效:
Combine fuzzing and symbolic execution to dynamically generate new tests,
while managing"state explosion"problems
1.Record execution and symbolically evaluate trace to gather new constrains
2.Use constraint solver to produce new inputs that execise new control paths
3.Measure code coverage to rank new inputs that attain maximal testing path
解读:
1.记录输入并且象征性地跟踪新的约束求解器
2.使用约束求解器生成执行新控制路径的新输入
3.测量代码覆盖率以对达到最大测试路径的新输入进行排名
Sage被微软广泛应用在windows7中
成效:
Pre-SAGE statements like if(x+y=z)or simple checksums would stymie a fuzzer,
Now they solved easily and help find new inputs.
Sage优点:
Works on binary, no source code requierd.
Handles real,very large applications.
Does not require a cache of starting inputs,or grammers.
No fales positive.It finds real bugs and generates input that trigger them
sage并且可以让它找到BUG,它不需要开发人员测试一大堆数据。
sage可以在没有源码的情况下直接对二进制文件进行Fuzzing,比如你可以在Microsoft Office上与性能
sage在Microsoft AFL开源之外,AFL并不是那么”聪明“。
它不能像sage一样使用symboolic execution符号执行,但是AFL更容易安装使用,并且开源。
Fuzzer可以找到sequel light和Java score等漏洞。并且打开OpenSSL与openssh
Sage很聪明,但是没有微软的支持,我们无法使用,虽然AFL很笨,但是我们能轻松使用。
哪一个更好呢?
大约在2012年-2013年
DARPA已经确定这是一个问题,他们想攻击,他们认为自动发现的错误的工具能整合他们的研究,
所以这是成立Cyber Grand Challenge的计划。

Cyber Grand Challenge(CGC)
最早的蓝队防守:
团队需要构建一个Cyber Reasoning Systems(CRS)
CRS需要给出“CBs” pwnables
CRS需要找到“Proof of Vulnerability”(POV)
获得一些寄存器控制的输入,防守方需要去修复,并且保持服务器正常运行。以便其他竞争对手可以继续
搜集Flag,
CRS’s are ranked by a complex scoring algorithm(就如CTF有一套复杂的记分方式)
Every published strategy has been the same combinaation of ingredients:
-Fuzzing模糊测试
-Symbolic Execution符号执行框架
-Other program analyses(alias analysis,reachability,input dependence)
-其他程序分析(别名分析、可达性、输入依赖)
-Prioritization scheme for which problems to solve 解决问题的优先级方案
-State pruning scheme状态修剪方案
-Resource control and allocaton资源控制和分配
CRS中解决的问题:“Analysis Boosting”
我们不可能支付巨额的工资进行研究,所以我们需要“开源”,需要得到大多数人的支持,因为这样整体技术
才能得到进步。我们搜集了各种测试错误的工具,搜集了这些所有输入生成将它们放入知识库(KnowledgeBase)
我们称Minset:Minimum Set of Maximal,即为这些输入的最大代码覆盖率的最小集。我们通过最大代码覆盖率的最小集
评估最好的Fuzzing数据,接着会把这些数据共享给其他工具,如果一个模糊器卡住了,它会到Symbolic Execution框架,
该框架的程序会克服chesksum校验并且创建一个新的输入,获得更多的代码覆盖率(code coverage),接着获得更多的Minimum
Set of Maximal,接着Minimum set会将它重新Fuzzing。现在一个模糊器可以绕过测试中卡住的代码。

以上是关于Smart Fuzzing智能模糊测试的主要内容,如果未能解决你的问题,请参考以下文章

智能模糊测试工具Peach Fuzzer官方文档翻译

研究人员发明智能灰盒模糊测试工具 有可能开源

Go Fuzzing已经进入Beta测试阶段

模糊测试教程之浅记录一次Fuzzing挖洞实战

GO语言(二十九):模糊测试(下)-

Go中fuzzing系统的原理分析