一、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选取最长公共子序列的长度作为报文相似度的衡量标准,距离的计算公式为:
个人体会:不能直接用length(LCSS(a,b))的原因是因为如果报文长度很长,则最长公共子序列是有可能也很长的,所以除以a报文和b报文的最长长度是有必要的。
在粒度选择上,PEXT使用字节作为基本单位。在聚类过程中,间距最小的两个聚类将合并为一个新聚类。间距为两个聚类元素之间的最小距离。聚类终止条件的最大间距的选取要视具体协议而定。
2、用聚类号对所有报文进行标记,由每个独立的会话可以获得一个聚类号的序列
3、将数据流中报文的聚类号替换为状态码,通常聚类号与状态码相同
4、根据报文的地址和端口信息,将各个会话分离为独立的报文流,并得到对应的聚类号的子序列,以报文地址信息的转换为边界,切分会话
5、合并报文序列的状态:将不同会话中出现的重复子序列合并为一个新的状态,使用最长公共连续序列识别算法对剩余的子序列进行状态合并
6、状态机的构造 :1、由子序列的时序关系构造初始状态转换序列,每个序列对应于一个独立的会话;2、遍历所有会话的状态转换序列,统计每个状态可能的后续状态集,并生成状态机
7、状态机的优化。对于协议状态机,状态机的迁移由其接收的报文所决定,接收同类报文时,状态迁移过程必然相同