论文部分内容阅读
网络协议逆向工程是一种在不掌握协议规格的情况下,通过分析和处理网络数据或是监控网络中服务器和客户端的运行,逆向解析出协议的字段格式、分析字段语义、构造得到协议状态机的技术。攻击与防御总是相互伴生,网络协议逆向技术对于网络通信行为的监测和管理,网络安全环境的营造和网络服务质量的提高等都有着重要的意义。随着智能家居和可穿戴设备,包括简易无人机的逐渐流行,我们周围的网络空间中,越来越多地出现了私有协议的身影。各个厂家生产的产品所使用的自定义的私有协议在网络中以文本或是二进制未知流量的形式存在。本文的研究目标是在不引入任何有关于协议规格的先验知识的情况下,对网络流量中捕获到的协议规格未知的二进制协议数据进行分类和协议格式划分。本文的主要工作和创新点包括以下几个部分:(1)从捕获流量数据开始,实现了相关参考文献中的算法和方案,通过载荷提取、差错检验、特征生成、特征选择等步骤,对不同情况和条件下捕获到的流量数据进行预处理,为格式划分提供了数据来源。(2)提出了一种基于频繁项挖掘的改进的协议格式划分方案。针对现有方案中以字节为基本单位构造频繁项的方式不能完全适用于二进制协议逆向的问题,和方案欠缺格式划分定界步骤的问题,提出通过构建半字节为最小长度的、长度逐渐增加的最大项集,采用常见度并提出位置熵指标进行频繁项筛选,最后使用基于正向最大匹配的投票完成格式划分。通过仿真实验得到实验准确度不低于75%,实验精确度不低于90%。(3)提出了一种基于序列比对的改进的协议格式划分方案。针对现有方案中采用层次聚类等方法导致算法时间复杂度过高的问题和序列比对时使用Needleman-Wunsch算法频繁插入空格,产生字段位置滑动的问题,提出首先设置结果函数,再将每两条协议序列进行比对的结果融合为一条序列,并根据这两条序列的相似度向结果函数按一定规则输出比对结果的格式划分方案。通过仿真实验得到实验准确度不低于80%,实验精确度不低于90%。(4)使用Java语言,借助Spring Boot后端框架和Bootstrap前端框架,设计和实现了一个功能清晰明了的B/S结构原型系统,对本文提出的方案进行了可视化展示和实验验证。