Page 167 - 软件工程与项目管理
P. 167
第四章 软件逆向工程技术与应用
提取方法,相信能获得更高精度的关键字信息。
4. 侧重于其他输出结果的逆向方法
在协议逆向工程中,大多数方法直接关注的输出结果为协议格式提取或协
议状态机推断,但仍存在一些研究从其他角度诸如只识别单一字段、以图或脚本
的方式生成来表示两个通信实体之间的会话过程、应用行为识别、生成协议指纹
等来对协议逆向工程展开研究。本类方法共五种,其中有两种方法基于网络流量
对协议进行逆向,而其他三种基于动态指令执行轨迹的方法对协议进行逆向。
ScriptGen 采用报文序列分析对协议进行逆向,并提出了蜜罐(honeypot)脚
本自动生成的构想。其构建过程主要分为报文预处理、通过报文出现的频率进行
状态机构建、状态机化简、脚本生成四个模块。ScriptGen 只关注基于 TCP 的网
络报文,在状态机化简过程中采用一种基于 PI 的协议与解析算法,包括宏聚类
和微聚类两个过程。根据获得的状态机信息,ScriptGen 生成了蜜罐可用的 Python
脚本以实现报文重放。ScriptGen 没有实现协议的完全逆向,只能获得协议中的
部分状态字段和部分状态转换信息,但已经足够满足蜜罐的功能需求。其缺陷在
于在报文数量较多的情况下,由于 ScriptGen 并没有对初始报文进行聚类,会构
建出非常庞大的协议状态机。构造协议状态机方法的准确性取决于最大状态数的
选择和状态的最大出度值,无法满足特定应用中的性能要求。
在网络主机中,发现僵尸网络使用的命令和控制服务器(command and
control server,C&C)对于渗透测试以及网络安全领域非常重要。Dispatcher 与
Dispatcher2 连续两次对发现 C&C 做了研究工作,并提出了用于提取客户端和服
务端发送或接收的消息格式和语义的技术。Dispatcher 将 ReFormat 对加密报文的
解析与 AutoFormat 中的结构识别策略相结合,提出了一种改进的协议逆向方案,
它跟踪缓冲区生命周期内的复制与合并操作以获得输出报文的字段结构树,并对
函数参数与指令操作数语义进行了预定义,跟踪报文在执行过程中的传播,最终
实现了对字段语义较为完善的识别。在 Dispatcher2 中进一步提取了一个程序并
沿用 ReFormat 中的动态数据流分析和算术指令统计的思想,实现了部分加密协
议流量的逆向工作,识别的力度细化到编码函数级别,但缺陷在于没有提取字段
间的约束关系。这两种基于指令统计特征的协议逆向分析方法可有效应用于加密
函数,不适用于多种编码函数的分析。
FieldHunter 是一个自行开发的算法系统,旨在自动推断二进制和文本协议中
157
157

