Page 161 - 软件工程与项目管理
P. 161
第四章 软件逆向工程技术与应用
作为报文相似度的衡量标准,对所有捕获的报文进行聚类并加以标记,这里限制
了聚类后生成的数据流中至少要包含两个数据包。在聚类过程中,距离最小的两
个类别合并为一个新的聚类。接下来利用最长公共子串匹配算法生成对应于每个
会话的状态转换序列从而进一步生成协议状态机。最后对状态机进行优化,将状
态机中连续出入度为 1 的状态进行合并,将后继状态机中公共的报文序列提取为
一个单独的新状态,有效避免了状态机中出现状态不一致的情况。但通过 PEXT
的处理方式,不处于任何状态的数据包仍然会生成一个单独的协议状态,导致在
复杂环境下报文状态机过于臃肿,无法从中提取关键信息。PEXT 仅在 TCP/IP 环
境下实现,仅对 FTP 等协议进行了测试,不符合实际应用场景,而其基于 LCS
的状态标注方法会覆盖协议中关键字段对协议状态转换的作用,影响其后续状态
构建的准确性。
BFS(binary features selector)是对 PEXT 状态标注方法确定协议状态的一种
优化,它通过分析报文中各个字节的取值分布选择状态字段,最终构建协议状态
机。在状态字段提取模块中,BFS 基于状态字段取值分布所呈现的相似性,采用
统计学中基于方差分布的方差(variance of distribution of variance,VDV)的方式
来识别状态字段。在状态机构建模块,由于状态字段不同的报文必定属于不同的
状态,但状态字段相同的报文对应的状态却未必相同。BFS 针对可能出现的不同
会话中的状态转移序列中出现的状态公用冗余的情况,添加了后续的状态分离步
骤,对状态机中状态迁移的每一步进行验证从而删除冗余后继。BFS 的优点在于
通过统计学的方法很好地解决了对报文的特征提取以及协议状态标注问题,但固
定以字节为单位,导致语义偏离,缺乏字段长度信息,对于未知协议格式,可能
无法准确识别状态字段,导致分析精度不高。
Xiao 等人引入了一种语法推理算法,通过语法推断对网络应用层协议规范
进行建模,通过观察发现协议的实现本质上是状态转移的过程。首次提出了一种
基于差错文法推断(error correcting grammatical inference,ECGI)的协议状态机
推断方法,巧妙地将会话样本中的报文序列转换为对应的标志符序列。该系统包
含两个阶段,执行监视器阶段(输出执行轨迹)和协议状态机推断,在后一个阶
段中,消息会话被分割,每一个消息的具体格式通过执行轨迹中获得的分隔符推
断。在处理完所有消息后,推断出协议的无环交叉状态机,很好地解决了 PEXT
中状态标注的问题,但缺陷是由于状态机基于无环方式进行构造,无法解决状态
151
151

