【网络协议逆向分析与应用】基于网络流量的协议格式逆向分析之二——典型报文序列分析方法(PI、PEXT)

一、PI

PI全称为Protocol Informatics project,是Marshall Beddoe在2004年启动并完成的一个项目。PI项目的主体思想是利用生物学的一些算法,尝试分析目标协议的结构信息。在生物学中,需要从DNA中寻找产生蛋白质的特定基因,而在一些网络应用中,需要从大量的网络数据流中找到具有特定含义的域。二者存在相似性所以PI才可能利用生物信息学的方法找到具有特定含义的域。

具体过程如下:

1、使用局部序列比对算法计算序列间的距离矩阵。(最常用的是Smith Waterman算法)

2、使用UPGMA算法,构造系统树。

3、使用渐进比对算法执行多序列比对

局限性:

1、虽然可以获得协议域的边界,但只能识别其为常量域或者变量域,要获得字段语义还需进一步的人工分析

2、算法仅针对协议的报文结构,并不能得到协议状态机信息

3、对于简单的、与基因序列较为类似的协议,PI的识别效果比较好,但是如果有冗余字段、复杂的协议,效率和准确度会大大降低

二、PEXT

PEXT的工作了流程包括四个阶段:1、监控并捕获多个独立会话的报文;2、对获取的报文进行聚类并标记;3、利用最长公共子串匹配算法生成对应于每个会话的状态转换序列;4、将相互独立的状态转换序列合并,生成覆盖所有测试实例的最小状态机

PEXT实现协议状态机逆向的算法步骤如下:

1、对所有捕获的报文进行聚类。考虑到不同报文状态字段的偏移可能不同,PEXT选取最长公共子序列的长度作为报文相似度的衡量标准,距离的计算公式为:

D(a,b) = 1- \frac{length(LCSS(a,b))}{max(length(a),length(b))}

个人体会:不能直接用length(LCSS(a,b))的原因是因为如果报文长度很长,则最长公共子序列是有可能也很长的,所以除以a报文和b报文的最长长度是有必要的。

在粒度选择上,PEXT使用字节作为基本单位。在聚类过程中,间距最小的两个聚类将合并为一个新聚类。间距为两个聚类元素之间的最小距离。聚类终止条件的最大间距的选取要视具体协议而定。

2、用聚类号对所有报文进行标记,由每个独立的会话可以获得一个聚类号的序列

3、将数据流中报文的聚类号替换为状态码,通常聚类号与状态码相同

4、根据报文的地址和端口信息,将各个会话分离为独立的报文流,并得到对应的聚类号的子序列,以报文地址信息的转换为边界,切分会话

5、合并报文序列的状态:将不同会话中出现的重复子序列合并为一个新的状态,使用最长公共连续序列识别算法对剩余的子序列进行状态合并

6、状态机的构造 :1、由子序列的时序关系构造初始状态转换序列,每个序列对应于一个独立的会话;2、遍历所有会话的状态转换序列,统计每个状态可能的后续状态集,并生成状态机

7、状态机的优化。对于协议状态机,状态机的迁移由其接收的报文所决定,接收同类报文时,状态迁移过程必然相同

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值