中文译名:AFLNET:网络协议灰盒模糊器 作者:Van-Thuan Pham 单位:蒙纳士大学 国家: #澳大利亚 年份: #2020年 来源: #IEEE_ICST_CCFC 关键字: #fuzzing 代码地址: https://github.com/aflnet/aflnet 笔记建立时间: 2023-06-23 10:50
现状
当前的模糊测试器对协议进行模糊测试的效果不好
- 缺乏针对状态的变异策略
- 需要已知协议模型
方法
AFLNET使自动状态模型推理和覆盖引导模糊协同工作; 模糊化有助于生成新的消息序列来覆盖新的状态,并使状态模型逐渐更加完整。同时,动态构建的状态模型通过使用保留消息序列的状态覆盖和代码覆盖信息,帮助将模糊测试推向更重要的代码部分。
- 输入是捕捉的流量pcap文件
- 使用wireshark自动提取request序列
- request sequence parser生成初始信息序列语料库
- 使用协议规格信息提取单个请求
- 首先从pcap文件中过滤出响应,利用响应跟踪client的请求
- 识别每个跟踪中消息的开始和结束(利用特定报头和结束符)
- 按照相应的服务器状态转换顺序将每个消息关联起来(通过逐个发送消息和解析响应来完成的。)
- 信息序列语料库的形式是信息序列的链表
- State Machine Learner 利用服务器响应,并用新观察到的状态和转换增强已实现的协议状态机 (IPSM)。
- 通过提取response中的状态码实现
- AFLnet维护一个状态语料库,包括状态条目列表(包含状态相关信息)和将状态条目列表映射到对应信息序列条目的哈希映射
- Target State Selector利用IPSM的信息来选择AFLnet聚焦的下一个状态(倾向于未出现,很少出现的状态)
- 利用启发式算法
- 例如选择状态s的概率和变异后的消息序列中已执行了s的比例成反比,说人话就是s执行的越少越容易被选择
- 为了最大化发现新状态转换的可能性,AFLNET优先选择在以前选择时特别成功地增加了代码或状态覆盖率的状态。
- 值得注意的是Target State Selector在初期是随机选择,只有在积累了足够多的状态信息后才会开始利用启发式算法进行选择
- Sequence Selector在Target State Selector选择了状态后,利用哈希映射选择一个可以到达已选状态的消息序列(随机选择)
- Sequence Mutator是用协议感知的突变操作符(protocol-aware mutation operators)增强了AFL的fuzz_one方法。
- 基于Sequence Selector选择的序列M生成M‘, 并且保证M’同样可以达到状态s
- 为了确保能M‘也可以达到状态s,AFLnet将序列M分为M1、M2、M3,只对M2进行变异,组合后得到M'
- M1是到达状态s的序列
- M2是出于状态s的序列
- M3是剩下的序列
- 变异的操作称之为协议感知的突变操作符,很高大上,其实还是变异的老操作(替换插入复制删除),区别是应用在消息层面,除此之外,仍然保留了字节级别的变异
- 如果M’出发了新状态或者新的状态转换或者出发了server的源代码的新分支,则也会被加入语料库
原文第四页给了个例子