利用时序决策树进行DGA僵尸检测

DGA Bot Detection with Time Series Decision Trees

主要思路

  1. 标签模块依赖分类技术,该模块可以对训练模型生成有标签的数据,并对每一个已经检测到的僵尸网络提供一系列的感染IP
  2. 训练模块使用对生成的标签数据进行有监督的学习,对每一个僵尸网络家族都构造一个检测模型。利用典型的IP时间轮廓评估。
  3. 检测模块在短时间内检测受到影响的IP。

标签模块

给有监督训练模型提供受感染IP的实例,该模块只处理在DNS服务器中不存在的域名,利用的原理是通过将相同DGA僵尸网络的子集请求进行聚类。

  1. 数据预处理 通过启发式方法减小数据量,减少良性的DNS流量,只保留可疑的NXDOMAIN来进行后续的聚类。(根据域名进行判断)
  2. 分级聚类 D作为一系列的域名,每一个域名d都由一组IP代表,这组IP可以至少区分一个不成功的DNS请求。聚类结果C可以代表D的一种划分,对于每一个类别c都是自底向上聚类的结果。两个类可以计算相似度,如果相似度在限制内可以进行合并;该限制也可以防止没有共享足够IP的两个类进行合并。

相似度计算公式: \[ \forall(c_i,c_j) \in C^2, sim(c_i.c_j) = |IP^{c_i}\cap IP^{c_j} | \]

相似度限制公式: \[ sim(c_1^*,c_2^*) > \alpha \cdot min(|IP^{c_1^*}|,|IP^{c_2^*}|) \]

  1. 得到受感染的IP 往往丢弃与恶意行为不相干的类别,对已识别的DGA僵尸网络命名,

检测模块:时序决策树

输入:DNS时序,每个IP都有标签{Infected,NonInfected}

在CART决策树的基础上训练,根节点包含所有的训练实例。每个内部节点都包含一系列的训练实例\(\tau\)以及根据输入特征确定的分割条件s

  1. 所有的实例拥有相同的标签 \[\forall(T_0,T_1) \in \tau^2, label(T_0)=label(T_1)\]
  2. 所有的实例根据距离公式都是相等的 \[\forall(T_0,T_1) \in \tau^2, dist(T_0,T_1)=0\]

训练模块

分治算法进行决策树的处理,一条子树持续划分直到满足上述两个限制。

对于一个训练集,首先计算分裂的候选值,要求分裂结果使得子树最干净,干净可以用标签的定义来进行判断。最不干净的结果就是一半为{Infected}另一半为{NonInfected}

检测模块

当决策树构建结束后,就可以通过从根节点到叶子节点的一条路径上的划分来区分其属于哪一个类。

时序划分候选

  • 标准划分:通过半径划分
  • 聚类划分:根据到中心的的距离进行划分

时序距离

DTW距离(很好的分析时序距离的方法)