Page 165 - 软件工程与项目管理
P. 165
第四章 软件逆向工程技术与应用
而在状态机构建过程中,采用了基于邻接表的初始状态机构建方法;随后提出了
一种基于概率统计的异常会话消除方法和基于度和度的类似状态合并方法来构建
概率协议状态机;并对开源协议 TCP、SMB 做了测试,取得了较高的召回率与准
确率,但方法的局限性在于对字段切分的准确性要求较高。
3. 侧重于完整的协议规范描述的逆向方法
一些方法较为全面地对协议逆向工程的输出结果(即协议规范模型)进行
了评估。在协议逆向工程方法输出结果中,侧重于完整的协议规范描述的逆向方
法共有五种,其中有四种方法基于网络流量对协议进行逆向,其余一种基于动态
指令执行轨迹的方法对协议进行逆向。
GAPA 作为一种开放性语言与协议分析器,旨在实现安全性、实时分析和响
应、低开销的目标。GAPA 使用 SPEC 的标准协议分析规范来实现三个任务,分
别为指定如何基于 BNF 规则(Backus-Naur form)来解析协议使用的消息格式、
正确跟踪会话和应用上下文、基于消息内容和应用上下文来执行分析。它使用
类似于现有规范文档中的语法并支持二进制和基于文本的协议,但由于系统为
GAPAL 语言编写,存在解析速度慢、精度低等缺陷。Netzob 是 2014 年由 Bossert
等人发起的一个基于网络流量的逆向分析项目,是一个用于逆向工程、生成流量
和模糊测试通信协议的开源工具。它通过被动和主动的方式来对完整的协议规
范进行描述,可以有效应用于协议逆向和模糊测试等领域且能够在无先验知识
的条件下对协议进行分析和重用。Netzob 通过复用 PI 项目中基于生物学的多序
列比对算法推断消息格式,使用 PI 项目中的 Needleman Wunsch 算法以及聚类算
法 UPGMA,并通过基于启发式的推断规则对键值关系、等值关系以及长度关系
进行推断,并综合推断出的词法语义分别构建了主状态机、单一序列状态机以及
Prefix tree acceptor(PTA)。Netzob 最大的贡献是作为一款商业级工具,提供了
开源实现,为研究人员提供了极大的便利,并支持多种格式的输入模块(pcap文件、
进程通信、XML 文件以及 APIflow 等)和输出模块(XML 格式、txt 格式、Scapy
解析器);在仿真交互的基础上,Netzob 还提供了 Fuzzing 测试功能。但 Netzob
的缺陷是由于使用了序列对齐算法,无法推断存在于协议本身字段之间的结构关
系以及并列关系,在官方给出的演示中需要大量人工引导的操作加以协议逆向,
并不能真正地实现自动协议逆向。
在 AutoReEngine 中,应用层协议的有限状态机基于网络轨迹中自动推断出
155
155

