Network Message Field Type Clustering for Reverse Engineering of Unknown Binary Protocols(二进制未知协议逆向)

Network Message Field Type Clustering for Reverse Engineering of Unknown Binary Protocols

读之前想到的问题:

通过聚类具有相同数据类型的段来分析未知二进制协议中的报文字段数据类型。

语义推导是协议逆向工程的难点,语义分析的一个步骤是推断字段的数据类型或值域。虽然有一些方法可以识别单个字段的数据类型和值的相关性,但没有一种方法可以通过值的相似性来确定字段之间的关系,从而用于解释信息内容。在不实际识别数据类型的情况下,根据片段之间的相似性将其区分为相同字段数据类型的群组。由此获得的具有相同类型的段的知识简化后续分析,推断出值域,为模糊测试提供支持。三个主要的贡献:

  1. 一种对于报文的字段类型进行聚类的方法,且不限制每种类型的单独规则集,使其方法适用于多样的且有意外数据的协议。
  2. 自动化参数选择方法,根据具体使用情况对字段进行聚类

相关工作

协议逆向工程可被分为几个阶段:数据收集、特征提取、信息类型识别、信息格式推断、语义推导和行为模型重建。协议又分为文本协议和二进制协议。之前关于协议逆向工程的工作都侧重于消息类型和格式,或者侧重于位置协议的行为模型,针对报文内容中的字段的语义推导的方法较为少见。现有方法多基于是基于规则的,即使用一种启发式的规则推导预先定义的个别特定字段的语义(数字、标识符、网络地址)。如果协议中使用的数据类型没有被设定的去法师规则涵盖,或者是其封装方法未知无法得到地址等上下文的话,基于启发式规则推到的方法就会失效。

这篇文章意图实现一个更加通用的方法,而不是之前工作中针对个别字段类型的启发式方法,即对任意数据类型的消息字段进行聚类,所以这篇文章中的工作不会极限与一组预先定义的数据类型。由于其依赖于消息分割,其对三种可变长度的字段分割器进行了评估:Netzob 基于序列排列,CSP 应用了字节串的频率分析,而 NEMESYS *(这个是这个人上一篇的USENIX)则使用信息内容的统计特性来区分一个近似字段候选字段和另一个候选字段,从而形成未知二进制信息的启发式分割。使用堪培拉相似度(连续片段相似度,也是他自己的论文)来比较信息段之间的差异,该方法最初是为信息类型识别而提出的。文章中将其用于片段聚类(猜测是用堪培拉相似度作为度量值进行K-means,看到后面发现使用的是DBSCAN,是k-means的升级版,不需要指定簇的数量),而其最初的用途则是用于输入信息的序列对齐。

补充一下DBSCAN的知识:

DBSCAN 全称为 Density-Based Spatial Clustering Algorithm with Noise,是一种基于密度的噪声空间聚类算法。
DBSCAN 算法是基于数据点的密度进行聚类的,给空间中密集度较高的点分配同一个簇,其簇的范围是任意的,且如果数据中的噪声点不会被划分到簇中。
有两个参数需要设定:min_samplesepseps表示数据点的邻域半径,如果某个数据点的邻域内至少有min_sample个数据点,则将该数据点看作为核心点。
如果某个核心点的邻域内有其他核心点,则将它们看作属于同一个簇。

如果将eps设置得非常小,则有可能没有点成为核心点,并且可能导致所有点都被标记为噪声。如果将eps设置为非常大,则将导致所有点都被划分到同一个簇。
如果min_samples设置地太大,那么意味着更少的点会成为核心点,而更多的点将被标记为噪声。如果将eps设置得非常小,则有可能没有点成为核心点,并且可能导致所有点都被标记为噪声。如果将eps设置为非常大,则将导致所有点都被划分到同一个簇。如果min_samples设置太大,那么意味着更少的点会成为核心点,而更多的点将被标记为噪声。

ECDF

ECDF,全称Empirical Cumulative Distribution Function(经验累积分布函数),是一种统计工具,用于表示和可视化数据集的经验累积分布。它是一种非参数方法,用于描述数据集中各个数据点相对于其累积频率的分布情况。

ECDF的定义和计算方式如下:

对于给定的数据集,首先对数据进行排序,然后对每个数据点计算其累积分布函数值。这个值表示小于或等于该数据点的值在数据集中所占的比例。通常,ECDF是一个逐步递增的函数,它在数据点处有跳跃(因为在排序后数据点的值会重复),并最终趋于1。

数学上,对于数据集X,ECDF的计算方式如下:

ECDF(x) = (总数小于或等于x的数据点数量) / (数据点总数)

ECDF通常以图形的形式表示,其中x轴表示数据集中的不同值,y轴表示小于或等于该值的数据点的累积分布。通过观察ECDF图,您可以了解数据的分布情况,包括中位数、分位数、极值和数据点的相对分布情况。

ECDF是一种有用的工具,因为它不依赖于数据分布的具体形状或参数化模型,而是直接基于观测数据计算分布。它通常用于探索数据的特征、比较不同数据集之间的分布差异,以及用于确定数据集中数据点相对于整体分布的位置。

kneedie算法

Kneedie(或 Knee Detection in Empirical Estimators)算法是一种用于自动检测数据中的"膝点"或"拐点"的算法,特别适用于帮助确定在数据集中的何处出现了显著的结构性变化。膝点通常表示了数据中的一个关键转折点,它可以用于选择模型参数、确定最佳聚类数、估计数据中的自然分组数量等。

Kneedie算法的主要目标是从数据中识别这些拐点,以帮助数据分析人员做出决策。它的操作方式通常涉及以下步骤:

  1. 计算数据集中不同数据点或值的某种度量,如误差平方和、方差、信息准则等。这个度量通常与数据分析的目标有关,例如,对于聚类问题,可能是簇内平方和(Inertia)。
  2. 对不同度量值或数据点进行排序,通常按升序排列。
  3. 在排序后的度量值或数据点上寻找膝点,这是Kneedie算法的核心部分。膝点通常是曲线上的一个拐点,表示度量值出现了显著的变化。
  4. 确定膝点的位置,这通常涉及在度量值中找到拐点并确定其位置。

Kneedie算法的目标是帮助确定数据中的结构性变化,并自动识别出膝点,以帮助数据分析师或研究人员做出更好的决策。这在许多领域都有应用,包括机器学习、聚类分析、因子分析、模型选择和其他需要确定数据结构性变化的任务。Kneedie算法可以帮助自动选择合适的参数或确定适当的数据分组,从而提高数据分析的效率和准确性。

数据类型聚类

一种启发式方法,将相同类型的数据聚类到字段内容相似的组中(使用DNSCAN算法和堪培拉不相似度)。通过跟踪的报文中的这样的数据段,寻找报文值之间的关系,且其是根据报文数据段的相似度而不是数据段中的字节未知。由此产生的簇为伪数据类型,用于之后对于语义和字段的分析。步骤:

1.预处理

预处理阶段将从其raw trace中筛选出需要的协议和去重,因为其使用相似度作为度量,所以重复的信息意义不大

2.分割

将二进制协议规范中的字段定义为信息中特定位置的字节序列,具有特定的数据类型(如整数、字符序列或时间戳)和值域。将每一个片段定义为通过推理确定的候选字段,理想状况下于真实字段相匹配。分段式对于消息进行表征分析的重要前提,需要分段才能确定段的数据类型、推断其语义,并最终推导出准确的字段定义。将踪迹中的报文分割成子序列。已知协议的报文可以通过使用 Wireshark 提供的剖析器来分割。未知协议无法使用剖析器来可靠地确定报文字段,但可以使用启发式近似方法来找到可能的字段边界,并获得作为候选字段的片段。所以就用到前面提到的字段分割器Netzob、csp 和 NEMESYS。它们对固定结构的协议和动态字段长度不同的报文都有效。通过这3个分割器识别出的段落就会作为协议字段的候选段落。

3.分析其不相似度

将每个片段定义为字节值的向量,然后使用堪培拉相似度进行计算其归一化相速度值,并将堪培拉距离扩展至不同维度上。

将所有向量之间的成对相似度存储在一个相似度矩阵 D 中。在分析中排除只有一个字节长的片段,因为整个信息中任意单字节的巧合相似性会妨碍对这种短片段进行有意义的分析。这些被排除的单字节片段在后续会时使用频率分析等方法进行分析。对于重复的字段值,只计算一次因为其不会为聚类添加新的信息。

最后使用每对唯一段的相似度作为下一步基于密度的噪声应用空间聚类的指导。

4.DBSCAN的参数自动配置

DBSCAN算法有两个参数需要配置:形成中心点的元素的最少数量和最小密度min_sampleseps。和K-means中的簇数量一样,这两种参数决定了聚类的效果,但是一般是手动配置和调整的。文中使用一种新的方法自动的配置这两个参数,且无监督。

对于eps,自动化配置会搜索ECDF(经验累积分布函数)的knee point(膝点通常指的是曲线或分布中的一个拐点,其特征是在该点附近出现了显著的变化或转折。)ECDF函数是使用k-nn计算出的不同片段之间的不相似度来表示。ECDF 的值是轨迹中堪培拉相似度小于或等于各自第 k 个近邻的所有线段的分数。从这个函数中寻找一个明显的拐点,使用这个拐点作为eps的值可以让DBSCAN算法稳定的检测聚类的边界。

为了能够动态的选择最优的膝点,文中使用了Kneedle 算法。通过这个算法

由于DBSCAN对min_samples并不是非常敏感,所以其设定了其值为ln(其所有样本数量的值).伪代码如下:
在这里插入图片描述

里面的 ϵ \epsilon ϵ就是eps,n是样本数量

5.聚类

DBSCAN 是一种流行且高效的聚类算法,它对聚类的形状不做任何假设,不需要将目标聚类数作为输入,并将异常值视为噪声。这些特性使其有别于传统的聚类方法,如 k-means 或频谱聚类,后者不适合对协议进行逆向,因为不知道聚类的形状和数量。对于其他聚类方法,如聚合聚类、亲和传播或支持向量机,针对以前未见过的trace自动调整参数是比较困难。相比之下,DBSCAN 的主要优势在于可以设计一种方法,直接从trace的不相似性分布中推导出其参数。所以其配置程序完全自动化,无需像其他聚类器那样针对新trace进行再训练或反复调整。

DBSCAN算法能够对噪声数据中的高密度核心进行识别,还可以通过将高密度核心连接并确定为相似线段的方法进行聚类。在数据中,各个片段相异性低的区域中,其片段密度就会更高。由此,DBSCAN可以将相似的段进行分组,并在分组中包含相似数据类型的字段。本文献通过在wireshark中进行比对从而确定簇中的数据符合真实的数据类型(IV节中有面熟看到那个地方的时候回来更改)。

由于形成中心点的元素的最少密度eps也就是 ϵ \epsilon ϵ需要根据经验累积函数中的膝点进行确定,所以在某些极端情况下,相异性分布导致经验累积函数中出现多个拐点,这时通过这样的方式找到的eps便无法提供合适的密实度且这个值会过大。在这种情况下,一个包含60%以上的片段的簇不会被考虑为噪声。为了避免出现这样的情况并且选择下一个更小的膝点,将只考虑一个原本经验累积函数的一个子集,并且重新对其子集执行自动化参数设置的过程,然后对其进行聚类。虽然这样可能丢失一些内容,但是其在准确率方面更将会有很大的提升。

6.细化聚类

由于输入的trace中字段值的可变性不一定均匀分布,同一数据类型可能会被分为多个簇即被过度分类,这个问题不仅存在于DBSCAN,在其他的聚类算法中也同样存在,如HDBSCAN和OPTICS中。选择DBSCAN的原因是它可以提供更多可能的簇边界微调。在实际的探测过程中,被过度分类的集群可以通过密度低但是可以被探测到的区域相连。细化聚类就是自动检测临近且密度相似的集群,并将其合并。
S i , j l i n k = a r g m i n s i ∈ c i d ( s i , s j ) , ∀ s j ∈ c j S_{i,j}^{link}=\underset{s_i\in c_i}{argmin}\quad d(s_i,s_j), \forall s_j\in c_j Si,jlink=siciargmind(si,sj),sjcj
上面的公式中,我们假设有两个集群 c i c_i ci c j c_j cj ,则链接字段 S i , j l i n k S_{i,j}^{link} Si,jlink c i c_i ci中距离 c j c_j cj最近的字段。 d i , j l i n k d_{i,j}^{link} di,jlink S i , j l i n k S_{i,j}^{link} Si,jlink S j , i l i n k S_{j,i}^{link} Sj,ilink两个相连字段的距离。

根据上面的定义,文中提出两个启发式的聚类合并条件:(1)簇非常接近,且链接字段的eps相似。(2)簇有些相近,整个簇有相似的密度。

我们在这两种情况下对接近度和密度的量化不同,因为要捕捉不同的概念的接近度和密度,即局部 ϵ \epsilon ϵ-密度在元素连接集群和集群中作为一个整体的密度。

与过度分类不同,偶尔会出现分类不足的情况,即把不同的字段数据类型合并在一 个群组中。如果单个值与一组其他值相似,但具有不同的功能(如枚举值),就可能会出现这种情况。为了弥补这一点,如果聚类具有极端极化的值出现,例如,显示出许多唯一值,以及非常少,非常高的出现值,则将其拆分。

评估

评估两个关键指标:①数据类型通过片段相似度进行分类 ②启发式分割方法的准确程度。通过聚类的统计说明两个方面的有效性

使用准确率和召回率两个指标进行加权,对于准确率的重视程度是召回率的四倍。这是因为精确度对于聚类效果的影响非常大,且低的召回率会降低覆盖率,但是其并不会影响分析效果的准确性。由于覆盖率指的是字节数,而精确度和召回率指的是段对,因此结果统计并不直接相关。

使用抓取的DHCP、DNS、NBNS、NTP和SMB这些二进制协议的流量中进行抓取,这些的实现都是公开的。还使用了两个私有协议进行验证,即 Apple Wireless Direct Link (AWDL) 和 Auto Unlock (AU)。AWDL 是一种基于 Wi-Fi 的链路层协议,用于点对点通信。AU 是一个专有的距离界限协议。 这两个协议都没有公开文档,但是已经被人手动进行了逆向工程。AWDL的逆向工程规范(包括一个剖析器)已公开发布,AU协议的私有Wireshark剖析器也在网上有披露。这两个协议都是现实中所使用的协议。

1.度量标准和设置

首先,我们验证了我们的基本假设,即分段数据类型可以使用堪培拉相似度进行聚类。第三节介绍了对伪数据类型进行聚类的过程。为了进行验证,我们将聚类结果与 Wireshark 剖析器中的真实字段数据类型进行比较。这为验证不同数据类型是否能被我们的相似度测量正确区分提供了基线。
在这里插入图片描述

表 I 显示了这一点,与相同协议的 1 000 条信息的结果相比,这些复杂协议的 F 分数较低,特别是 100 条信息的召回率较低。这是由于多个聚类代表了一组不连贯的相似片段,从而降低了召回率。基于几乎所有聚类结果的高精确度,得出结论大多数字段类型都可以通过相似性进行精确聚类。总体而言,这方面的评估结果表明,聚类与真正的字段类型相匹配,从而验证了文中的数据类型聚类方法。

2.pseudo数据类型聚类验证

将聚类结果和wireshark中的进行分类的类型进行比较。即假设wires hark中可以识别的协议是未知的。作为整体质量指标,上表中提供了测试协议的准确度,召回率以及F1分数。作为参考,我们列出了跟踪中的消息数量、跟踪中的唯一字段数量以及自动配置的 e。**在试验过程中,在1000条的SMB协议中进行测试的时候的精度较低,通过对单个群组进行检查发现,时间戳和签名被分在了一个簇中,并没有被分开,然后作者将这个聚类忽略,精确度上升但是召回率却下降了很多。**这是所有测试运行中唯一一次参数选择失败并造成如此重大影响的情况,作者认为这表明该方法具有很强的鲁棒性。像 DHCP 和 SMB 这样具有复杂报文格式的协议,需要大量的跟踪变化,才能获得像样的分析结果。

3.分段不完美的情况下进行聚类

接下来,我们将介绍在不依赖 Wireshark 剖析器的完美分段的情况下,对真实世界协议的相似片段进行聚类的评估。相反,我们在已知测试协议集上使用了现有的启发式分割器 Netzob、NEMESYS 和 CSP 。这样,我们既能模拟聚类过程中缺乏地面实况的情况,又能保留测量推理质量的可能性。我们比较了现有的三种用于未知二进制协议的启发式分段器,以此作为现场数据类型聚类的基础。根据我们的结果,没有任何一种分段器明显优于其他分段器,对于所分析的协议类型而言,每种分段器都有其优缺点。表 II 包含每个测试协议的聚类统计准确度,召回率以及F1分数。我们在表中用粗体字标出了每个协议跟踪中表现最好的分割器。四次分析运行因超出运行时间或内存限制而失败。有相当数量的数据段无法正确、简洁地聚类,因为它们的边界相对于它们应该最佳标记的真实位置发生了偏移。这些片段模糊了一些数据段聚类,以至于我们无法清楚地区分受影响的数据类型。图 3 以三个时间戳为例,说明了这种情况如何影响异或度量,进而影响聚类结果。这些时间戳的最小有效字节本身似乎是随机的,因此不能根据其值进行聚类。这种错误并不是作为分段特征的相似性或聚类算法的影响,而是源于分段器对信息的错误分割。(由此证明分割很重要

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值