Proj THUDBFuzz Paper Reading: AutoFuzz: Automated Network Protocol Fuzzing Framework
Abstract
AutoFuzz: smart, man-in-the-middle, sme-deterministic network protocol fuzzing framework.
方法:
- 建立客户端-服务器之间的交流FSA
- 学习消息语法,语法中包含域和简单类型信息(learns individual message syntax, including fields and probable types)
- 使用FSA引导来fuzz客户端或者服务器
实验:
对多个FTP实现进行了Fuzzing
1. Intro
P1: 网络协议带来严重安全问题
P2:
dumb fuzzer: 对目标的通讯协议没有任何先验知识,随机发送输入,例如ProxyFuzz。缺点:效率较低
smart fuzzer: 明白协议的状态机,消息语法和能够填入的域的类型。缺点:需要人力改编
P3: Previous Work
2:Network Protocol Analysis Using Bioinformatics Algorithms
4:Prospex: Protocol Specification Extraction
5: A Model-based Approach to Security Flaw Detection of Network Protocol Implementation
5能够通过对协议实现的了解,从历史会话中合成抽象行为模型(给定许多network traces,算法会构建加上最小化生成一个FSA)。其主要特点是消极合成+削减部分FSA状态。(passive synthesis + partial FSA reduction)。FSA的建构关键是abstraction function,abstraction function能够将类似的信息映射到某个特殊的抽象表示上。测试人员需要提供两个函数,一个将输入映射为输入结构体,另一个将输出映射为输出结构体。
4则是通过自动抽取协议规范来建构FSA和信息类型的。
这几项研究都没有公开源码以供后来者研究。
P4:
AutoFuzz用户端服务端都能做,但是本文将其局限在服务端。
步骤:
- 通过历史会话,抽取网络协议规范
- 使用5相同的方法构建FSA
- 使用2相同的方法获取消息中域的类型
本文提出新概念: GMS(Generic Message Sequence),Fuzzing functions能够在GMS上进行操作,这样就无需像5一样提供protocal specific fuzzing functions。
cluster则是相似的GMS的集合。
2. Framework Overview
2.1 主要组件
- GUI: 允许用户控制fuzzer行为
- Proxy Server: 记录修改application level traffic
- 协议标准Extractor: 抽取网络协议状态
- Fuzzing Engine: 包括确定性和随机性两个阶段。确定性将预先编写好的数据放入GMS,不确定性的随机略过静态或者变量相关的数据域,在FSA上做随机transitions,在GMS上注入随机数据。
3. Generic Message Sequence Construction
- 使用聚类技术将类似的(intput或者output)messages聚合起来
- 在每个cluster上使用sequence aligment algo
- 为每个cluster生成GMS
- 将协议FSA中每个transition都和对应的GMS联系起来。
4. Fuzzing Algo
AutoFuzz中有一些已经定义好的可以后期拓展的fuzzing functions。