BotMiner阅读笔记

基本概念

  • 僵尸网络

  僵尸网络是目前互联网中存在的最严重威胁之一。僵尸网络是由受恶意软件影响的主机组成的网络,通常被用于分布式拒绝服务攻击(DDoS),或是类似垃圾邮件、网络钓鱼、等欺诈性活动。

  C&C通道是僵尸网络的核心组件,攻击者通过C&C通道与受控主机通信,协调各受控主机工作,实施网络攻击。这种类型的僵尸网络称为集中式僵尸网络。

  由于以C&C服务器为核心的集中式结构存在单点故障的问题,而且针对该结构通信模式的检测方法日益完善,P2P结构的僵尸网络开始被使用。攻击者通过向P2P网络中发布命令文件来发布命令,受感染主机在网络内频繁地和邻居主机通信,以便第一时间获取命令。

BotMiner阅读笔记_第1张图片

  本文所检测的僵尸网络定义为:通过C&C通道控制的一组协调工作的恶意软件实例。

  “恶意软件”指控制主机执行恶意活动的软件。从大量真实数据中观察可以发现,基于IRC协议的僵尸网络中,53%网络的攻击指令与扫描有关,通过扫描可以传播恶意软件本身或者进行DDoS攻击;14.4%网络与二进制恶意文件下载有关;大多数的基于HTTP通信的僵尸网络和P2P结构的僵尸网络多用于发送垃圾邮件。

  “受控”是指这些受控主机都需要从C&C服务器或许活动命令。

  “协调工作组”是指僵尸网络中包含多个计算机,并且执行相似或相关的C&C通信行为和恶意活动。

  本文将僵尸网络的行为分两个角度衡量:谁和谁通信,谁正在做什么。基于这两个角度分别从C平面(通信)和A平面(活动)对网络内主机进行聚类,再通过两个平面聚类的结果交叉分析,得出最后的僵尸网络推测。

研究现状

1.使用蜜罐技术

  为了收集和分析恶意软件,研究人员广泛使用蜜罐技术。

  Nepenthes等人提出一个特殊的蜜罐用于自动收集恶意软件样本。Rajab等人通过采用多方面方法收集跟踪僵尸网络,对当前流行的僵尸网络进行了深入研究。

2.最近提出的方法

  Reiter和Yen提出一个TAMD系统,该系统通过聚合拥有相同目标且携带相似负载的流量来检测恶意软件。Rishi是一个基于签名的IRC僵尸网络检测系统,它可以匹配已知的IRC僵尸网络常用名称。Binkley和Singh提出一种结合IRC统计与TCP权重来检测基于IRC的僵尸网络。

  这些系统大多限定于特定僵尸网络协议和结构,许多仅适用于IRC网络,为了补充现有的方法,本文提出一种摆脱协议和结构限制的框架。

系统设计与实现

BotMiner阅读笔记_第2张图片
  BotMiner主要由五个部分组成:

  • C平面监视器:部署在网络边缘,检查网络内外的通信流量;
  • A平面监视器:部署在网络边缘,检测网络内部主机的可疑活动;
  • C平面聚类和A平面聚类:从原始日志中提取许多特征,并采用相应的聚类算法进行聚类,以找出具有相似通信/活动行为的计算机组;
  • 跨平面联合分析:将C平面聚类和A平面聚类的结果关联分析,得出最终可疑僵尸网络的推测结果。

1.C平面监视器

  C平面监视器捕获网络中的流量,并记录其中与“谁和谁通信“相关的信息。关注的数据包的信息有:时间,持续时间,源IP,源端口,目的IP,目的端口,包的数量与字节数量。

2.A平面监视器

  A平面监视器捕获网络中的流量,并记录其中与“谁在做什么”有关的数据流量。A平面监视器分析受监控网络内部向外部发出的流量,以检测内部主机可能执行的恶意行为,如扫描、发送垃圾邮件、二进制文件下载、漏洞注入尝试等。

  A平面监视器是基于Snort构建的,本文将现有的入侵检测技术输入Snort作为预处理插件或检测特征。其中,对于检测扫描活动,本文改编了BotHunter中的SCADE(Statistical sCan Anomaly Detection Engine),主要使用了其中的abnormally-high scan rate和weighted failed connection rate两个规则;对于检测垃圾邮件相关的活动,本文制作了一个Snort的插件,专注于检测同源IP的异常DNS查询数量,以及同源IP多次向外部SMTP服务器发送信息的行为;对于检测二进制文件下载行为,本文使用一个类似PEHunter和BotHunter的方法,可以使用BotHunter中的规则进行检测。

  但需要注意的是,A平面监视器无法直接检测出僵尸网络,因为监视器设计的相对宽松,仅仅针对行为进行信息提取,不对行为的善恶进行辨别。

  由于A平面监视器是基于Snort框架构建的,于是可以动态地向其中添加新的检测方法或匹配规则。

3.C平面聚类

  C平面聚类从C平面监视器获取日志,再从日志中找出具有相似通信模式的计算机簇。聚类流程图如下所示,可以看到对于流量记录,首先经过三次过滤后进行初次聚类,然后进行特征提取,减少使用的特征数量后首先进行一次粗聚类,对于粗聚类的结果再进行一次细聚类,最终得到聚类结果。
BotMiner阅读笔记_第3张图片
  1)三层过滤

  通过过滤可以很好地减少后续聚类任务的工作量,过滤分为三层,前两层属于基础过滤,第三层是基于白名单的过滤。

  • F1 : 过滤掉网络内部主机之间相互的通信流量与外部主机主动发起向内部主机的通信流量
  • F2 :过滤掉未成功建立连接的流量包
  • F3 : 根据Alexa.com上的US前100热门网站与全球前100热门网站,过滤掉与这些知名网站的通信

  2)基本聚类

  本环节将相关流量聚合为一个C流。聚合方法为,将给定时间段E内的,拥有相同源IP、目的IP、目的端口以及协议的TCP/UDP流量,聚合为一个个表示“谁与谁通信”信息的组 C i = ( f j ) j = 1... m C_{i}=(f_{j})_{j=1...m} Ci=(fj)j=1...m

  3)特征提取与矢量化

  为了方便后续的聚类算法,需要先对流量进行矢量化。本文从C流中提取多个统计特征,用一个d维向量存储这些特征来表示每一C流。

  考虑四个参数的分布:

   fph,the number of flows per hour,每小时产生的流量

   ppf, the number of packets per flow,每个流中包含的数据包数量

   bpp,the average number of bytes per packets,数据包平均字节数

   bps,the average number of bytes per second,每秒平均字节数

  得到这四个方面统计数据的整体离散分布后,使用分位数将数据划分为13个区间: q 5 % , q 10 % , q 15 % , q 20 % , q 25 % , q 30 % , q 40 % , q 50 % , q 60 % , q 70 % , q 80 % , q 90 % q_{5\%}, q_{10\%}, q_{15\%}, q_{20\%}, q_{25\%}, q_{30\%}, q_{40\%}, q_{50\%}, q_{60\%}, q_{70\%}, q_{80\%}, q_{90\%} q5%,q10%,q15%,q20%,q25%,q30%,q40%,q50%,q60%,q70%,q80%,q90%。使用每个区间内的统计数据作为特征值,于是得到d=52个特征。

  4)粗聚类

  直接在C流的基础上进行聚类不仅计算量大,而且效果可能并不理想,于是先对数据进行粗聚类。粗聚类仅使用d=8个特征进行,分别为四个考虑方面的13个特征的均值与方差。

  本文使用的聚类方法是X-means算法。X-means算法是一个基于K-means算法的聚类算法,但是并不需要人为指定K值。它在内部使用多轮K-means算法,然后使用贝叶斯信息准则来评估聚类效果,由此计算出最优的K值。

  5)细聚类

  在粗聚类得出的集群上使用d=52个特征进行再次聚类。

  粗聚类与细聚类的示意图如下所示。
BotMiner阅读笔记_第4张图片
  C平面聚类的结果并不能直接表示僵尸网络,因为同一僵尸网络的计算机可能在此被分为不同的集群,且聚类结果中存在一定的噪音。这些问题都可以通过与A平面聚类的结果向结合来缓解。

4.A平面聚类

  在A平面聚类中,使用双重聚类结构。
BotMiner阅读笔记_第5张图片
  首先,根据活动类型对流量进行聚类,如扫描活动、垃圾邮件活动、二进制文件下载活动等。

  然后,再根据活动特征对每一类型的活动流量使用不同特征进行再次聚类。针对扫描活动,使用的特征有扫描端口与目标IP是否隶属同一子网;针对垃圾邮件,使用的特征为SMTP连接目标的相似性;针对漏洞利用,使用的特征按照Snort中的SID来进行再次聚类;针对二进制文件下载,使用二进制文件的相似性作为特征,具体为使用DICE方法计算第一个数据包中的二进制字符串的距离。

5.跨平面联合分析

  经过跨平面联合分析,可以进一步确认集群是否僵尸网络。首先需要计算每一个主机的僵尸网络得分:

   s ( h ) = Σ j > i , t ( A i ) ≠ t ( A j ) = w ( A i ) w ( A j ) ∣ A i ∩ A j ∣ ∣ A i ∪ A j ∣ + Σ i , k w ( A i ) ∣ A i ∩ C k ∣ ∣ A i ∪ C k ∣ s(h)=\Sigma_{j>i,t(A_{i}) \neq t(A_{j})}=w(A_{i})w(A_{j})\frac{|A_{i}\cap A_{j}|}{|A_{i}\cup A_{j}|}+\Sigma_{i,k}w(A_{i})\frac{|A_{i}\cap C_{k}|}{|A_{i}\cup C_{k}|} s(h)=Σj>i,t(Ai)̸=t(Aj)=w(Ai)w(Aj)AiAjAiAj+Σi,kw(Ai)AiCkAiCk

  其中,

   A ( h ) = { A i } i = 1... m A^{(h)}=\{A_{i}\}_{i=1...m} A(h)={Ai}i=1...m是包含主机h的A平面聚类;

   C ( h ) = { C i } i = 1... n C^{(h)}=\{C_{i}\}_{i=1...n} C(h)={Ci}i=1...n是包含主机h的C平面聚类;

   t ( A i ) t(A_{i}) t(Ai) A i A_{i} Ai所属的活动类型;

   w ( A i ) w(A_{i}) w(Ai)是为 A i A_{i} Ai赋予的权重,其中对于更关注的活动,如垃圾邮件或漏洞利用,权重更高;对于不那么关注的活动,如扫描或二进制文件下载,权重相对较低。

  然后计算 K H = A H ∪ C H = { K i H } i = 1... K^{H}=A^{H}\cup C^{H}=\{K^{H}_{i}\}_{i=1...} KH=AHCH={KiH}i=1...,将每个主机矢量化为 b ( h ) = { 0 , 1 } ∣ K ( B ) ∣ b(h)=\{0,1\}^{|K(B)|} b(h)={0,1}K(B),其中第i个元素在 h ∈ K i ( B ) h\in K_{i}^{(B)} hKi(B)。利用这些矢量,可以计算两个主机之间的相似性:

s i m ( h i , h j ) = Σ k = 1 m B I ( b k i = b k j ) + I ( Σ k = m B + 1 m B + n B I ( b k i = b k j ) ≥ 1 ) sim(h_{i},h_{j})=\Sigma_{k=1}^{mB}I(b_{k}^{i}=b_{k}^{j})+I(\Sigma_{k=mB+1}^{mB+nB}I(b_{k}^{i}=b_{k}^{j})\geq1) sim(hi,hj)=Σk=1mBI(bki=bkj)+I(Σk=mB+1mB+nBI(bki=bkj)1)

  其中, I ( X ) I(X) I(X)是一个指示函数,当X为真时输出1。

  本算法表示,当两个主机属于同一活动集,且至少有一个公共通信集时,将二者合并为一个集群。并且,基于此算法,可以对主机进行层次聚类,可以以此生成一个树状图来表示主机之间的关系,再使用DB指数来将树分为不同子树,每一子树为一个集群。示意图如下。
BotMiner阅读笔记_第6张图片
  在该示例中,如过选择高度90作为剪裁点,则可以得到两个集群: { h 8 , h 3 , h 5 } \{{h_{8}},h_{3},h_{5}\} {h8,h3,h5} { h 4 , h 6 , h 9 , h 2 , h 1 , h 7 } \{h_{4},h_{6},h_{9},h_{2},h_{1},h_{7}\} {h4,h6,h9,h2,h1,h7}

实验

1.实验数据

  实验数据来自于校园内部署的探测器在十天之中捕获的网络流量,并使用了8个不同的僵尸网络,这些僵尸网络数据如下表所示:
BotMiner阅读笔记_第7张图片
  其中,
  Botnet-IRC-spybot和Botnet-IRC-sdbot来自于完全受控的虚拟网络中执行Spybot和Sdbot捕获的流量;
  Botnet-HTTP-1和Botnet-HTTP-2文献[24,39]中提及的基于Web的C&C通信,Botnet-HTTP-1中的受控主机定期与C&C服务器通信,Botnet-HTTP-2中的受控主机以随机时间间隔与服务器通信;
  Botnet-IRC-robot是基于Rbot源码进行修改后捕获到的流量;
  Botnet-IRC-N是2004年真实网络数据上捕获到的IRC僵尸网络流量。

2.实验结果

  C平面聚类过滤后剩余的流量如下表所示。
BotMiner阅读笔记_第8张图片
  可以看见,第一层过滤有效地减少了后续过程的工作量,数据量减少了90%。

  下表展示了C平面聚类与A平面聚类的结果。
BotMiner阅读笔记_第9张图片
  由于本系统只关注多主机之间的协同/相似行为,所以将只有一个主机的A平面集群去除。

  经历过跨平面联合分析后,得到的最终结果如下表所示。
BotMiner阅读笔记_第10张图片
  从表中可以发现,投入的8个僵尸网络均被检测到,其中6个僵尸网络的所有主机均被发现,剩余的2个僵尸网络各有一个主机未被检测出来。于是,BotMiner的综合检测率为99.6%。

针对BotMiner的攻击手法与应对方法

  1)针对C平面的特殊处理

  利用白名单内的网站作为服务器或其跳板——如果使用白名单网站作为跳板,BotMiner仍旧能够检测出第二URL和相关的通信。

  将每个包、包内包含的字节数进行随机化处理——正常的通信不会含有类似的随机程度。

  尝试模仿普通主机的通信或使用隐蔽的通道进行C&C传输——僵尸网络的攻击成本变高,效率变低。

  2)针对A平面的特殊处理

  降低攻击速率——攻击效果受到影响。

  避免在同一网络内实施相同的攻击行为——不是本文定义的僵尸网络范畴。

  3)针对跨平面联合分析的特殊处理

  受控主机收到命令后延时执行攻击指令——控制攻击发起产生困难。

你可能感兴趣的:(Web安全)