Peach Fuzzer testing

2024-03-13 12:08
文章标签 testing fuzzer peach

本文主要是介绍Peach Fuzzer testing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://bbs.pediy.com/archive/index.php?t-75032.html
很多朋友给我反馈说《0day安全:软件漏洞分析技术》中测试方面讲的一带而过,太薄太弱。于是我想顺便把这些东西总结一下,也作为《0day》第二版的一个主要更新的章节。(另一个主要更新将是vista的安全机制剖析与VS2005中的安全编译选项)


开始之前声明下,这些知识的一个很头疼问题就是文档不全,寡人一个人势单力薄,很难全面掌握,只是写出自己工作和学习中的一些经验体会。这次系列教程想做成类似讨论的形式,大家在学习完一节后自己又发现什么tips和诀窍的话,希望能在跟贴中拿出来一起分享,一起进步。


独乐乐,与人乐乐,孰乐?


大概准备分成以下几个部分来讲这块内容:


第一讲:fuzz platform的架构与peach的入门
第二讲:PNG文件格式fuzz实验1——数据定义
第三讲:PNG文件格式fuzz实验2——drop evil file
第四讲:PNG文件格式fuzz实验3——monitor exception
第五讲:PNG文件格式fuzz实验4——handle GUI problem
第六讲:网络协议fuzz实验
第七讲:…如果寡人还活着,且还有力气的话…


这是个构思,还没有成为现实,而且能有百分之多少成为现实,咳咳,我也说不上来。另外教程中给出的都是最简单的fuzzer,不要指望直接把这些代码跑起来就能得到0day。However,完成实际fuzzer的知识点将被尽可能多的覆盖到。


开始前在说一句:来听寡人在这里鸡歪的朋友应该至少理解了《0day安全:软件漏洞分析技术》中前5章的内容,否则建议还是先去学下那些基本原理,要不然辛辛苦苦crash了软件,连是defects还是vulnerbility都分不清楚。


按照对能力的要求,个人认为 漏洞挖掘 >漏洞分析>漏洞利用


言归正传,今天第一次,从最基本最简单的开始。


忽略fuzz的历史渊源之类的东西,愿意了解的去翻下0day第16章,稍微写过一点。多罗嗦一句,加上自己的一点感触:成熟精准的fuzz测试应当算是种介于白盒和黑盒之间的灰盒测试吧。


一个成熟的fuzz platform应该具有以下几个模块:


1:原始数据定义模块:一般都需要测试人员自己完成,比如定义原始数据包格式或者文件格式等
2:数据加工(变异)模块:用来在原始数据定义的基础上,衍生出成千上万的测试用例,如畸形文件或者畸形数据包等
3:测试逻辑:用于运行目标程序,发送测试用例,关闭目标程序。如果测试协议的话,发送测试用例有可能需要模拟若干次用于握手的数据包;测试GUI程序的文件格式的话,说不定还要模拟鼠标点击等。
4:错误监测与日志模块:在测试过程中,监测一切相关进程的各种exception、crash等信息,并在错误发生时保存现场,记录对应的case,栈信息,寄存器信息等重要状态,以备后面的分析之用。


说的简单点,fuzz就是要自己写个数据格式的模板,然后让platform按照这个模板衍生出许多evil的数据,然后把这些数据丢给想测试的程序,看他们崩不崩。。。


在这四大块中,“数据变异模块”和“错误检测与日志记录模块”应当由fuzz platform提供
数据定义一般得由测试人员自己来写。最终的fuzzer能不能找到问题,能不能找准问题的关键就在这里。你对数据结构理解的越深,对程序思考的越多,写出来的fuzzer就越高效。


测试逻辑一般有测试人员部分完成。最简单的就是一条命令run 某个程序把测试用例跟在后面当参数。要是协议,就得加上若干个send revive和状态判断逻辑了,遇到GUI的话可能还得去模仿鼠标点击。




优秀的fuzz platform应当提供方便的数据衍生变异功能。在《0day》中简单介绍过使用C语言的SPIKE。在这个教程中我将着重介绍另外一个非常优秀的fuzz platform——peach(这里我就不把它僵硬的翻成蜜桃了)


Peach使用Python编写,开源,你甚至可以为它随意添加模块,扩展出更强大的功能。前面提到的四个部分在peach platform中结构清晰,功能明确。Peach的测试对象包括了几乎所有常见的fuzz对象,例如文件结构,com,网络协议,API等等


今天第一讲,我们就来简单的认识一下这个platform,以后的实验也会基于这个platform来讨论。


Peach的作者是Michael Eddington,不知道peach这个名字的来源和他的大肚子有没有关系,呵呵。首先去网站下载peach:


http://peachfuzzer.com/


下载,安装,注意安装前需要若干python的preinstall,缺的话自己去找来下


假设安装目录是c:\peach


打开安装目录可以看到有一个sample子目录,里面有若干个.xml文件。


使用Peach时实际上主要工作就是定义这样一个xml文件指示platform去做测试。Michael Eddington把这样的xml代码文件叫做peach pit。


用XML编辑器或者直接用VS2005(推荐用VS哦,后面会告诉你为什么)打开这些文件中的任何一个,可以发现peach pit文件实际上很简单,基本上总是包含以下这几个部分:


<?xml…版本,编码之类…>
<Peach …版本,作者介绍之类…>
<Include ...注意有两个文件是永远都要被包含进来的/>






<DataModel >
…原始数据结构定义…
</DataModel>








<StateModel >
…测试逻辑,如收到什么样的数据包之后,发出什么样对应的数据包…
</StateModel>






<Agent >
…检测exception,crash等…


</Agent>






<Test >
…指定将要使用到的state,agent,publisher等…
</Test>






<Run >
…Fuzzer执行的进入点,相当于main吧…
</Run>


</Peach>






1:整个文件被一个“大”标签<Peach> </Peach>括着
2:文件中的第二级标签包括Include,DataModel,StateModel,Agent,Test,Run共6种。(这六种标签并不是全部必须的)
3:Include包含的外部文件,其中defaults.xml和PeachTypes.xml是必须的,里边含有peach的基本方法,类,数据类型等等
4:DataModel用于定义数据结构,此标签下有下级标签若干级、若干种。使用这些子标签可以轻易的定义数据的类型,长短,各个数据块之间的关系,甚至CRC校验之类的东西也能轻易的定义进去。可以定义多个DataModel,多个DataModel之间可以有关系也可以根本无关。后续文章会着重讲解。
5:StateModel用于定义测试的逻辑,实际上就是一个状态机。下属标签包括state,每个state中又可以包含若干个action标签。State表示一个状态,不同的state之间可以根据一些判断条件进行跳转。Action用于执行打开文件,发送数据包之类的命令。后续文章会着重讲解。
6:Agent是一个稍微复杂点的概念,其中一个非常重要的功能就是用来监测crash等。今天的讲座中暂不涉及,在后面稍微高阶点的应用讨论中会集中讲解
7:Test这个标签域相当简单,一般只是制定使用哪个Agent,哪个StateModel,用什么方法发数据(网络还是文件?),有时还会在这里指定使用什么方法加工(变异)数据
8:Run应该是最简单的标签了,有点像我们熟悉的main函数,指定当前这次fuzz测试使用那个Test。


对照我们上面的这个简单介绍,我们先high level的看一下samples目录下那个最最简单的HelloWorld.xml吧。


Include 标签和前面那些介绍版本信息和作者信息的飘过不说了。
DataModel就定义了一个字符串,“Hello World!”
StateModel中只有一个状态,当然也就不存在状态转换之类的工作了
由于实在太简单,这里根本不需要Agent了
再看Test,看标签里边的第二行,Publisher有很多种类,代表把我们加工好的畸形数据(测试用例)往哪里丢,这里的stdout表示直接屏幕输出,常用的还有文件输出,socket输出等等。
最后的run是最没啥好看的,不说了。


我们要做的就是运行下这个Peach Pit文件
C:\peach\peach.py C:\peach\samples\HelloWorld.xml


我们可以看到屏幕上一开始打印“Hello World!”,之后Peach会以这个原始的字符串为模板加工出许许多多畸形的数据出来,包括了超长串,NULL结束符缺失的非法串,重复,格式化串等等等等有可能引起程序出错的,然后依次打印出来。


这个helloworld基本演示了peach pit文件的基本结构和peach运行的框架,随着我们介绍的深入,我们会一点一点讨论到扩展出一个能够实际应用的peach pit出来,如果可能的话,还会再讨论一些扩展Peach的话题。


有点困了,下次见吧,如果等不急就去peach的网站看 Tutorial或者samples文件夹下面的代码吧。下次我们集中讲数据的定义,并且要定义出一个PNG文件模板出来。 

这篇关于Peach Fuzzer testing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804825

相关文章

阅读笔记——《AFLNET: A Greybox Fuzzer for Network Protocols》

【参考文献】Pham V T, Böhme M, Roychoudhury A. Aflnet: a greybox fuzzer for network protocols[C]//2020 IEEE 13th International Conference on Software Testing, Validation and Verification (ICST). IEEE, 202

Vision SDK for Android教程(四)Testing and development

Testing and development Testing visual detection and classification 你可以通过把相机对准预先录制好的在单独显示器上播放的录像来测试一些基于探测和分类的特征。 Device requirements 你必须使用安卓真机来开发和测试和Vision相关的产品。你可以使用内置相机或者一个外接相机的物理设备,不能再Android s

Go-Testing

Go-Testing 要点 Go的自动化测试框架比JUnit、PyUnit等更加轻量级。要点如下: - 测试代码以xxx_test.go方式命名 - 测试代码中import “testing” - 测试函数形如 func Testxyz(t *Testing.T) {…} - 执行测试:go test 示例 比较要创建一个mymath package。 mymath.go packa

About Unit Testing单元测试摘要

这里的unit是每次所测试的一小独立的代码片段。对于面向对象语言而言,unit相当于一个class。 Unit Test的主要特点有: 1、独立于整个系统 2、每次验证特定的行为 3、每个测试之间相互独立 4、结果显然正确 Unit Test的测试步骤简单,只需要载入代码之后右键以Junit Test的形式运行即可 一般代码中bug的典型分布,占最大比例的是Logi

Python 中的 Unit testing 文件写入

在 Python 中进行单元测试时,有时候需要测试文件写入操作。为了模拟文件写入并进行单元测试,你可以使用 Python 的 unittest 模块,并结合 io.StringIO 或 tempfile 模块来模拟文件操作。 1、问题背景 在 Python 中,为 ConfigParser 编写一个简单的包装器,以便于存储和检索应用程序设置。 包装器具有两个方法,read 和 write

Testing Extreme Programming

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp The rapid rise in popularity of Extreme Programming (XP) has put the practice of software testing squar

Effective GUI Test Automation: Developing an Automated GUI Testing Tool

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp Software test engineers: here is the first book to teach you how to build and use a fully automated GUI t

Effective software testing: 50 specific ways to improve your testing

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp Many of the examples are in the realm of the obvious, but not always clearly implemented. For example,

The Web Testing Companion: The Insider's Guide to Efficient and Effective Tests

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp * Written by one of Microsoft's key testing trainers, this hands-on tutorial and reference explains why,

The art of software testing

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp This long-awaited revision of a bestseller provides a practical discussion of the nature and aims of soft