《ProWord An Unsupervised Approach to Protocol FeatureWord Extraction》论文阅读报告

  • 论文介绍

我阅读的论文的题目是《ProWord: An Unsupervised Approach to Protocol Feature Word Extraction》中文译名为:《ProWord:一种提取协议特证词的自动化方式》,故名思议,该论文介绍了一种能够自动化提取协议特证词的方式,并将其取名为ProWord,研究的领域是协议逆向工程领域。

  • 论文正文内容

  • 摘要

Protocol feature words:协议特证词。这是一种能够区分不同应用程序协议的字节序列,并且它们能够构成很多深度报文分析规则的框架,在网络管理、网络评估和安全系统方面运用广泛。打个比方,如果我们说每一门协议都是一种语言的话,那么协议特征词就是构成这个语言的词库,同时这样的协议特征词也能够成为分析协议的工具。

该论文主要解决的问题是如何系统又高效地从网络流量中提取协议特征词。现已经有一种名为“n-gram”的方法能够将协议载荷自动分成相同长度的几段,但是对于提取协议特征词来说基本上是毫无用处的。对于协议逆向工程来说,因为只是将协议载荷自动分成相同长度的几段,仅仅针对那些协议内字段固定长度的协议,这样的工作价值比较低。

于是论文提出了一种解决方法:ProWord,这是一种建立在两个算法的基础上的一种方式,能够从网络流量中自动化提取协议特征词。这里简单地介绍一下这两个算法。

第一个算法是改进的专家表决算法。这种算法能够根据信息熵将协议载荷分段,这样的分段比“n-gram”的分段方式更加精准有效。不是仅仅以长度为单位对报文载荷进行分段,而是通过信息量对其进行分段,这样能够保证一些相关的信息不会被分为两半。

第二个算法是一个排序算法。论文提出了一种检索启发式方法,能够对候选词进行排序,并选择排序最高位作为协议特征词。

最后在真实环境中检验ProWord方法和n-gram方法,最后得出ProWord方法提取协议特征词要远比n-gram方法提取协议特征词有效、精准和迅速。

  • 引言

1、分别从三个例子说明协议特征词的运用场景。

(1)L7-filter是一种Linux上的外挂插件,是一种能够针对协议内容进行过滤的软件,常被用来过滤QQ、迅雷等协议通信的内容,达到流量认证识别的目的。

(2)Snort和Bro这种入侵检测系统也需要特征词去建立规则,以达到引导引擎和应用层协议的过程。

(3)Wireshark和NetDude这种流量分析工具要求第三方开发的额外插件对新协议提供特征词支持。

相比于报文长度这种很容易改变的东西,协议特征词就更显得稳定,且更加容易在区分应用协议的过程中变得有效。

2、目前已经存在协议特征词提取的工作

这种工作在机器学习领域叫做特征工程。在协议特征还没有明确定义的时候,其严重依赖于手工劳动。当来到协议逆向工程领域时,我们需要前任的经验来发现特征词界线并选择候选词。

基于文本的协议如SMTP和FTP都有人类可阅读的部分,所以我们可以很清晰地看到这些词的界线在哪里。对于没有学习过协议的人来说,从一些二进制协议中提取特征词是一项很大的挑战。而且,我们不能简单地就把一个流量轨迹进行经验化或者手工判断。

3、相关工作和他们的局限性

(1)现在已有一些研究能够将连续的载荷分解成为小单元并建立词袋模型。但是对于二进制协议来说,使用空格符制定特征词的界线是没有用的。

(2)n-gram已经能够广义上地从二进制协议中提取特征词了,它使用滑动窗口大小n,以n字节将载荷分解成相同长度的小单元。然而这种方式也有可能将整个特征词分解成好几个部分,或者将不相关的特征词部分揉到一个分组中来。近期有研究表明n-gram在适当变化的协议中提取特征词的行为已经用处不大。

(3)需要人工监管的机器学习在流量分类领域已经广泛应用了。很多研究聚焦于设计一种基于高新科技的有效分类算法学习工具,像support vector machines和Naïve Bayesian分类器一样。人工监管的机器学习要求一个训练集才能对流量进行精确分类,但是如果将协议逆向分析用于分析未知协议时,由于没有训练集,所以其基本给不了我们任何有效的建议。

4、本文贡献

本文的贡献主要在三个方面:载荷分割、候选词排序和结果评估。

作者设计了ProWord,一种轻量级的自动机制,其能自动并准确地从流量痕迹中提取最有可能是特征词的一系列字节序列。ProWord强调了两个方面的挑战:一方面是如何从流量痕迹中确定词界线以提取特征词,另一方面是如何对字节序列以特征词可能性的大小进行排序。

(1)针对第一个方面,解决方法主要是来源于自然语言的处理分类——使用改进的专家投票算法(modified voting experts)。举个例子,如果有这样一个报文:

“MAIL FROM:<a@gmail.com>\r\n”

那么专家投票算法会将其分割成

“MAIL FROM:<”, “a@”,“gmail”, “.com”,“>\r\n”

而如果使用n-gram算法,例如3-gram算法,则会将其分割成为

{MAI, AIL,IL_, L_F, _FR, FRO, ROM, OM:, M:<, ...}

显然这样的分割方法不切实际,明显专家投票算法在分解这个报文要优于n-gram算法。但是专家投票算法存在内存限制,如果数据量过大的话会导致内存爆炸,所以作者通过过滤低频率字节序列的方法改进了专家投票算法,似的改进后的专家投票算法能够应用到一定规模的流量载荷中去。

(2)针对第二个方面,解决的方法主要来源于TF-IDF权重的信息检索算法,作者将这种想法应用到流量分析的过程中。ProWord根据不同规模的协议特征词打分,并且使用这些分数来将候选词进行排序,为了获取简洁的结果,ProWord会将多余的候选词过滤掉。

(3)使用了六种不同类型的协议对ProWord和n-gram算法进行了评估,结果显示ProWord提供了更加精确的特征词提取结果。

  • 分割算法
    1. 专家投票算法(Voting Experts)背景

这种算法是一种针对自然语言的自动化分割方法,通过操作滑动窗口大小,在一段连续的输入流中选择最有可能的界线位置进行词分割。我们利用这一点来验证该词是否为潜在的特征词。

专家投票算法将两个专家作为输入。第一个专家输入是单词内部信息熵,用HI来表示,且定义为:

HI (w) = −log P(w)

其中w指的是某个候选特征词,P(w)是w作为特征词的概率。那么一个数值低的HI则表明w很有可能是一个特征词。

第二个专家输入指单词界线信息熵,用HB来表示。HB定义为:

C表示所有特征候选词后紧跟着的字符的集合,其中P(c|w)表示在w作为特征词的条件下,C集合中的c元素作为特征词界线的概率。一个数值高的HB值能够说明在w作为候选词时,选择c作为界线的可能性很高。

例如“DATA.DAT”这一个字符串,在“DA”作为候选词时,C集合中就只有“T”这个元素,而如果将“A”候选词,则有C集合中就会有“.”和“T”两个元素。

下图就描述了这样一个专家投票算法的过程:

这其中有两个阶段:投票和决定阶段。在投票阶段,每一个专家都将投票某个位置作为某个大小的滑动窗口的界线。滑动窗口大小(记为L)能够让我们产生的候选词长度小于或者等于L。为了能够进行数字上的比较,我们将所有的候选词都用相同度量来进行标准化。

设i为滑动窗口开始的偏移量,单词内部投票分数和单词界线投票分数则可以分别表示为:

其中j是在(0,L)的范围内,wa,b表示在a到b偏移范围内的单词。每一个x都有一个投票分数V(x),V(x)可以用如下式子进行表示:

在决定阶段,如果满足条件:(i)x比其邻居包含更多的投票,即V(x)>V(x+1)(ii)其投票的数量超过了预先设定的阈值,即V(x)>T,就可以将x定为一个单词界线。

如图一所示的部分可知,最后得到的结果V(x)在该序列上的值分别为0,0,0,0,0,1,8,4,3,2,2,1……如果此时T=6,则能够说明在V(x)=8处为界线。

下面说明如何确定滑动窗口大小L。文章使用了(L+1)树先深搜索的方法列举出所有字节组合的可能性,这样就 能以此来计算信息熵。设置树深为L+1是因为我们需要多一个字节来计算界线信息熵HB,以应对可能的更大的L值。

如图2所示,其产生了一个“DATA.DAT”的深度为2的树形数据结构,该树形结构已经列举了当L=2时所有的可能的词组合。

  1. 基本专家投票算法的局限性

虽然专家投票算法在自然语言的分割方面已经很成功,但是由于树的每一个结点都是一个字母,且自然语言中的界线绝不仅仅是理论上的一两个,所以其还是存在一定的极限。语言上的传统能够为改进这个算法提供思路。比如当你看到英文字母“tio”在某个单词的结尾时,我们就会预测这个单词可能是“-tion”。

另一方面,对于纯二进制数据的分析,从语言传统上来说是几乎不可能的。很少的数据流都能产生很多的新的字节组合,这就意味着这样的数据流需要更多的内存去存储,而且更加难以分析。在专家投票算法中,仅仅增加很少的数据流就有可能引起结点空间的爆炸式增长。

图三中列举了SMTP和BITTORRENT协议的例子。a图中明显能够看出来BITTORRENT协议的增长率要远远高于SMTP协议的增长率。对于20k大小的数据包来说,BITTORRENT本身会产生130百万的结点数量,存储这些结点将会花费超过5GB的内存。从b图中的频率分布可以看出来,不管哪种协议,超过95%的结点仅仅只出现过一次或者两次。因此我们只需要捕获那些频次高的词即可。

     2.剪枝并完善专家投票算法

为了解决结点空间爆炸的问题,作者提出了一个对树进行剪枝的步骤来限制空间的使用。直觉上来说低频出现的词几乎不可能是协议特征词,所以作者通过预先设定的阈值周期性地删减掉一些词。

剪枝操作是基于Lossy Counting算法的,这是一种近似计数算法,其能使用有限的存储空间,通过周期性地移除低频词项来得到频次高的词的数量算法。这个算法的关键参数就是最大可能性评估错误率ε,通过ε可以计算出剪枝的时期和剪枝的阈值。

其中i是当前时间段已经剪枝次数。每一个新加入的后继结点在第i次剪枝的过程中都有可能在这之前被剪掉。这是一种用可能的评估错误来换取空间的做法,低数值的ε能够保证拥有更多的结点,但是高数值的ε可能会使得高频率的词丢失。在实践操作中,由于不能准确地确定协议分布,所以将M定义到尽可能的大,只要其不会报出内存错误即可。随后再决定θ和ε。

算法1给出了整个分割的算法,给定一个协议痕迹P,它能产生一系列的候选特征词。BUILDTRIE函数将会计算频率,并且在每一次剪枝时期将频率低于某个阈值的结点删除掉。SEGMENTATION的功能是通过专家投票算法确定候选词界线。该算法的复杂度主要体现在树形数据结构的建立。

  • 排序

我们可能会通过上述算法提取出数以百万计的候选特征词,验证这些候选词是否能被用为协议特征词在流量分析领域是十分重要的。接下来的目标就是从提取出来的候选词中,选择k个最有可能是特征词的候选词,在这个过程中依赖于先验知识来对候选词的一些属性进行打分。

本文使用三个属性来对候选词进行打分,这些属性被广泛地运用在现实生活中的协议逆向工程中,它们分别是频率、位置和长度。首先一个协议特征词应该是出现在大多数包中以能够区分该协议与其他协议,所以我们希望协议特征词能够拥有高频的特点。其次,我们希望这个特征词能够拥有一个固定的位置,这个特征词最好是出现在报文开头或者报文结尾这种确定位置。最后,我们希望这个特征词的长度能够在一个合理的范围内,因为太短的特征词区分度比较低,而特征词太长就会使得在通信的过程中消耗过多的资源。所以定义分数为:

总分数为这三个属性分数之积。通过这个打分,我们能够将所有候选词进行排序。属性分数之积作为打分评价是因为我们不追求能够找到一个候选特征词在这三个打分中都能得到高分,只需要其中的一个或者两个拿到的分数极高也能够保证这个分值很高。

1、打分规则和函数

打分规则主要是参照为了将网页进行排序而提出的信息检索启发法。本文工作的创新在于调整这种启发法,然后应用到流量分析当中。

(1)频率分数打分规则

该规则由两部分组成,分别是特征词出现次数,和多少个报文中出现这个特征词。对于两个候选特征词w1、w2,如果包含它们的报文数量相同,但是w1出现的次数比w2高,则w1的频率分数比w2高;如果它们出现的次数相同,但是包含w1报文的数量比包含w2报文的数量多,则w1的频率分数比w2高。频率分数的定义如下:

其中Xp(w)表示w这个词被多少个报文包含,Xt(w)表示w这个词出现的次数。

(2)位置分数打分规则

设Xp(w)表示w这个词被多少个报文包含,Xm(w)表示w这个词在报文的所有位置中的某个固定位置出现的最大次数。同样给出位置分数如下定义:

(3)长度分数打分规则

设|w|为候选词w的长度,|δl,δh|为特征词合理长度空间,于是定义长度分数为:

2、简洁程度

在SMTP中“RCPT TO:”与“RCPT TO”作为两个候选词进入到最终的排序阶段显然是不妥的,所以对于这种冗余的情况需要使用关键字过滤以增加结果的简洁程度。一个直接的方法就是编辑距离算法,通过插入、删除、置换某单个字符来去除冗余,但是运用到协议特征词上的效果就不会很好。例如SMTP中的“220”与“250”虽然只相差一个字符,但是代表的含义却完全不一样。所以需要一种更加保守的策略来过滤冗余。

本文使用两个严格的标准来识别冗余。首先检查该词是否为另一个词的子串,然后检查是否这两个词在报文中开始的位置是否相同。下面的算法2给出了伪代码。

  • 评估

我们评价ProWord使用应用层的协议,首先将协议分为两组,一组是公开的能得到说明文档和特征词的官方协议,另一组是没有说明文档和特征词的协议,但是存在有效性规则的验证。

本文从一个大学的网络网关上搜集协议信息,在表1中展示了6中协议。

SMTP、POP3、FTP、HTTP是在RFC上的、基于文本的标准协议,BITTORRENT是一种P2P协议用于文件传输,TONGHUASHUN是一种网上股票应用,它的载荷是加密的。后两种协议都是二进制协议。

表2中显示了ProWord的可调参数。调整表2中的参数可以更好地根据自己的要求提取协议特征词。

  1. 协议特征词提取评估

从以上的数据可以看出来ProWord提取特征词的效率更高,且结果更加简洁。

        2.排序模型评估

文章使用了其他的排序函数和ProWord对HTTP的特征词进行排序。

从图5来看,明显能够看出来正确的协议特征词在使用了Ffreq&Floc&Flen&Compact的排名要高,这说明使用这种方式的协议特征词更好区分。

  1. 运行速度评估

在一台四核Intel Xeon处理器,2.5GHz,16G内存的机器上运行该算法,表4总结了运行速度。从数据看来能够得出分割的速度要远远低于排序的速度,从这能看出来ProWord是作为一个离线的工具来设计的。

2.空间使用评估

ProWord使用的是Lossy Counting算法(LCA),在计数的同时进行剪枝操作去除频次较低的结点。

从图中可以看出来使用了LCA算法的节点数量要明显低于没有使用LCA的协议的节点数量。

  • 总结

本文设计了一种更好地提取协议特征词的方法,采用自动的方式,并且解决了以往内存空间限制的问题。

  • 心得体会

阅读完这篇论文之后,大致了解了一篇论文的具体写作方法。通过阅读这篇论文提升了我自身对协议的理解,并且获得了新的知识,了解了协议特征词的提取过程和方法。其中谈到的以正确率来换取空间的做法是第一次听说,之前只有听说过以空间换时间或者以时间换空间的做法,觉得很有感触。另外还有分数以乘法的形式来体现,这就能说明其中的单个或者较少几个项目突出也能使分数整体比较突出。

 

  • 论文中需要改进的部分

(一)只能对类似自然语言的协议特征词进行提取

文中提到的协议词的划分,只能够针对在协议中出现的特定的频次高的词划分出来。(比如MAIL FROM : )如果该协议定义的是在某个字段代表什么内容,就无法通过ProWord提取出协议特征词。

(二)文章的标题使用“protocol”不妥

协议应包含三个部分,即语法、语义和同步。协议特征词应该不仅限于语法部分,如果要说协议特征词的话,应该是同时包含语法、语义和同步的。

(三)未明确指出所谓P(w)这个含义的可能性是怎么来的

P(w)代表w这个词作为特征词的可能性大小,那么这个可能性大小是怎么得出来的还是存在疑问,是否是有后台庞大的数据库对这个可能性进行分析,还是其他的因素,或者是根据自然语言将人类书面所用单词的可能性运用其中难以得知。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值