在最近项目的测试中,我们引入了模糊测试(Fuzz testing)。在这个过程中,接触到了Sulley,一款用Python实现的用于网络协议fuzz testing的开源测试框架。跟其他的开源工具比起来,使用上比较灵活,而且也很方便。

举例来说,在测试过程中如果出现了目标程序crashing的情况,会导致后续的测试无法继续进行下去。针对这种情况,Sulley提供了一个用Python实现的进程监控的Agent(process_monitor.py),它的功能就是类似于watchdog,一旦检测到程序崩溃,会自动重启目标程序,使后续测试能顺利进行下去。如果程序的内部数据,比如某些配置已经由于之前的Fuzz testing被破坏掉了,只是简单重启目标程序还不足以让后续的测试正常的进行,可以选择在测试之初,直接把目标程序装在vmware虚拟机上,同样的,Sulley也提供了一个用来控制vmware虚拟机的Agent(vmcontrol.py),可以完成对虚拟机及snapshot的操作。有个这个Agent的协助,我们可以在目标程序环境准备好之后但是测试开始之前,对虚拟机做个vsnapshot,然后在测试开始之后,一旦发现crash,可以利用这个Agent直接把虚拟机rollback到之前预存好的snapshot状态,然后测试继续,够直接吧,呵呵。

网上关于Sulley的资料不多,在这里做点笔记,供大家参考。

什么是模糊测试(Fuzz testing)

模糊测试(Fuzz testing),根据WiKi上给出的定义,就是指一种软件测试方法:通过给程序提供不合法的,没有考虑到的,随机的输入,一旦程序出错了(比如crashing,或断言失败),则Bug被发现。根据程序输入的不同,模糊测试可以应用在很多方面,比如文件格式,网络协议,环境变量,键盘,鼠标事件,数据库,共享内存等,当然最常见的还是文件格式和网络协议。

根据这个定义,要成功实施Fuzz testing找出程序中的bug,在测试过程中我们需要解决以下2个问题:

- 如何生成随机但有效的输入

- 何能够对目标程序监控以保证及时地发现, 定位目标程序错误

而这也正是模糊测试工具力图解决的问题。

什么是Sulley

”工欲善其实,必先利其器“,为了能更方便地进行Fuzz testing,工具自然是少不了的。Sulley,正是一款用Python实现的开源Fuzz testing框架,主要应用于网络协议方面的测试. 目前现在关于这方面的测试工具也挺不少,不管是开源的(比如历史悠久的SPIKE, 或者是本文介绍的Sulley)还是商业的(比如Mu Dynamics公司的产品),更多可以看这里.

事实上,在Sulley出来之前,这方面的工具已经有一些了,但是为什么Sulley的作者还要选择重新造轮子呢?根据Sulley的文档,他这么做的理由是,当时已有的工具主要是专注在”数据生成“部分,而仅仅做到这一步对Sulley是不够的,因为Sulley设计的目标是:不仅要简化数据生成,同样要简化与目标系统的之间的数据传输,以及目标系统的监控。因此我们可以把刚才这段话理解成,Sulley要做的是一个能支持fuzz testing的整个测试流程的框架。在这一点上,显然Sulley的定位比起之前的工具高出了很多。而且事实上,Sulley的作者也不算是在造一个全新的轮子,比如在具体实现Sulley的时候,他也借鉴了一些当时已经成熟很成熟的Fuzz框架(SPIKE)的经验,比如用“块”结构的方式来构造数据,这点从Sulley构造Request所用的API接口就可以看出来,包括对于特定数据类型所用到的fuzz library也都直接从SPIKE拿过来,这些内容,我们会在后面的文章中介绍。

好了,基本的背景知识了解完毕,接下来我们会开始介绍Sulley的整个框架中四个主要的组成部分:数据表示,会话管理,Agent 以及 Utilities.

(待续……)

By Kevin.Y

转载:http://blog.csdn.net/superqa/article/details/4829585

模糊测试框架 Sulley 使用手记相关推荐

  1. 模糊测试框架 Sulley 使用手记 (一)

    在最近项目的测试中,我们引入了模糊测试(Fuzz testing).在这个过程中,接触到了Sulley,一款用Python实现的用于网络协议fuzz testing的开源测试框架.跟其他的开源工具比起 ...

  2. 模糊测试工具Sulley开发指南(2)——与Peach比较

    基于已知漏洞的ftp服务器的漏洞挖掘 我们的测试对象是EasyFTP 1.7.0.11,已知漏洞如下(github): 命令 个数 CWD 1 LIST 1 - 11 Peach 简介 Michael ...

  3. EPF:一种基于进化、协议感知和覆盖率引导的网络协议模糊测试框架

    本文系原创,转载请说明出处:from 信安科研人,关注公众号信安科研人,获取更多安全资讯 文章目录 实验 工具的安装 1.安装AFL++ 2.安装epf 对IEC104协议库进行fuzz 实验准备 使 ...

  4. 模糊测试工具Sulley开发指南(3)——整体介绍

    我们开始来讲一些Sulley里面的整体介绍,方便我们能系统地了解Sulley的架构,了解Fuzzing的思路,最后能生成py文件来具体运行fuzzing.这章主要是整体印象,下一章开始会讲具体的模块以 ...

  5. 模糊测试工具Sulley开发指南(1)——安装Sulley(多图,超详细)

    本教程是针对的是windows上面的安装,至于其他系统的安装有时间的话会贴出来,本教程翻译自OpenRCE/Sulley-GitHub-Wiki官网教程,但是里面有一些错误我会更正指出.值得一提是,我 ...

  6. 模糊测试之SPIKE测试框架简介

    模糊测试简介 模糊测试概述 模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法.其核心思想是自动或半自动的生成随机数据输入到一个程序中,并监控目标程序异 ...

  7. 【转】模糊测试(fuzzing)是什么

    一.说明 大学时两个涉及"模糊"的概念自己感觉很模糊.一个是学数据库出现的"模糊查询",后来逐渐明白是指sql的like语句:另一个是学专业课时出现的" ...

  8. 2021年软件测试工具总结——模糊测试工具

    ~ 什么是模糊测试?~ 模糊测试(Fuzz Testing)是一种自动化的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞.模糊测试的核心是自动或半自动的 ...

  9. IoT 设备网络协议模糊测试工具boofuzz实战

    0x10 物联网设备模糊测试 对于物联网设备,比如家用路由器模块,UPNP.HTTP server.Telnet都是用户经常接触的模块,通常也能够与外界交互,从而提供了入口.如果这些模块或者使用的协议 ...

最新文章

  1. 让AI训练AI,阿里和浙大的“AI训练师助手”是这样炼成的
  2. Spring MVC POST中文乱码解决方案
  3. 单点登录与权限管理本质:cookie安全问题
  4. BZOJ 1552/1506 [Cerc2007]robotic sort
  5. [C++11]弱引用智能指针weak_ptr初始化和相关的操作函数
  6. 业务系统里面常见的方法接口设计
  7. JAVA进阶教学之(String类的构造方法)
  8. NeurIPS | 17篇论文带你展望图机器学习发展趋势
  9. Spring boot - 整合 Redis缓存(下)
  10. mysql目录树_MySQL B+树目录及索引优化_mysql
  11. php session 为空,ThinkPHP_session问题_dump显示session为空
  12. python 物理学中的应用_大学物理中Python的应用
  13. java中sql语句怎么把开始和结束时间作为参数写sql查询_java程序员跳槽的一道坎,大公司面试官都会问的Mybatis...
  14. Google Wave 的失败给现代实时协作办公的一个重大教训!
  15. Ubuntu配置 PPTP 服务器端
  16. c++构造函数、析构函数为什么不能取地址
  17. 微言Netty:分布式服务框架
  18. 天使投资喜欢什么样的商业计划书
  19. Odoo发邮件被服务器退回
  20. 计算机命令提示符开热点,win10电脑可以使用cmd命令创建wifi热点吗

热门文章

  1. 2022电大国家开放大学网上形考任务-客户关系管理非免费(非答案)
  2. unity手游之聊天SDK集成与使用一
  3. 利用冒泡法对10个数字进行排序
  4. 红米4刷linux,极客精神,国外大神将红米Note 7刷上了Ubuntu
  5. 什么是BQB认证?BQB认证蓝牙模块
  6. java下载pdf_java实现文件下载..pdf
  7. Java项目开发如何设计整体架构
  8. html用于排版标题标签,HTML常用标签(示例代码)
  9. 《计算机网络 自顶向下方法》(第7版)答案(第二章)(二)
  10. 蓝蓝算法06--输出链表中倒数第k个结点