AFLNET:一种用于网络协议的灰盒模糊器-论文笔记
现有服务器模糊测试的困难性:
- 服务器具有庞大的状态空间
- 服务器的响应依赖于当前消息和内部服务器状态
- 现有模糊测试方法在处理服务器模糊测试时的局限性
- 协议规范和实际协议实现之间的不匹配
AFLNet的创新(解决问题):
- 变异方法:AFLNet采用了变异方法,通过对初始语料库中的原始消息序列进行变异来构建测试输入。这样可以生成多个变体,用以增加代码或状态空间覆盖率,进一步提高测试效果。
- 利用状态反馈:AFLNet利用服务器的响应代码作为状态反馈来指导模糊测试过程。通过分析反馈信息,AFLNet能够确定模糊测试中所涵盖的服务器状态,从而实现针对状态空间的引导和优化,提高测试效率和发现潜在漏洞的几率。
- 无需协议规范或消息语法:与现有协议模糊测试器不同,AFLNet不需要手动提供协议规范或消息语法。它以实际客户端与服务器之间记录的消息交换作为初始语料库,减少了对规范的依赖,并能更好地捕捉到实际协议实现中可能存在的差异。
现有模糊器无法有效地检测协议漏洞的原因:
- 协议具有状态:协议通常涉及到服务器和客户端之间的消息传递和状态转换。服务器根据先前消息的处理结果和当前状态生成响应。然而,经典的模糊测试工具往往无法理解协议的状态信息,无法模拟真实场景下的消息交互。
- 消息结构和顺序:协议规定了消息的结构和顺序,只有按照规定的方式发送消息,服务器才能正确处理。经典的模糊测试工具通常不了解消息的结构和顺序要求,只是随机生成字节进行模糊测试,无法产生有效地触发协议漏洞的消息序列。
- 缺乏协议规范:有些协议没有明确的规范或文档,只有实现的代码可供分析和测试。这使得模糊测试工具很难确定有效的测试输入和预期的响应,无法充分覆盖协议实现中的所有漏洞。
Introduction
网络协议漏洞发现的必要性:
网络协议用于互联网服务器之间或与客户端之间进行高效可靠的通信。协议指定了两个或多个在线方之间可以交换的消息的确切顺序和结构。然而,从世界任何地方都能与服务器进行通信的能力为远程代码执行攻击提供了充分的机会。
现有模糊器面临的几个挑战:
(基于覆盖率的灰盒模糊器CGF和有状态的黑盒模糊器SBF)
- 服务器是有状态且驱动消息的。它接收客户端的一系列消息(也称为请求),处理这些消息并发送适当的响应。然而,实现的协议可能并不完全对应于指定的协议。
- 服务器的响应取决于当前消息和当前内部服务器状态,而这些状态受之前消息控制。同时,像AFL和其扩展版本这样的基础CGF模糊测试器既不知道服务器状态信息,也不知道要发送的消息的所需结构或顺序。这些CGF模糊测试器主要被设计用于测试无状态程序(例如文件处理程序),这些程序针对当前输入生成输出,在这种情况下不维护或考虑任何内部状态。
目前的CGF为测试协议所实现的解决办法:
- 开发人员需要为单元测试特定程序状态编写测试环境。
- 或者将消息序列连接成文件,并将其用作种子进行普通的变异文件模糊测试。
这些解决方案的问题:
- 尽管单元测试在某些特定的程序状态下是有效的,但它可能无法全面测试多个程序状态之间的交互/转换。而且,编写新的测试环境以维护正确的程序状态并避免误报通常需要大量努力。更重要的是,它不适用于无法获取源代码的整个服务器的端到端模糊测试。
- 使用连接文件的方法在漏洞发现中效率和效果都很低。首先,对于每个模糊测试迭代,需要变异整个选择的种子文件。假设消息m_i 是最有趣的消息(例如,探索它将获得更高的代码覆盖率和潜在漏洞),CGF会重复变异不感兴趣的消息m_1 到 m_(i-1) ,然后再处理消息m_i ,它并没有关注消息m_i 的知识。其次,由于缺少状态转换信息,CGF可能会产生许多无效的

AFLNet是一种针对网络协议的灰盒模糊测试工具,解决了现有方法在处理服务器模糊测试时的局限性。它采用变异方法和状态反馈,无需协议规范,通过分析服务器响应来推断状态模型,提高了测试效率和漏洞发现能力。AFLNet在FTP和RTSP协议的实验中表现出优于传统方法的效果,发现了一些未知的安全漏洞。
最低0.47元/天 解锁文章
1422





