[^NETPLIER: Probabilistic Network Protocol Reverse Engineering from Message Traces NETPLIER:从消息痕迹中进行概率性网络协议逆向工程]:
Abstract
网络协议逆向工程是许多安全应用的一个重要挑战,一种流行的方法是利用网络消息痕迹。这些方法依赖于成对的序列对齐 和/或 标记化。它们有各种限制,如难以处理大量的信息和处理固有的不确定性。在本文中,我们提出了一种新型的基于网络痕迹的协议逆向工程的概率方法。它首先利用多序列对齐法来对齐所有的消息,然后将问题简化为从对齐的字段集合中识别关键词字段。关键词字段决定了一个消息的类型。识别是概率性的,使用随机变量来表示每个字段(是真正的关键词)的可能性。在随机变量和信息的观察之间构建一个联合分布。然后进行概率推理,以确定最可能的关键词字段,这使得消息能够按其真实类型进行适当的聚类,并能够恢复消息格式和状态机。我们对10个协议的评估显示,我们的技术大大超过了最先进的技术,我们的案例研究显示了我们的技术在物联网协议逆向工程和恶意软件分析中的独特优势。
1 Introduction
网络协议逆向工程是网络安全的一个重要挑战。许多安全分析人员感兴趣的应用程序往往有自己的未记录的通信协议。例如,自动驾驶汽车使用CAN总线和FlexRay,控制系统使用Modbus和DNP3,在线聊天/会议应用有其定制协议。许多安全分析,如静态/符号漏洞扫描*[40],[24],漏洞生成[79],[19],模糊测试[65],[43],[44],[31],攻击检测[15],[29]和恶意软件行为分析[75],[18]*需要对网络协议精确建模。例如,了解网络应用的协议对于模糊测试中的种子输入生成至关重要;恶意软件分析通常需要向命令和控制(C&C)服务器编写格式良好的消息,以便通过适当的服务器响应来触发隐藏行为[23],[83];静态/符号分析需要正确模拟网络功能,否则可能会产生大量误报。
现有的协议逆向工程技术可分为几类。第一类是利用程序分析[28]、[57]、[82]、[33]、[59]、[32]。通过分析应用程序实现的丰富语义(例如,如何访问输入缓冲区),这些技术可以在逆向工程中实现高精确度。然而,这些技术大多需要访问程序的二进制文件,这在实践中往往是不可行的。例如,一些物联网固件由于其保护机制而无法访问;如果二进制文件被打包或混淆了,就很难进行动态分析。即使客户端应用程序的二进制文件是可用的,其在服务器端的对应文件也更难获得。因此,另一类侧重于使用网络痕迹,这些痕迹可以通过窃听网络获得。基于网络痕迹的逆向工程有两种主要技术:基于对齐的技术(例如PIP[22]、ScritGen[55]和Netzob[26])和基于令牌的技术(例如Veritas[81]和Discoverer[35])。前者利用各种序列对齐算法来对齐信息对并计算相似度分数,消息是根据这些分数进行聚类的。然后通过分析集群内信息的共性来得出格式。然而,信息内容的多样性大大降低了对齐的质量,给下游的分析带来问题。基于令牌的方法建议在对齐前首先对信息进行标记(例如,文本字段和二进制字段)以减少变化。然而,这些技术往往需要定界符来识别令牌(二进制协议可能不存在)或产生过多的集群,因为标记化是基于确定性的启发式方法。也就是说,临时规则被用来执行标记化,这些规则在很多情况下可能不成立。现有的技术没有对这种不确定性进行建模,因此经常产生不正确的结果。关于这种局限性的更多讨论可以在第二节中找到。
我们观察到,网络协议逆向工程的关键是确定决定信息类型的关键词字段。虽然有很多启发式方法可以帮助定位这种关键词,但这些启发式方法在很大程度上是不确定的。客户端和服务器端的逆向工程都可以耦合起来,实现协同效应,因为它们有很强的对应关系。基于这些观察,我们提出了一种新的概率方法来进行网络协议的逆向工程。我们的技术完全基于网络痕迹,不需要访问源代码或二进制代码。具体来说,它利用了广泛用于生物识别的多序列比对算法(MSA)[39],以避免现有工作中昂贵的成对对齐。对齐是保守的,最初在所有信息上进行。因此,可以披露所有信息共享的共同结构,这种结构应该包括关键词字段,因为解析器在进行特定类型的解析之前需要解析关键词字段。在对齐之后,使用一种概率方法来确定哪个(对齐的)字段是关键词。为了对固有的不确定性进行建模,我们引入了一个随机布尔变量,预测某个字段是否是关键词。我们根据暂定关键词的值对所有消息进行推测性分类。可以从聚类结果中进行观察,比如一个聚类内的消息是否具有相似性,以及客户端和服务器端的相应消息是否落入相应的聚类。引入随机变量来表示这些观察结果的可信度。通过考虑关键词变量和观察变量之间的相关性,构成了一个联合概率分布。可以为关键词变量计算后验边际概率,以表示单独字段是真实关键词的可能性。一旦确定了关键词,就会根据关键词的值对信息进行聚类,通过对聚类中的信息进行排列和分析,可以披露特定类型的结构。
我们的贡献总结如下。
- 我们解决了网络协议逆向工程中的一个关键挑战——关键词识别,它可以正确地对网络消息进行聚类,并在下游分析中实现高精度,如字段识别和状态机重构。
- 我们将关键词识别表述为一个概率推理问题,这使我们能够自然地模拟内在的不确定性。
- 我们建立了一个端到端的系统NETPLIER,它代表了 “概率性网络工作原理逆向工程”。它将网络痕迹作为输入,并产生最终的信息格式。
- 我们使用竞争对手项目中常用的10个协议对NETPLIER进行评估。我们的结果表明,NETPLIER可以实现100%的同质性和97.9%的完整性,而最先进的技术只能实现约92%的同质性和52.3%的完整性。为了验证通用性,我们使用NETPLIER对无线物理层协议和真实物联网设备中使用的多个未知协议进行逆向工程。
- 我们还进行了两个案例研究:(1)对Google Nest的协议进行逆向工程,这是一个真实世界的物联网智能应用,使我们能够操纵由该应用控制的空调设备;(2) 对近来恶意软件的C&C协议进行逆向工程,使我们能够暴露其隐藏的恶意行为。NETPLIER和数据可在[6]中公开获得。
2 Motivation
在本节中,我们用一个例子来说明现有的基于网络痕迹的协议逆向工程方法的局限性,并成为我们技术的动机。
A. Motivation Example
图1中的痕迹片段包含了DNP3的信息序列,这是一个用于工业控制系统的通信协议。痕迹记录了发送时间、源地址和目的地址的IP地址和端口,以及每条信息的数据等信息。消息数据包括从应用层到物理层的协议内容,每个协议的消息数据都由几个字段组成。讨论到图1中DNP3的消息数据,粗体字的字节是表示消息类型的一个特定字段,它也被称为关键字。每种消息类型都有自己的格式,它定义了这种类型的语法,消息的发送和接收在一个网络会话中是有状态的,状态转换通常由一个状态机来描述。具体来说,当客户端或服务器收到一个新的消息时,它通过关键字确定其消息类型,按照该类型的格式解析其余字段,然后根据状态机采取相应的行动。例如,在图1中,有四个通信连接,它们分别以来自客户端的主动响应消息mc0、mc2、mc3和mc4以及来自服务器分别的相应确认消息ms0、ms2、ms3和ms4。连接建立后,服务器可以用不同的命令发出请求,例如,像ms1 , ms5 , ms6这样的写,或像ms7这样的读,而客户端将用响应消息(例如,mc1 , mc5 , mc6 , 和 mc7)进行确认。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RzPIH7s8-1680934762674)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330112654067.png)]
协议逆向工程的主要目标是推断一个协议的语法和语义。协议逆向工程的第一步是将相同类型的消息归为一个聚类。聚类是一个关键步骤,因为它的结果决定了进一步的格式和状态机推断的准确性。现有的工作通常分别考虑来自不同方向的消息。在下文中,我们以来自客户端的消息为例(mc0 -mc7 ),讨论现有技术和我们的技术如何进行聚类。理想的聚类结果是将消息mc0、mc2、mc3和mc4放入一个聚类,将消息mc1、mc5、mc6和mc7放入另一个聚类。
B. Alignment-based Clustering
序列排列算法,如Needleman & Wunsch [64],最初用于生物学,目的是排列DNA、RNA和蛋白质序列以识别相似区域。这一思想被大量现有的基于网络痕迹的协议逆向工程方法所借鉴,如PIP[22]、ScriptGen[55]和Netzob[26]。他们使用成对的序列排列算法来排列每一对消息,并通过排列结果计算出相似度分数。在构建相似性矩阵后,具有最高相似性分数的 消息/聚类 被通过聚类算法进行递归合并,如UPGMA[74]。然后从聚类的结果中得出协议格式和状态机。
基于对齐的聚类方法的工作假设是,如果信息具有类似的数值序列,那么它们就属于同一类型。然而,这个假设并不总是正确的。对于同一类型的信息,它们可能在同一字段有不同的值;对于不同类型的消息,它们可能共享一些共同的字段并具有相同的值。图2a显示了消息对<mc0 , mc2>和<mc0 , mc1>的对齐结果。红色的字节是相同的值排列在一起。我们可以看到,尽管mc0和mc2属于同一类型,但它们的相似度低于mc0和mc1,后者属于不同的类型(用阴影说明)。基于这个一薄弱的假设,聚类的结果是有问题的。图2b显示了Netzob的聚类结果。它产生了两个聚类,都包含不同类型的消息。基于错误的聚类结果,进一步的格式和状态机推断也将是不准确的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6UfdbDM5-1680934762675)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330134536230.png)]
基于对齐的聚类方法的另一个限制是,在使用UPGMA等算法时,需要一个相似度分数的阈值来决定哪些聚类应该在递归聚类步骤中合并在一起。聚类结果对这个阈值很敏感,不同的协议应该使用不同的阈值。然而,当对一个未知的协议进行逆向工程时,在没有基础事实的情况下很难计算出最佳阈值。通常情况下,我们只能使用从其他研究良好的协议中训练出来的一般阈值。因此,聚类的准确性可能会下降。
C. Token-based Clustering
基于令牌的聚类方法将消息分成令牌,然后按特定的令牌值或令牌类型对消息进行分组。这条线上的大多数方法,如ASAP[52]、Veritas[81]、Prisma[51]和ProDecoder[80],都是依靠预定义的定界符或n-grams将消息分割成令牌,然后搜索具有最频繁值的令牌,可以进一步用于聚类消息。另一个基于令牌的聚类策略是使用令牌类型模式。Discoverer[35]是最先进的基于令牌的方法,它使用令牌类型模式进行初始聚类,然后结合代表令牌值和序列对齐算法来提高聚类结果。图3a显示了Discoverer的标记化结果。它利用观察到的同一类型的网络信息具有相同的二进制序列和文本字符串的混合物,将具有可打印ASCII值的连续字节视为文本标记。因此,mc2、mc3和mc7中的第二至第四个字节被标记为文本标记T,而其他单个字节被标记为二进制标记B。在令牌化之后,它观察到两种不同的标记模式,序列 "BBBBB … B "用于mc0 , mc1 , mc4等,序列 “BTBB … B”,用于mc2、mc3和mc7。这两种模式的差异用红色突出显示。因此,Discoverer产生两个初始聚类,如图3b所示。然后,它按潜在代表(PR)的值将每个聚类分为子聚类。最后,它利用消息排列将一些子集群合并为一个更大的集群,以避免过度划分。例如,在第一个聚类(mc0 , mc4 , mc1 , mc5 , mc6)中,红色的标记(‘B’)只包含两个不同的值(81和82),这可以被看作是一个有代表性的标记,用来获得新的子聚类(图3c中的聚类1和聚类2)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rDZneldr-1680934762675)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330142522663.png)]
最后它产生了四个聚类,如图3c所示。虽然每个聚类中只有一个类型,但每个基础事实类型(用阴影或无阴影表示)被次优地分为两个较小的类型(聚类)。造成这个问题的原因有很多:首先,二进制协议中没有明确的定界符。因此,大多数字节被视为单独的标记,减少了标记化的价值,因为很少有结构信息被暴露。另外,二进制标记的值有时位于文本标记的范围内,因此这些二进制标记可能被误认为是文本标记(例如,图3a中的文本标记)。短于最小长度的文本字符串(作为文本标记物的资格)也被错误地标记为二进制标记物。另一个问题是,在递归聚类和合并步骤中可能会发现多个有代表性的令牌。所有这些原因导致了过多的令牌类型。在我们的实验中(第五节),Discoverer总是受到冗余聚类的困扰,这表明它的聚类结果并不简洁。
D. Our Technique
Insights. 从上面的讨论中,我们观察到,基于对齐的聚类和基于令牌的聚类都依赖于这样的假设:如果信息有类似的值或模式,那么它们就是同一类型的。然而,在许多情况下,这个假设并不成立,并导致了不准确的聚类。事实上,当一个客户或服务器收到一个消息时,它只通过关键字来确定消息的类型。因此,如果我们能够推断出表示关键词的字段,我们就会得到理想的聚类结果。请注意,尽管一些基于令牌的聚类方法使用代表性的标记进行聚类[35],[80],但它们只通过频率等统计数据来搜索这种标记,这通常会产生一个以上的代表性标记,然后导致冗余的聚类。
另一个见解是更好地利用网络痕迹,这是基于痕迹方法的唯一输入。现有的工作只分析一方(客户方或服务器方)的消息数据来研究上述的提示。然而,如果我们考虑双方的消息痕迹,特别是他们的对应关系,我们可以观察到更多的提示。例如,在图1中我们可以看到,所有来自客户端的主动响应消息mc0 , mc2 , mc3 , 和 mc4都有来自服务器的确认消息ms0 , ms2 , ms3 , 和 ms4作为响应(用于建立一个新的连接)。另外,服务器发送的写信息ms1、ms5和ms6总是触发客户端的响应信息,即mc1、mc5和mc6,这些额外的提示可以用来改善和验证聚类结果。
我们已经知道,所有这些提示都有内在的不确定性,因为任意的字节序列都可以作为提示出现,如果我们只考虑少数提示进行聚类,结果可能是不正确/矛盾的。例如,基于对齐的聚类方法只使用具有高相似度的信息是同一类型的提示。受规范提取[60]、[34]和程序分析[84]中概率推理应用的启发,一个更合理的解决方案是以概率的方式将各种提示结合在一起。具体来说,给每个提示分配一个先验概率,表示其不确定性,而不是进行简单的确定性调用。概率推理将这些提示集合起来,并计算出一个后验分布,我们可以从中得出最可能的关键词和聚类。
Our Idea. 我们在客户端和服务器端的消息上使用多序列对齐(MSA)算法,并将消息划分为一个字段列表。MSA往往是保守的,只产生一个全面的字段列表,这提供了一个坚实的起点。对于每个字段,我们引入一个随机变量来表示成为关键词的概率。假设一个字段是关键词,消息可以通过该字段的值被分组到不同的群组中,这些群组将满足一些约束条件,例如,消息相似性约束、远程耦合约束、结构一致性约束和规模约束。对于每个约束,我们计算出概率,作为我们观察到的遵守程度。有了这些概率,我们再进行概率推理,得出随机变量的后验概率,表示我们的假设(即当前字段是关键词)。在检查完所有字段后,我们可以挑选出概率最高的字段作为关键词,并使用它对信息进行聚类。在动机的例子中,我们从客户信息的MSA结果中生成12个字段,如图4a所示。经过概率推理,字段f7被选为具有最高后验概率的关键词。然后我们可以通过f7的值生成两个正确的聚类,如图4b所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyF9JzxC-1680934762675)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330160633381.png)]
3. SYSTEM DESIGN
在这一节中,我们讨论了系统设计,包括预处理、关键词字段候选生成、概率关键词识别、迭代对齐和聚类,以及格式和状态机推理。图5显示了NETPLIER的工作流程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9YsNgso0-1680934762675)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330160841507.png)]
A. Preprocessing
NETPLIER的输入是网络痕迹,可以由包分析器(如tcpdump)捕获。痕迹中的数据包遵循网络层模型。我们旨在逆向工程的未知协议通常是在应用层。基于对其他现有协议的了解,我们可以重建这些协议中的信息,提取有用的信息(如网络层的端口号),并丢弃不相关协议中的数据。最后,我们将网络消息标准化,以包括以下信息:时间戳、IP地址、端口号和目标协议的数据。这种标准化信息的例子可以在图1中找到。
通过时间戳、IP地址和端口号,==这个怎么实现的?重点看下代码==我们可以将消息归入通信会话。例如,在图1所示的例子中,有三个会话,其中mc0 , ms0 , ms1 , mc1属于第一个会话,mc2 , ms2 , mc3 , ms3属于第二个会话,而其他消息属于第三个会话。会话信息将在概率推理和状态机推理阶段使用。
B. Keyword Field Candidate Generation
如前所述,确定(网络信息中的)关键词是至关重要的。在这个阶段,我们确定了一组候选关键词的字段。
消息数据是由多个字段组成的,对于图1中的例子,所有消息都有类似的字段结构,而且这些字段的长度相同(除了最后一个字段)。因此,我们可以很容易地通过一个字段的位置获得它的值。然而,对于复杂的协议,消息可能有不同的结构,一些字段可能有可变的长度,这使得一个字段出现在不同消息的不同位置。例如,图6a中的信息有一个用户名字段,它的长度是可变的。直观地说,识别这类字段的想法是通过信息排列来识别固定长度的字段,这些字段与可变长度的字段相联系。我们观察到,信息往往有一些共同的值,尤其是固定长度的字段,例如图6a中的 "用户 "和 “年龄”。因此,我们可以对信息进行排列,以暴露信息中的这些共同序列,然后确定它们之间的可变长度字段。如果在两个有界限的固定长度字段之间存在多个连续的可变长度字段,NETPLIER可能会将这些可变长度字段识别为一个单一的可变长度字段。在实践中,我们很少看到这种情况。请注意,这对于任何基于痕迹的逆向工程技术来说都是一个很难精确分离它们的问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZyflSc6-1680934762676)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330164256655.png)]
如前所述,成对对齐算法被现有方法广泛使用。然而,成对对齐一次只比较两个序列,当样本数量较大时,这在很大程度上影响了可伸缩性。因此,我们利用多序列比对算法·[39],这是生物信息学中成对比对的扩展,可以一次对所有序列进行比对。有各种策略用于降低计算复杂度和提高多序列比对的准确性。在这里,我们使用了渐进式方法[39]和迭代优化的组合[62]。渐进式方法首先对齐最相似的序列,然后逐步将其他序列添加到对齐结果中。迭代优化方法对初始全局对齐结果的序列子集进行迭代对齐,以提高精度。图6b显示了多次序列比对后的结果。空格(即“-”)被插入到可变长度字段中,以演示对齐结果。
根据初始对齐结果(对所有消息),我们将消息数据划分为多个字段。对于文本数据,可以使用预定义的分隔符(例如空格字符)将消息数据划分为字段。然而,二进制数据没有特定的分隔符,其字段通常只有几个字节长。我们需要以一种非常保守的方式使用对齐结果,以便它考虑字段的所有可能候选。首先,我们将每个(对齐的)字节视为单个单元字段。如果单元字段的所有消息数据都具有相同的值,则该单元字段被标记为静态,否则为动态。然后,连续的静态单元字段合并为一个更大的单元字段。例如,在图4a中,字段f0、f2和f9是静态单元字段,其他字段是动态的(这可能不是真的,因为我们只显示了一小段代码,由于空间限制省略了一些字段)。这些单元字段表示实际字段候选的保守列表,这意味着实际规范中的字段是一个单元字段或多个单元字段的连接。在这一阶段的最后,我们生成一个列表,其中包括所有小于阈值的单元字段及其组合(即本文中的10字节)。这种组合物也称为复合字段。该列表表示关键字字段的候选项,并服从下游概率分析。我们限制了大小,以减少要分析的候选字段的数量。注意,在f12中,我们组合了一个字节序列,因为它对于某些消息来说是空的,这意味着它不能是关键字字段,可以被忽略。尽管大多数协议在客户端和服务器端都使用类似的格式,但有些协议可能具有本质上不同的字段结构。因此,我们分别为客户端和服务器端生成字段(同时考虑它们在概率分析中的对应关系)。请注意,尽管字段候选生成并不复杂,但它应该是保守的,并包括真正的(关键字)字段。NETPLIER依赖于后面的概率分析来高精度地识别关键字字段,这反过来又允许识别其他字段并修剪虚假字段。
C. Probabilistic Keyword Identification
给定双方的关键字候选字段列表,我们使用概率方法来推断哪些字段最有可能是关键字。识别关键字字段后,可以识别相同类型(即具有相同关键字值)的消息,并可以对这些消息执行进一步的对齐和分析。
让字段fc和fs分别作为来自客户端和服务器端的潜在关键字。客户端消息通过fc被推测分组为集群(tc0, tc1,……),服务器端消息通过fs被分组为(ts0, ts1,…)。在图1所示的示例中,客户端消息的候选字段列表如图4a所示。服务器端消息有一个非常相似的列表。图7a显示了将f1作为客户端和服务器端消息的关键字的聚类结果,图7b显示了将f7作为关键字的结果。例如,对于f1关键字,mc0、mc1、mc4、mc5和mc6属于一个集群,因为它们的f1字段的值都为A0,而ms0、ms2、ms3和ms4属于一个集群,因为它们的f1值为08(参见图1中的痕迹)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ABHVbMZ-1680934762676)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330193229810.png)]
如果关键字推测为真,即集群中的消息(按关键字值分组)确实属于同一类型,那么我们应该从生成的集群中得到以下观察结果:
-
Observation 1. 同一集群中的消息应该比不同集群中的消息更相似。
-
Observation 2. 客户端的集群和服务器端的集群应该有对应关系。换句话说,属于集群一侧的消息(例如,来自客户端的请求)很可能在集群的另一侧也有对应的消息(例如,来自服务器端的相应响应)。
-
Observation 3. 同一集群中的消息遵循相同的字段结构。
-
**Observation 4. ** 不应该有太多的集群。在每个集群中,应该有足够数量的消息。
这些观察结果可能有不确定性。换句话说,真正的聚类可能不能展示这样的观察结果,而且这些观察结果的存在也不一定意味着真正的聚类。因此,我们引入一个随机变量(带布尔值)来指示候选关键字是否为真正的关键字。变量(来自客户端和服务器的所有候选者)和观察结果形成联合概率分布。因此,我们将关键字识别表述为一个概率推断问题,计算给定观测值的关键字随机变量的边际后验概率。正如我们将在第四节中解释的那样,推理规则可能是有方向的(即贝叶斯推理[27])或无方向的(马尔可夫随机场[48])。我们利用一个通用的图模型,称为因子图,它支持这两种类型。经过推理,后验概率最大的随机变量表示最可能的关键字对。正如我们将在第四节中解释的那样,推理规则可能是有方向的(即贝叶斯推理[27])或无方向的(马尔可夫随机字段[48])。我们利用一个通用的图模型,称为因子图,它支持这两种类型。经过推理,后验概率最大的随机变量表示最可能的关键字对。
D. Iterative Alignment and Clustering
MSA可能一开始就不能产生预期的对齐,因为它本身也不确定。因此,字段分离可能会出现问题,导致错误的下游结果。我们采用迭代对齐和聚类来解决这个问题。==怎么通过这俩方法解决MSA没有对齐的问题?==直观地说,假设MSA没有正确对齐,因此无法正确识别关键字。尽管如此,概率推断和聚类有可能减少聚类内消息的结构差异。因此,对于每个聚类,我们执行MSA和概率关键字识别。然后,我们将结果关键字与原始关键字进行比较。如果新的关键字可以更好地对所有消息进行全局分区(通过从前面提到的四个观察得出的指标进行评估),那么我们就用新的关键字替换原来的关键字。这个过程一直重复,直到找不到更好的关键字为止。如第五节所示,该策略对于具有大量消息长度变化的协议(如DHCP)特别有效。
E. Format and State Machine Inference
如前所述,每个消息在多次序列对齐后被分割为几个对齐的字段(例如,图4a)。在迭代对齐和聚类之后,可以通过汇总同一集群中所有消息的字段直接恢复每种类型的格式。格式包括用长度(L)、值(V)和字段类型定义的字段(S:具有特定值的静态字段;“D”:动态字段,包含潜在值列表)。例如,在图4a中,字段f0可以表示为S(V = ‘0504’);字段f7可以是D(L = 1, V =[‘82’, ‘81’]),这是一个有两个潜在值的动态字段;和字段f12可以是D(L =(0,11)),这是一个变长字段或可选字段,因为对于某些消息它是空的。可以根据这些格式生成新的消息。
此外,我们利用现有的技术[25]来推断状态机。当正确定义消息类型时,该技术可以很好地工作。基本思想是为每个会话派生消息类型序列(在痕迹中),并聚合这些序列以形成一个状态机。细节被省略了,因为这不是我们的贡献。
注意,完整格式和状态机推理并不是本文的重点,它们仅用于评估聚类结果(V-C节和V-D节)。如果使用先验知识先检测一些常见字段[26],[54],[69],例如长度字段或地址字段,则可以产生更精确的推断。这超出了本文的范围。
4.PROBABILISTIC KEYWORD IDENTIFICATION
我们的技术中的一个关键步骤是将关键字识别中的不确定性建模为观察值和一组随机变量的联合分布,每个随机变量表示候选字段是否为消息的关键字。在本节中,我们将详细讨论如何用概率对不确定性建模,并使用图形模型进行概率推断。
A. Random Variables and Probabilistic Constraints
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pit5LKxT-1680934762676)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230330205838650.png)]
表I的前三列定义谓词、它们的符号和描述。谓词具有布尔值,并与系统中的随机变量相关联。在本文的其余部分,我们不区分术语随机变量和谓词。特别地,如果字段f是关键字字段,则关键字谓词K(f)断言。其他谓词断言观察结果。M(f, c)通过关键字f断言集群c中的消息与其他集群中的消息相比具有更高的相似性;R(f, c)断言对于c中的消息,它们在另一端对应的消息应该属于同一个集群;S(f, c)断言c中的消息应该具有相似的字段结构;D(f)是一个全局断言(即不特定于一个集群),断言关键字f不会导致太多的集群,每个集群应该有足够的消息。
表I中的最后一列显示了与谓词相关的约束集。直观地说,它们表示随机变量的相关性,可以认为是这些变量的联合分布。每个谓词有两种约束,第一种被称为将谓词与先验概率相关联的观察约束,它们用一个表示相关谓词的符号作为子脚本,例如,约束Cm是消息相似谓词M(f, c)的观察约束。它的主体M(f, c) = 1 (pm)表示“谓词M(f, c)有pm为真的先验概率”。其他观测约束的定义类似,我们将在本节后面解释如何系统地推导先验概率。
第二种约束称为推理约束。它们是带有隐含关系的子脚本。隐含可以通过两种方式进行:从观察谓词到关键字谓词或从关键字谓词到观察谓词。它们是概率性的,由一个隐含概率来调节。例如,表1中的第三行第四列Ck→m :K(f) —>(Pm→) M(f,c)表示了,如果f是关键词,集群c(以f为关键词形成)中的消息有pm→的机会,其内部集群相似度高于集群间相似度。下面的约束条件Ck←m代表了推理的相反方向。直观地说,这两个约束描述了K和M之间关系的不确定性。例如,即使f是真正的关键词,仍然有可能同一类型的信息没有高度的相似性。从理论上讲,由隐含概率表示的不确定性,例如pm→和pm←,遵循某种正态分布,可以使用基于领域知识的预定义常数进行近似。在实践中,现有的概率推理文献通常利用来自领域知识的预先定义的概率值[84]、[45]、[36]、[58]、[21]、[60]、[50]。现有的研究也表明,由于推理算法的迭代性,推理结果通常对这些值不敏感。我们遵循同样的做法,如用0.95表示可能,用0.1表示不可能,并根据个别观测值的不确定性水平,在这两个值的基础上调整隐含概率。例如,远程耦合约束Ck→r(从关键词到耦合谓词)的隐含概率pr→为0.9,因为如果关键词正确的话,耦合结果的不确定性很小。也就是说,同一类请求信息的响应信息极有可能属于同一类。然而,沿着相反的方向,pr←=0.8表示,如果两边的对应信息分别属于两个群组,我们不能如此确信f是正确的关键词,因为这样的完美耦合可能是偶然的。信息相似性的隐含概率比远程耦合的概率低,因为它们更不确定。在NETPLIER中,对于信息相似性约束,概率p→被设定为0.8,对于其他约束,概率为0.9。概率p←位于[0.6,0.8]之间,这个取决于集群的大小。在第五部分,我们在小型数据集(100条消息)中验证了这些隐含概率。我们注意到,我们的系统对这些参数并不敏感,与文献一致。
B. Determining Prior Observation Probabilities
在下文中,我们将详细讨论如何计算观察约束pm、pr、ps和pd的先验概率。与表示推理不确定性和基本稳定性的隐含·概率不同,这些概率描述的是观察数据,并随着我们用来聚类信息的字段f而有很大的变化。
Message Similarity Constraints.
基于MSA结果,我们可以计算一对对齐消息的相似度分数:
s=相同字节数两条消息的字节数之和
s= \frac {相同字节数}{两条消息的字节数之和}
s=两条消息的字节数之和相同字节数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nX2ZpC35-1680934762676)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230331100741571.png)]
在得到所有消息对的相似度分数后,构造一个相似度得分矩阵。对于每个关键字候选字段f,我们可以根据其聚类结果将所有相似度得分分为两类:inner-scores,其中两个消息来自同一个聚类;inter-scores,其中两个消息来自不同的聚类。
理想情况下,消息相似度约束要求所有 inner-scores 都高于 inter-scores 。如果是这样,这个约束将被充分地观察到,因此我们将pm设为1。但是,两种分数的分布通常重叠,说明存在错误匹配和错误不匹配的误差。这些术语来自生物识别技术[68],其中多序列比对被广泛使用。直观地,在我们的上下文中,前者(inner-scores)表示不同类型的消息不希望被分组到一个集群中,而后者( inter-scores )表示相同类型的消息不希望被放置在不同的集群中。我们通过计算两个误差来量化重叠。误差值越小,消息相似约束的先验概率越高。
具体来说,对于一个从0到1的阈值t,我们可以计算错误匹配率(FMR)和错误不匹配率(FNMR),如下所示:
FMR=大于t的inter−scores的个数inter−scores的总个数
FMR= \frac {大于t的inter-scores的个数}{inter-scores的总个数}
FMR=inter−scores的总个数大于t的inter−scores的个数
FNMR=小于t的inner−scores的个数inner−scores的总个数 FNMR = \frac {小于t的inner-scores的个数}{inner-scores的总个数} FNMR=inner−scores的总个数小于t的inner−scores的个数
考虑[0,1]中的所有t,我们可以画出FMR和FNMR的曲线,如图8所示。观察到,当t增加时,FMR减少,FNMR增加。为了描述相似性约束,我们需要同时考虑FMR和FNMR。遵循生物计量学[30]的实践,我们选择了两条曲线的交点,既平衡了FMR又平衡了FNMR。交集处的错误率值也称为相等错误率(Equal error rate, EER),它描述了聚类结果的整体准确性,我们有如下所示。
pm=1−EER
p_m = 1 - EER
pm=1−EER
这意味着EER越低,我们对消息相似约束M的置信度就越高。正如第2.B节所讨论的,基于对齐的聚类方法也使用相似分数。但是,他们必须对所有协议训练一个固定的阈值,这无法避免由于不同协议的重叠和不同的分数分布而导致的错误。相比之下,我们使用EER来描述相似分数的分布,不需要固定的阈值。
Remote Coupling Constraints.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fViDdRgQ-1680934762677)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230401095215269.png)]
在预处理步骤中,我们将原始痕迹分割为会话模式,在会话中,我们可以根据时间戳、IP和端口号将来自客户端和服务器端的消息分组成对。例如,在图1中,我们可以生成如表II所示的消息对。通过双方的候选关键字进行聚类后,可以将消息替换为它们所属的集群,并将消息对转换为集群对。右边两列显示了我们通过字段f1和f7分别生成的集群对。对于一方大小为N的聚类,我们计算另一方属于同一聚类的最大数量的对应信息,用M表示,并有以下情况。
pr=MN
p_r= \frac MN
pr=NM
例如,对于f1的消息类型对,有四个群组(红色)与ts1配对,其中两个是tc1。因此,集群ts1的pr值为0.50。在表II中对于f7,只有两个独立的集群对,即<tc1, ts1 >和<ts2, tc2 >。因此,所有聚类的pr=1,表明聚类质量比使用f1更好。
Structure Coherence Constraints.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jW1tJE4z-1680934762677)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230401101229606.png)]
结构一致性约束规定,同一类型的消息共享类似的字段结构。对于不同类型的消息,它们可能共享一些共同的字段,由其独特的字段分隔。当对齐这些消息时,由于这些特定类型的字段而形成对齐间隙。例如,在图9中,这两条信息属于不同的类型,具有不同的字段结构。如果它们被错误地放到一个群组中,就会插入大量的空隙(‘-’)来使它们的共同字段保持一致。虽然同一类型的信息在排列中也存在差距(由于数据的变化),但前者的情况通常会导致更多的差距。因此,在用候选字段进行聚类后,我们再次对同一聚类中的信息进行对齐,并计算对齐间隙的平均数量。差距的比例被用作一致性约束的先验概率。
ps=1−一条信息中的平均空隙(′−′)数量一条(对齐的)信息的总长度
p_s = 1 - \frac{一条信息中的平均空隙('-')数量}{一条(对齐的)信息的总长度}
ps=1−一条(对齐的)信息的总长度一条信息中的平均空隙(′−′)数量
例如,在图7b中以字段f7划分的集群tc1中有4条信息mc0、mc2、mc3和mc4。根据图4a所示的MSA结果,信息mc0和mc4在对齐后有11个空隙,用对齐后插入尾部的符号’-'来表示。相比之下,mc2和mc3没有缺口。因此,tc1的平均空隙数为(11+0+0+11)/4 = 5.5,集群的ps计算为1 - 5.5/28。
Dimension Constraints.
我们考虑规模约束中的两个指标:集群的总数量和单信息集群(其中只有一个单信息)的数量。第一个度量的定义如下:
rdistinct−value=不同字段值的数量信息的数量
r_{distinct-value} = \frac {不同字段值的数量}{信息的数量}
rdistinct−value=信息的数量不同字段值的数量
我们将其与一个阈值 tvalue 值进行比较,在本文中保守地设定为0.5。如果度量值大于阈值,就意味着候选字段产生了太多的聚类,这就不太可能是一个真正的关键词。请注意,一个真正的关键词通常只有少量的不同值。因此,0.5是一个非常保守的值,以确保真正的关键词不会被忽略,而且不会影响生成的集群数量。
第二个指标是单一信息集群占集群总数的比例:
rsinglecluster=单一信息集群的数量集群的数量
r_{single cluster} = \frac {单一信息集群的数量}{集群的数量}
rsinglecluster=集群的数量单一信息集群的数量
它还会与阈值tsingle进行比较,本文中也是0.5。如果这两个值都小于它们的阈值,那么维度约束就被赋予一个高概率,例如0.95。否则,它被设定为低概率,例如0.1。
从图7所示的聚类结果中,我们可以判定根据字段f1所划分的结果中的rsingle_cluster为5/8,因此其pd为0.1,而根据字段f7所划分的结果满足这两个条件,则其 pd为0.95。
Normalization.
如上所述,四个观测约束条件由不同的度量来表示,这并不意味着一般的概率,可能有不同的分布。例如,EER通常在[0.3, 0.6]范围内,而远程耦合约束的计算pr可能高达1。如果一种观察约束的概率被限制在一个小范围内,那么这种观察约束的作用与其他约束相比可能就不那么重要了。为了避免这个问题,我们在进一步进行概率推理之前,将所有候选字段的同类型约束的概率归一到同一范围,例如[0.1, 0.95]。
C. Probabilistic Inference
在这个阶段,所有的约束条件都要一起考虑,形成一个联合分布。让布尔变量k表示关键词谓词,xi表示表I中的观察谓词。那么所有的约束条件都可以表示为带有布尔变量的概率函数。具体来说,一个观察约束 xi=1§ 被翻译成以下形式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zhVG5k42-1680934762677)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230401130423413.png)]
而一个推理约束 K —>(P→) xi 被翻译成如下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jlGP3mXp-1680934762678)(C:\Users\Jiajia\AppData\Roaming\Typora\typora-user-images\image-20230401130648724.png)]
推理约束 K ←(P←) xi 也是类似的转换。然后,所有约束的结合可以表示为所有相应概率函数的乘积:
f(k,x1,x2,...,xn)=f1×f2×⋅⋅⋅×fm
f(k, x_1, x_2, . . . , x_n) = f_1 × f_2 × · · · × f_m
f(k,x1,x2,...,xn)=f1×f2×⋅⋅⋅×fm
联合概率函数定义如下[53]。
p(k,x1,x2,...,xn)=f1×f2×⋅⋅⋅×fmΣk,x1,...,xn(f−1×f2×⋅⋅⋅×fm)
p(k, x_1, x_2, . . . , x_n) = \frac {f_1 × f_2 × · · · × f_m}{\Sigma_{k,x_1,...,x_n}(f-1 × f_2 × · · · × f_m)}
p(k,x1,x2,...,xn)=Σk,x1,...,xn(f−1×f2×⋅⋅⋅×fm)f1×f2×⋅⋅⋅×fm
我们感兴趣的是假设k的边际概率,它是所有观察变量的总和。这个值代表了候选字段是关键词的概率。
p(k)=Σx1,...,xnp(k,x1,x2,...,xn)
p(k) = \Sigma_{x_1,...,x_n} p(k, x_1, x_2, . . . , x_n)
p(k)=Σx1,...,xnp(k,x1,x2,...,xn)
Factor Graph.
. , x_n) = \frac {f_1 × f_2 × · · · × f_m}{\Sigma_{k,x_1,…,x_n}(f-1 × f_2 × · · · × f_m)}
我们感兴趣的是假设k的边际概率,它是所有观察变量的总和。这个值代表了候选字段是关键词的概率。
我们感兴趣的是假设k的边际概率,它是所有观察变量的总和。这个值代表了候选字段是关键词的概率。
我们感兴趣的是假设k的边际概率,它是所有观察变量的总和。这个值代表了候选字段是关键词的概率。
p(k) = \Sigma_{x_1,…,x_n} p(k, x_1, x_2, . . . , x_n)
$$
Factor Graph.
由于有大量的约束条件,边际概率的计算是非常昂贵的。我们使用一个图形模型,即因子图[86],来表示所有的概率函数并进行有效的计算。因子图是一个有两种节点的双边图,即因子节点和变量节点。因子结点代表概率函数,变量节点代表概率函数中使用的变量,其边连接到相应的因子节点上。然后,the sum-product belief propagation 算法[53]被用来通过迭代时信息传递方法,以有效的方式计算节点的边际概率。直观地说,我们可以把这看作是一个传言传播的程序。观察结果是初始传言。在每个迭代中,每个变量(可以认为是一个人)从其邻居那里收集所有关于自己的传言,将其汇总,并将汇总后的传言传递给相关因子节点。每个因子(涉及多个变量)收集其变量的传言,并根据因子表示的条件概率计算边际概率,然后将计算的概率传播给其变量。这个过程重复进行,直到收敛。我们使用的是一个现成的因子图引擎[17]。因此,细节将被省略。