摘要

随着匿名通信技术发展,网络监控愈发困难。如果匿名流量能够有效识别,就能阻止这种技术的 滥用。 近几年机器学习快速发展,本文应用了随机森林算法 —— 一种半监督学习算法,用于 SS (Shadowsocks)的流量侦测。 将随机森林算法应用于训练数据集,我们得到了 85% 的侦测准确率。随着训练集和测试集数据量的增加,侦测率逐步增加,直至达到一个常数。我们将会对训练集和测试集做进一步调整,以降低错误报率。

关键词:侦测,shadowsocks,随机森林算法,机器学习

1. 介绍

随着近几年海外新闻的正常,这些新闻包含了政治、经济、国内、金融、技术等方面的敏感信息( 真相信息 )。 为了应对这个国家的防火墙,获得更多新闻,越来越多的人们学会使用代理软件获取相关材料。高速发展的代理软件,越过防火墙传播未经审查的信息,都已被列入非法工具。 为了有效预防翻墙行为的发生,能够立即侦测和逮捕这些犯罪行为( 你们写论文,咋还想着逮捕别人,逮捕是国家机器干的事情啊 ),很有必要侦测和分类来自代理软件的流量,并相应地根据其特征对这些加密流量打上怀疑标签。这样操作后,可以为监管者提供详尽的信息,做下一步的解密和内容分析。

本文中,我们简单描述了SS的运行原则。接下来,详尽的分析来自该代理软件的流量,提取特征信息。我们使用 Libpcap 解决协议,使用机器学习训练特征数据的某些部分,建模识别。

本文结构如下:第 2 段中,我们介绍准备工作和对本文的贡献。第 3 段 介绍SS的运行原则。第 4 段详细参数侦测原则。相关的实验结果放在第 5 段。最后的第 6 段是总结。

2. 相关工作

为了更准确的理解从SS提取的流量特征,我们查阅了许多论文和材料( 翻墙查的吧)。我们知道,SS运行非常稳定,几乎是我国最稳定和最流行的代理软件,包括了翻墙的效率和速度。(这是给自己邀功埋伏笔?)由于SS的稳定和高效,我们能使用SS连接匿名网络TOR,VPN和其他代理,这些都是对防火墙的严重威胁,并带来更严重的安全问题。(原文:which become the severe threat to firewall and bring even more severe problem for security.) 本文中,我们基于随机森林算法,提出了一种侦测SS的方法。通过机器学习的半监督学习方法,我们能够侦测超过85%的SS流量,从而从源头上预防了解决的潜在的危险( 又邀功了)。

在目前,应用机器学习来研究流量侦测玩不多见。流量侦测更多依赖于人工识别,比如端口阻断,IP阻断。如果我们应用半监督或无监督机器学习,流量侦测能够靠机器完成,能降低人力,并提高侦测效率。将机器学习算法和流量侦测相结合,也是本文的一大贡献(第三次邀功)。

3. 背景

A.为什么SS难以侦测

SS难以侦测的主要原因是,SS的运行机制非常简单。正如绝大多数代理软件,SS收件建立与境外服务器的SSH加密同道,该境外服务器处于防火墙外。其次SS通过已建立的同道进行代理,即通过SSH服务器请求被防火墙屏蔽的服务器(啥歌,啥管,还有川总最爱上去吐槽的那啥特)。最后,被防火墙屏蔽的服务器,通过SSH服务器,发回用户请求的数据。因为SSH本身是基于RSA加密技术,GFW不能分析被加密数据里的关键字。SS将socks5协议分成两部分,服务器端和客户端。详细操作如下:首先,客户机请求与本地SS建立通信,本地SS可能是本地主机,或路由器,或其他任何机器,这些机器都不能通过伟大的GFW(掌声在哪里)。在SS客户端与SS服务器之间,可以通过多种加密方式通信,数据包在通过GFW时显示为普通的TCP包。这些包没有显著的特征,GFW不能解密这些数据,也就导致了GFW无法侦测和干预这些数据。最后,SS服务器解密收到的加密数据,把真实请求发送给真实的目标服务器,把相应数据发送回SS客户端。详细过程如图1所示。我们可以看到SS运行的每一步都绕过了GFW的侦测,因此无法被GFW阻断。这就是为什么难以人工侦测SS的原因。

B.随机森林算法

随机森林算法是一种统计学上的分类器算法。分类器决定给定数据属于哪一类。随机森林包含了许多决策树,训练样本,做出预测。预测结果又随机森林里的绝大多数决策树决定。 在我们的方法里,我们使用随机森林算法分类流量,分成 2 类:SS 流量,非 SS 流量。

C. 定义

  1. 数据包 :数据包是网络传送和交换数据的基本单位。数据包的长度不固定。数据包在传输过程中会被包裹成帧,加上一些特定格式的信息,比如包头部,包类型,信息长度,包版本等。
  2. 数据流:;在IP网络中,网络流量一般被定义成 5 部分:源 IP 地址,目标 IP 地址,源 IP 端口,目标 IP 端口,协议编号。因此,5 部分相同的网络数据包,可以被视为统一数据流。
  3. Biflow:Binary Flow,具有相同的源 IP 地址,目标 IP 地址,源 IP 端口,目标 IP 端口,协议编号的数据流。
  4. hostProfile:一个主机上,一段时间内,所有被过滤的数据包(文件被存为 .pcap 格式)

4.我们的方法

A.使用随机森林侦测SS流量

随机森林有许多CART(Classification And Regressionb Tree 分类和回归树)。每个决策树所用的训练数据集,都是从整个训练总集中取出,被取出的训练数据会被放回到总集去。当每颗决策树的训练节点,用过的训练集,按随机比例从总集中取出,这些被取出的训练集不会被放回总集。总集的数量是C,比例可能是C,sqrt(C),1/2sqrt(C),log2(C)。我们的实验中,使用sqrt(C)。

使用随机森林侦测SS流量的步骤如下:

  1. 决定训练过程需要的所有的数据集和参数,包括训练集 P,测试集 T,特征维度 F,CART 数量 t,每个 CART 的深度 d,节点所用的特征的数量 f,结束条件 s,节点所获最小信息 m。
  2. 从训练总集 P 中取出训练集。取出的训练集会被放回到总集里去,取出的训练集的数量记为 P(i),i 代表数量的索引。将P(i)设为根,从根开始训练。
  3. 如果当前节点不能达到结束条件,那么从维度特征向量 F 里随机取出 f 个特征,这些取出的特征不会被放回到 F 里去。从 f 个特征里选择特征 k,k 具有最佳的分类效果。让这 k 个特征做决策。样本数据会被分类为左节点,如果值小于阈值,分类为右节点,如果值大于阈值。如果当前节点达到结束条件,则把当前节点设置为叶节点。这个叶节点的预测结果是分类 c(j) 在当前节点。(此处原文不清晰
  4. 训练所有节点,知道所有节点被标注为叶节点或已训练过。
  5. 训练所有 CART 直到所有 CART 被训练过。
  6. 预测训练集 T,预测的过程类似训练的过程。从当前的 CART 根节点开始,如果小于该节点的阈值,被放入左节点,否则放入右节点。决策过程持续到叶节点输出预测结果。
  7. CART输出的所有预测值,最大的预测概率即为预测结果。

B. SS 的 biflow 的特征

从上面的随机森林算法,我们知道需要决定训练集和特征维度。根据数据包的 hostProfile 和 biflow 的属性,我们提出了若干特征。然后,我们获取了一大堆 SS 流量 (自己搭了个 SS 服务器),提取了有些特征值,存入训练集。特征详情参见表 1 。此外,我们有一个 3000 维向量,记忆是否上行数据和下行数据的数据包的大小,在整个通信过程中出现过。

表 1 :部分特征

特征 含义
totalPacketsNumber 全部数据包的数量
totalOutgoingPackets 全部上行数据包的数量
totalIncommingPackets 全部下行数据包的数量
totalTransmissionTimes 全部传输时间
incomingFraction 下行数据包的比例
outgoingFraction 上行数据包的比例
maxiumBurstLenth 流量爆发的最长长度
avgBurstLenth 流量爆发的平均长度
burstTimes 整个流量爆发时间

5.实验与结果

A.随机森林的过程,计算与值

实验步骤:

  • 抓取纯 SS 流量,提取特征,保存特征
  • 使用随机森林建模。我们设定 CART 的总值为 100,设定判定准则为'gini',设定提取特征的数量为 sqrt(C),C是特征维度的总数。决策树的最大深度设定为none,直到所有节点被分类。分类结果标示为两类:YES 和 NO。剩下的参数,按照 Python 里的 RandomForestClassifer 函数的默认值设定。
  • 抓取被政策的流量,包括 SS 流量和非 SS 流量。提取特定的特征值并保持。最后,使用随机森林算法预测。

B.数据收集

在本机上抓取 1 G SS 流量,使用 C 语言的 Libpcap 库,提取特征值,存入到数据库,作为训练集。 抓取本机 1 G 非 SS 流量共10次,同样用 libpcap 处理数据。然后,从26个本地主机上随机抓取超过 1 G 的 SS 流量和非SS流量,同样方式处理,存入数据库作为训练集。

C.如何计算

根据随机森林的计算结果,我们人工方式验证。然后,我们按不同的训练集大小,测试模型的准确率。

按照图2,选择的特征集有良好效果,这也证明了随机森林算法对侦测SS流量有良好效果。从图2中我们得出结论,使用更大的测试机,能得到更准确的结果。

图3显示了更大的训练集能得到更精确的侦测率。

6. 结论

在我们的试验中,我们验证了应用机器学习到流量侦测相当有效。我们同时得出结论,训练集的量级的增加,会让模型更加准确,会提高侦测准确率。此外,随着测试集的量级增加,准确率也会增加。应用这个半监督机器学习算法,跟人工方式操作相比,可以降低错误警报率。

在我们的方法中,我们使用了多种特征,可以提高侦测准确率。但是也增加了系统负担,使得模型相当冗余。我们将进一步深入研究特征,找到最有效的特征属性,排除一些不必要的特征,优化简化模型,提高整个系统的效率。

致谢

感谢Zhou ZhongLiu博士和Li Ruixing高工,他们提出了附有见解的意见和评论。感谢网络安全中心提供实验环境。感谢通信科技安全实验室提供深入研究的机会。

results matching ""

    No results matching ""