- 【参考文献】盛嘉杰, 牛胜杰, 陈阳, 等. 未知协议状态机推断技术研究综述[J]. 计算机与现代化, 2023 (05): 58.
- 【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。
摘要
- 协议逆向工程(PRE)描述了协议的行为逻辑,一般分为协议格式提取和状态机构造2个步骤。
- 首先,本文介绍PRE的形式化定义和基本原则,并讨论主要领域的具体要求。
- 其次,分析状态机推理方法,并将其分为3种模式:聚类方法、状态相关方法和轮询状态实体方法,然后从不同的角度比较算法的逆向能力和时间效率。
- 最后展望协议状态机推理的发展趋势。
目录
摘要
1、引言
2、协议状态机分析
2.1、定义
2.2、应用
3、协议状态机推断算法
3.1、聚类方法
3.2、状态相关字段方法
3.3、轮询状态实体方法
4、状态机算法分析
1、引言
- 协议是由2个或多个协议实体遵循以完成通信的一组规则,其包含3个基本要素:语法 (Syntax)、语 义 (Semantics)、时序逻辑 (Temporal Logic)。
- PRE是指在不依赖于协议描述的情况下,通过对协议实体的网络输入输出、系统行为和指令执行流程进行监控和分析,提取协议语法、语义以及同步信息的过程。
- PRE通常包含2个步骤:协议格式分析和状态机推断。格式分析包括:格式抽取和语义抽取。
2、协议状态机分析
2.1、定义
- 协议状态机是协议实体之间的交互行为。有限状态机 (FSM)又称为自动状态机,它能自动确定该自动机的输入输出模型,假设存在唯一输入输出模型,那么就称为确定有限状态机 (DFA)。
- 一个DFA通常由六元组 组成,其中,是有限状态的集合,是字母表集合,为状态迁移函数,为DFA的初始状态,为接收状态集合,为拒绝状态集合。
- 一个协议状态机可以描述为一种DFA的六元组,利用状态转移函数确定状态机的转移,利用初始状态与接受状态集合,作状态机的化简。
- 协议状态机是协议逆向工程的最后一步,图1为协议逆向工程的总体流程。
- 协议状态机是协议状态之间通过某些行为特征进行转换的一种描述协议之间关系的模型,它往往呈现出图或者树的结构,节点代表状态,相邻节点间的边则代表不同类型的报文片段,终止状态通常用2个圈进行表示,如图2所示。
- 在图2中,状态2通过不同的报文片段可以到达状态3或者状态 5,而状态5通过特定的报文片段,则可以到达终止状态6。
2.2、应用
- 模糊测试
- 模糊测试,是一种利用测试用例,发现软件或者代码漏洞的技术,在状态机推断完成后,可以在测试用例中应用。
- 协议重用
- 协议重用是在了解该协议的基础上,利用一系列手段,达成应用的跨平台和重用的过程。
- 无线网络对抗
- 在无线网络对抗中,获取协议规范是很重要的,无线网络在全世界有相当大的规模,不法分子常利用无线网络进行攻击。状态机的分析能够理解该行为是否符合正常行为,避免了一定的损失。
3、协议状态机推断算法
- 状态相关字段指的是能够标记协议逻辑的报文片段。而许多状态机相关的论文都是基于状态相关字段的处理,所以提取状态相关字段方法的不同也就代表不同的状态机推断方法。
- 协议状态机的构造主要基于通信数据帧中状态相关字段的取值以及它们之间的顺序关系,将获取得到的状态与相关算法结合,能自动生成协议状态机。
- 对于状态机的创新点,都聚集在提取状态相关字段与状态机优化方向,如图3所示。
- 协议状态机起始阶段的发展,如图4所示。
3.1、聚类方法
- 依据:报文格式的相似度。
- 聚类方法的具体任务:
- 按照聚类结果给每一条报文分配对应类型的标签,最终能得到初始协议状态机。
- 根据不同的协议状态机化简算法,对初始状态机进行化简,得到最终协议状态机。
- 聚类方法存在的问题:
- 该方法会受到聚类算法本身复杂度的限制,并且在聚类过程中,生成几个簇(报文类型的种类)也是该算法需要自行解决的问题。
- 聚类方法能将语法相同的报文聚合在一起,但是对于语义相同的报文,并不能实现聚集。
- 以下是各个聚类方法的具体介绍。
- PEXT是一种协议状态机的推断方法,并写成了工具。该方法首先利用了LCSS方法把获取到的报文进行聚类,其次用群集标识标记每个数据包,并将数据包的报文分开成为单独的流。最后定义了相同顺序的序列归纳于同一个状态,最大公共非重叠字串大于2作为筛选条件这一规则,将报文组合为一个状态,按照上述方法提取了状态机。此方法还利用了 “pull-out”与“pull-in”将状态机进行化简,此方法的缺点在于阈值需要手动设置,并且划分的单独流会形成冗余。
- Antunes提出了ReverX方法,此方法分为3个步骤:第一个步骤对每个状态的访问次数进行标注,利用了摩尔化简公式对状态机进行化简,最终得到了普适化状态机;第二个步骤对报文包的头部信息聚类,比如网络地址信息,这里有个约束,对报文选取的时间间隔不大于1h;第三个步骤通过因果关系与等价关系对状态机约减,最终得到真实情况的状态机。 此方法缺点在于仅对文本协议有效,二进制协议效果较差。图5为ReverX方法生成的FTP状态机。【ANTUNES J,NEVES N,VERISSIMO P. Reverse engineering of protocols from network traces[C]// The 18th Working Conference on Reverse Engineering. 2011:169-178.】
- Comparetti利用了动态污点分析与程序上下文比对信息实现了自动提取状态机技术,主要分为会话分析与报文聚类2个阶段。在第一个阶段中,记录了动态污点分析得到的执行踪迹,并按照格式划分报文,再推断报文格式。在第二个阶段中,利用了PAM聚类算法进行分类,并提出了3种相似性,使推断更为合理。再构建了初始状态机。最后采用Exbar算 法对相似的状态进行合并,确定了最小状态机。但是该算法未考虑当会话数量较多,状态机化简会有大量比较操作,这会降低算法的性能。【COMPARETTI P M,WONDRACEK G,KRUEGEL C,et al. Prospex: Protocol specification extraction[C]// The 30th IEEE Symposium on Security and Privacy Berkeley. 2009: 110-125.】
- 王辰等人针对现有状态机推断算法忽略了协议系统的输入与输出关系,提出了一种基于状态融合的协议状态机推断方法。此方法依据会话样本集,构建EPTT形式的初始状态机。EPTT实质是一种聚类, 将相同前缀序列聚集在一起。然后进行状态匹配与融合,融合过程以EPTT作为原始Blue-Fringe算法的输入,并对相似度的计算规则做了些补充,最后按 照相似度从高到低排列进行融合。此方法虽然考虑 到了协议间的输入与输出关系,但是协议关键字提取设定的阈值需要手动确定,这会加大协议关键字的不确定性。【王辰,吴礼发,洪征,等 . 一种基于状态融合的协议状态机推断方法[J]. 解放军理工大学学报(自然科学版), 2015,16(4):322-329.】
- Wang 等人在文献中提出了概率状态机这一 概念并提出了PEXT方法,图6是此方法的流程图。【Wang Y, Zhang Z, Yao D, et al. Inferring protocol state machine from network traces: a probabilistic approach[C]//Applied Cryptography and Network Security: 9th International Conference, ACNS 2011, Nerja, Spain, June 7-10, 2011. Proceedings 9. Springer Berlin Heidelberg, 2011: 1-18.】
- 图6方法主要分为以下几个步骤:首先获取协议报文的格式。作者通过搜索频繁出现的字符串,提取协议格式报文,并利用了双样本K-S测试求出最小字段长度,得到了协议格式报文。其次推断协议状态消息。利用PAM算法将报文头聚类得到集群,目的是对协议格式的报文进行分组,作者把集群的中心看作协议的状态。作者利用阈值消除无效的状态类型对,计算转移概率,构建成状态机。但是也存在着一些局限性,需要自己确定阈值,也没有考虑语义信息。
- 王军针对APTA树的化简做了一些改进,提出了EDSM的状态机逆向方法。该方法首先构建一颗APTA树,该树用来存储报文信息,相同的报文字段汇集在一个节点上,不同的则作为左右节点分散。这里的APTA树,实际上也是一种聚类的方式。然后对Prospex的启发式算法做了改进,充分考虑到字段之间的依赖关系,利用元组的方式对状态进行标注。最后利用了EDSM算法对状态进行合并,此方法使用事件驱动的状态合并方法按照搜索策略进行状态的合并。通过遍历一个红-蓝框架,并将红蓝节点进行改变的方式,将状态进行合并,最终得到协议状态机。 此方法虽然解决了Prospex的字段依赖的问题,但是仍然存在一些缺陷,APTA树过于庞大,这会大大影响状态机推断的时间复杂度。【王军 . 基于 EDSM 的二进制协议状态机逆向[D]. 哈尔滨:哈尔滨工业大学,2016.】
3.2、状态相关字段方法
- 依据:协议报文中通常会有相关报文片段能标识该报文的协议逻辑,例如TCP协议的ACK、FIN等标志位可以作为该报文的状态相关字段。
- 任务
- 按照协议本身性质,用规则或者统计学方法提取出协议状态相关字段。
- 按照不同的方式,将状态相关字段结合数据结构构建出初始协议状态机。
- 是根据不同的协议状态机化简算法,例如启发式算法,对初始状态机进行化简,得到最终协议状态机。
- 解决的问题
- 解决聚类方法能识别语法相同的报文,但忽略了语义相同报文的问题。
- 根据统计学或者数据挖掘的理论,去寻找状态相关字段的方法,不会有聚类方法中存在报文类型种类不确定性的问题,所以它能够更加精确地表示报文的状态。
- 存在的问题
- 对于规则的定义依赖较大,规则定义的恰不恰当,直接会影响到状态相关字段方法的准 确性。
- 以下是各个状态相关字段方法的具体介绍。
- Trifilo等人针对 PEXT 方法状态标注不足做出了改进并提出了一种 BFS 方法。该方法首先根据相关字段在不同会话中能表现出相似的行为这种特点,识别出协议报文中最相关的字段。其次运用了“状态分裂算法”对状态进行了定义与转换,主要分为 3 个步骤:1)初始状态机的构造。由于相关字段状态的值相同,但是有可能状态不同,进行了二进制数的标注。 2)分裂。使用时间窗去检查相同值代表的不同状态,与初始创建的状态机进行比较,创建新的状态机。3) 修剪。将不存在的转换都删除。但是此方法也存在一些缺点,方法只能体现出包含字节的相似度,不能体现一定的逻辑关系。【TRIFILO A,BURSCHKA S,BIERSACK E. Traffic to pro⁃ tocol reverse engineering[C]// IEEE Symposium on Com⁃ putational Intelligence for Security and Defense Applica⁃ tions,.2009:1-8.】
- 孟凡治等人为了解决 BFS方法所存在的处理协议帧时有未对齐报文字段的缺陷,提出了一种新的解决方案。该方案在提取协议状态相关字段前,利用了改进的渐进多序列对比算法将报文字段对齐。在提取状态相关字段步骤时,根据同一个协议的不同通信通常有相似的行为逻辑这一特点,将对齐的报文字段利用字段取值分布的方式去计算对齐好的多条报 文字段的取值,将这个取值称之为DV,DV为0时,为协议报文的固定字段,所以舍弃,最后选择 DV 中最小的值当作状态相关字段。最后该方法根据时序关系,将状态机进行重构,最终将不同的协议状态图合并,得到完整的协议状态机转移图。该方法虽然解决了BFS未对齐报文字段的问题,但是仍然有一些缺陷,没有考虑一些报文字段的顺序性,忽视了字段与字段间的联系。【孟凡治,刘渊,张春瑞,等 . 基于状态相关字段识别的未知二进制协议状态机逆向方法[J]. 电讯技术,2015,55 (4):372-378.】
- 闫小勇等人对目前构建前缀树庞大和提取相关字段没有顺序性问题,提出了 BSMISRF 算法。该算法舍弃了 VDV 算法,采用了最长公共子序列寻找状态相关字节,体现序列元素的顺序相似性。再利用邻接表构建初始状态机,减少了APTA树的大量比较操作。最后是状态机的化简,分为 2 个步骤,第一个步骤为确定转移概率,将异常会话删除。第二个步骤利用出入度将状态机进行化简,把并列的状态合成为 一个状态。但是也存在一些局限性,当存在大量会话时,异常会话删除会耗时耗力,而且此方法对字段切分的准确度要求较高。此方法实例如图7所示。【闫小勇,李青,莫有权. 基于状态相关字段的二进制协议状态机推断[J]. 计算机工程,2019,45(7):126-133.】
- 方敏之为了解决 VDV 方法与 BSMISRF 方法没有考虑到状态字段的时间顺序性与不同会话之间的行为逻辑相似性这个问题,提出了LSISF方法。该方法在状态相关字段提取方面分为了2个步骤,第一个步骤利用 LSISF 方法计算出每个字段的不同取值之间的平均编辑距离,然后设置阈值,选取比阈值小的字段作为候选状态字段;第二个步骤计算出每个字 段的权重与各个会话不同包中同一字段方差的均值 (Average of the Distribution of Variances,VDA),然后通过计算V值也就是VDA与字段权重的比值来筛选出状态相关字段。其次在获取状态相关字段基础上,根据状态转移矩阵生成概率状态机。此方法最后 通过协议状态存在顺序与并列的关系,对协议状态机进行化简。方法虽然解决了 APTA 树过于庞大与 BSMISRF 方法的问题,但是对与一些较少、不固定的报文字段而言,计算 VDA 的方式得到的状态相关字段会比较不准确。【方敏之. 基于流量行为二进制协议逆向分析方法研究与实现[D]. 南京:东南大学,2021.】
- 黄笑言等人在文献中利用统计学理论与时序关系构建出状态转换图,首先在语义关键字提取方法中设置了3个步骤,第一个步骤通过分隔符划为一个个文本块 token,第二个步骤考察关键字在会话集的分布特征识别语义关键字,第三个步骤发现关键字在报文的偏移特征,可以验证提取的语义关键字是否正确。其次利用邻接矩阵表示各个报文类型序列之间 的关系,若报文类型序列的顺序是一致的,合并成一个状态转换,再通过强顺序约束关系的状态标注、会话必经路径的状态标注、对可选出现的报文类型集进行状态标注方法进行状态机构建。但是此方法也存在一些局限性,只通过报文类型序列相同进行状态转换不太全面,会话数较多时,构建邻接矩阵比较复杂。【黄笑言,陈性元,祝宁,等 . 基于状态标注的协议状态机逆向方法[J]. 计算机应用,2013,33(12):3486-3489.】
- Lin 等人针对现有的协议状态推断方法模型都没有注意到可以实时捕获报文的特点,基于 EFSM 提出了一种 ReFSM 方法,该方法由 3 个步骤构成:1) 消息类型识别。消息类型识别模块使用 Apriori关键 字分析来提取协议关键字,并在通过K-means算法将消息分组之前确定聚类数,每个组被视为不同的消息类型。2)FSM 构造和语义推导。通过构建 PTA 树接受所有协议会话,并使用 K-尾合并算法化简协议状态机。3)提取包含观察到的消息中消息字段值的子数据集,以便进一步分析以搜索报文中字段的相关性,由此推导的结果用于在EFSM中的每个转换。最 后通过比较生成的a树与b树是否有相同的结构完成 状态机的合并操作。虽然此方法在状态相关字段提取方面,将状态相关字段方法与聚类方法相结合,对提取出的协议状态相关字段的精确度有了很大的提高,但是仍然有状态爆炸的问题。【LIN Y R,LAI Y K,BUI Q T,et al. ReFSM: Reverse engi⁃ neering from protocol packet traces to test generation by ex⁃ tended finite state machines[J]. Journal of Network and Computer Applications,2020,171:102819.】
- Sun 等人提出了一种新的状态机建模方法随机协议有限状态传感器(Stochastic Protocol finitestate Transducer,SPT),SPT 的主要职责是描述消息交互关系并分析记录会话中的行为概率分布。该模型配备了统计信息,也能够预测后续行为。其设计了一种名为Sptia PL的SPT学习方法,第一步处理初始报文,并提取状态相关字段,提取状态相关字段的方法时基于 3 种假设,第一,认为状态相关字段在协议的头部;第二,状态相关字段为单个字段;第三,相同报文字段具有较强的统计相关性。然后通过 MIS 计 算每个报文字段的值,MIS 较高则为状态相关字段, 再按照时间顺序组成报文序列;第二步通过一系列分析从报文序列重建 SPT 模型,包括模型构建、状态合并和在渐进学习过程中计算概率。最后,可以获得描述未知协议行为逻辑的SPT模型,并用于分析其消息交互特征或预测其未来的消息或行为。在状态机化简时,运用了测试状态兼容性的方法,将状态进行合并。虽然此方法的时间复杂度(O(n))与空间复杂度 (O(n))是最优的,解决了状态爆炸的问题,但是此方法在复杂的网络状况下,比如存在异常报文或者攻击报文的状态位并没有携带在报文的头部,那么此方法会失效。【SUN F H,WANG S,ZHANG H L. A progressive learning method on unknown protocol behaviors[J]. Journal of Net⁃ work and Computer Applications,2022,197(2):103249.】
3.3、轮询状态实体方法
- 依据:推断过程中需要和协议实体交互来指导推断。
- 方法:利用请求询问和应答2个机制,结合正例样本集与负例样本集生成初始协议状态机。正例样本集表示与协议状态交互后,能够接受的报文;反例样本集表示与协议状态交互后,不能够接受的报文。
- 轮询状态实体方法能够实时与协议实体进行交互,生成的协议状态机是不断地向协议实体进行交流而得到最终的协议状态机。
- 优点:能够更加精确地生成协议状态机。
- 存在问题:需要生成大量的询问,增加了时间复杂度;获取反例样本集困难。
- 以下是各个轮询状态实体方法的具体介绍。
- Angluin提出了一种新的解决方案,对状态实体进行轮询的方法。L*算法假设存在一个Oracle,并在此基础上可以回答等价询问(equivalence query)与 成员询问(membership query)。L*算法通过修改一张观察表,记录请求询问的结果,当结果为 1 则确定该状态,否则淘汰。membership query 构建一个连续的观察表,再生成一个候选状态机,最后通过等价询问,也是该文中所提的猜想,若一致,则终止判断,否则提供反例。【ANGLUIN D. Learning regular sets from queries and coun⁃ terexamples[J]. Information and Computation,1987,75(2): 87-106.】此外等价询问使用 Valiant提出的近似识别标准,利用随机抽样,消除了T*最小充分性假 设的限制。但是,此方法也存在一些缺点,此方法会产生大量的询问,效率过低,把报文当作相互独立的符号,忽略了报文之间的相关性。【VALIANT L G. A theory of the learnable[J]. Communica⁃ tions of the ACM,1984,27(11):1134-1142.】
- 潘雁等人为了解决子类型无法对多个报文组合进行变异的问题,提出了一种渐进式的协议状态机主动推断方法。此方法考虑到字母表太大而导致算法性能降低的情况,首先将报文进行预处理,循环的将报文转换成类型序列放入字母表中,并结合映射器推断初始状态机;然后针对已有的数据中大多数为正常报文数据,异常报文数据缺失的情况,将报文通过整数叠加、字节翻转等方式,变异正常的报文;最后利用了基于前缀匹配的预响应机制,减少与协议实体互动的次数。但是此方法也存在一些问题,虽然用变异的手段扩充了样本的多样性,但是样本空间的扩大对协议状态机生成的时间效率而言,是大大的提高了。【潘雁,林伟,祝跃飞. 渐进式的协议状态机主动推断方法 [J/OL]. 网 络 与 信 息 安 全 学 报 ,2022(2022-05-09) [2022-05-30]. https://kns.cnki.net/kcms2/article/abstract? v=3uoqIhG8C45S0n9fL2suRadTyEVl2pW9UrhTDCdPD66 Sr0yZ-At6r3ZZ0-X5GzOOL6Lq-Z3hGgLSWHH-XlVloJx 0BboRkqHq&uniplatform=NZKPT.】
4、状态机算法分析
- 状态机推断的算法较少,近几年来关于状态机推断方面的重大创新也较罕见,表1从几个方面对本文所提的状态机方法进行了对比。