system: [SYSTEM]

user: 3. scHunter检测模型 本文提出一种基于数据流的DNS隐蔽信道检测方法，称之为scHunter (Subdomain-Context Hunter)。具体而言，首先对DNS隐蔽信道流量和正常DNS流量结合领域专家知识进行统计特征分析，提取出区分性强的、启发式的基础统计特征；进一步，在数据流子域序列进行上下文特征学习和卷积特征提取。从模型的训练和测试的角度，该方法的工作流程如图3所示。该方法分为两个阶段，第一个是离线训练阶段，负责根据有标签的数据进行模型的训练，第二个是在线测试阶段，负责使用已经训练好的分类器模型对新采集的未知DNS流量(即没有标签)进行检测，区分出其是合法DNS流量还是异常DNS隐蔽信道流量。其中的特征向量为基础统计特征和子域上下文特征的组合。 图3. scHunter模型工作流程图 3.1. DNS数据流定义 scHunter检测模型是面向数据流的，一条UDP数据流是指一个具有相同五元组<源IP地址、源端口号、目的IP地址、目的端口号，UDP协议>的数据包序列集合，不考虑方向性，即源IP地址、源端口号可以与目的IP地址、目的端口号互换位置，这里UDP协议为DNS。如图4所示，表示一条源IP为10.0.2.15，源端口号为40197，目的IP地址为45.77.39.243，目的端口号的UDP数据流，攻击28个数据包，14个请求/响应对(req./resp.pairs)。 图4. 一条DNSCAT工具产生的UDP数据流 3.2. 基础统计特征提取 在基础统计特征提取部分，本文主要分析提取了四种类别的特征：请求应答报文时间间隔(Request/Response Packet Time-Interval)、请求应答报文大小(Request/Response Packet Size)、子域熵值(Subdomain Entropy)、资源记录类型频率(Resource Record Type Frequency)。 1) 请求/应答报文时间间隔 请求应答报文时间间隔是指客户端发送一个请求报文到接受到对应的应答报文之间的时间间隔。通常，在RDNS服务器会缓存最近的查询和响应记录。在DNS应答报文中的每一条应答资源记录都有一个TTL字段，RDNS会对这条资源记录缓存TTL给定的时间(通常为几秒)。DNS隐蔽信道的每次请求报文的域名会有变动，不会命中本地缓存。因此，请求应答报文时间间隔可作为一种区分DNS隐蔽信道流量与正常DNS流量的特征。 2) 请求/响应报文大小 在树状层级结构的域名系统中，子域(subdomain)是指属于更高一层域的域，是一个相对于其父域而言的概念。例如，mail.example.com是example.com的一个子域，而example.com则是顶级域.com的子域。当前，对于每一级域名长度的限制是63个字符，域名总长度则不能超过253个字符。通常DNS隐蔽信道客户端将要发送的信息通过采用一定的编码方法(如base32或base64等)封装在DNS查询报文中的查询问题部分，具体是每个查询问题的主机名(Name)字段中。而DNS隐蔽信道服务器端将要传输的信息通过采用一定的编码方法后封装在DNS应答报文中资源记录部分，具体是每个资源记录的主机名字段。为最大效率使用带宽以传输更多信息，DNS隐蔽信道所产生的请求和响应报文较长，正常DNS请求报文中所提交查询域名长度适中。因此DNS请求报文大小可以作为一个区分特征。进一步，由于DNS隐蔽信道的服务端是控制端，其通常向客户端发送的控制命令比较短小精悍，比正常DNS响应报文大小相对较小，因此DNS响应报文大小也可作为区分特征。 3) 子域熵值 DNS隐蔽信道中，在将要传输的信息存放在子域部分之前，通常会进行加密处理(如base64、base32等)，并且会大量使用63种字符集以外的字符。因此，可以通过检测子域的编写规范性作为一种识别特征。本文采用熵值进行子域规范性的量化度量。记F表示DNS报文中的子域， f k 表示该子域有k个连续字符的集合， h k 表示其对应的熵值，具体计算公式如下： h k = − ∑ i = 1 | f k | m i k m − k + 1 log ( m i k m − k + 1 ) (1) 根据公式(1)，对于包含m个字节子域的F，可以得到它的熵值特征集合，使用hb代表子域F前b个字节的熵值特征集合。以m表示子域F包含的全部字节，以b表示F包含的前b个字节，以ngram代表连续字节的个数。本文对每一个子域所提取的熵值特征如表1所示。 Table 1 Subdomain entropy featur 特征名称 特征描述 F1m 全部m字节的1连续字节(unigram)的熵值 F2m 全部m字节的2连续字节(bigram)的熵值 F3m 全部m字节的3连续字节(trigram)的熵值 F1b 前b字节的1连续字节(unigram)的熵值 F2b 前b字节的2连续字节(bigram)的熵值 F3b 前b字节的3连续字节(trigram)的熵值 表1. 子域熵值特征 4) 资源记录类型频率 DNS是一个域名和IP地址相互映射的一个分布式数据库。因此在域名服务器上需要对每一个IP地址与域名之间的映射关系维持一个记录，这个记录称之为资源记录。另外，DNS提供了多种丰富的资源记录类型，不同的记录类型有着不同的用途，常见的资源记录类可参见文献 [ 17 ]。DNS隐蔽信道工具更倾向于使用不常见的记录类型来封装信息，因为这些不常见的记录类型能够提供更大的带宽。例如，Iodine的作者建议用户使用NULL、PRIVATE、EDNS0等记录类型。RFC 1035中规定NULL记录允许相应数据报文的长度最高可达65，535字节，而EDNS0允许DNS数据报文长度可以超过512字节。 5) 基础统计特征总结 表2列出了本文所提取的26个用于区别正常DNS流量与DNS隐蔽信道流量的基础统计特征。 Table 2 Basic statistical characterizatio 特征类别 特征描述 特征个数 请求应答报文时间间隔 一个请求报文和一个应答报之间时间间隔的均值、方差 2 请求报文大小 请求报文大小的均值和方差 2 应答报文大小 应答报文大小的均值和方差 2 子域熵值 F1m的均值和方差 12 F2m的均值和方差 F3m的均值和方差 F1b的均值和方差 F2b的均值和方差 F3b的均值和方差 子域记录类型频率 A记录的频率 8 AAAA记录的频率 TXT记录的频率 NULL记录的频率 MX记录的频率 CNAME记录的频率 记录的频率 PTR记录的频率 表2. 基础统计特征描述 3.3. 子域上下文特征提取 1) 子域上下文特征向量学习 在基础统计特征提取部分，子域熵值特征主要对一个DNS报文中子域的内部结构进行了刻画，并没有捕获多个报文子域之间的上下文关系。这也是之前研究工作 [ 18 ] [ 19 ] 在子域特征提取方面的局限性。因此，本文提出对子域内容本身和多个子域之间的上下文关系进行特征提取。记 F = { F 1 ， F 2 ， ⋯ ， F i ， ⋯ ， F n } 为DNS数据流中子域序列集合，其中 F i = { s 1 ， s 2 ， ⋯ ， s j ， ⋯ ， s n i } 是由 n i 个子域构成的序列。子域上下文特征提取的目标是在保留子域彼此之间的时间序列关系的同时，将每一个子域映射成低维空间的特征向量，该映射操作可数学形式化为似然概率最大化问题，即最大化子域序列集合 F i 的概率，公式如下： max P ( F ) = max ∏ i = 1 n P ( F i ) (2) 其中， P ( F i ) 为 n i 个子域的联合概率。为了降低最大化上述目标函数的复杂度，受Skip-Gram的启发，本文基于滑动窗口的思想将长度为 n i 的序列 F i 划分多个短小的子序列，也就是只保留子域和滑动窗口内子域的上下文关系，而忽略与较远位置子域的上下文关系。进一步，采用随机梯度下降算法对目标函数进行优化，便可获得每个子域 s j 在实数空间的上下文特征向量。 2) 子域上下文卷积特征提取 基于自然语言模型的思想，通过对子域序列进行建模，便可获得每一个子域的向量化表示。然而该特征向量存在两方面不足：一方面该特征的学习并不是基于最终DNS隐蔽信道检测任务目标函数所获得，仅仅是一个初步学习的子域上下文特征向量；另一方面该特征在对一个DNS数据流中的所有子域进行向量拼接后，会形成一个维度较高特征向量，需要进一步降维。 因此，为提取子域上下文更高阶的特征，本文进一步对子域上下文向量进行卷积操作和池化操作，形成子域上下文卷积特征。这是受卷积神经网络(CNN， Convolutional Neural Network)在图像处理、语音识别、自然语言理解等研究领域的启发 [ 13 ]。其主要特点是能够在初级特征提取基础之上，进一步提取更高阶的特征，这种高阶特征是算法根据目标任务自动调整。 3.4. 检测分类器构建 在对每一条样本进行基础特征提取和卷积特征提取之后，进行特征合并形成最终的特征向量，进一步，在此特征向量的基础上使用全连接神经网络进行二值分类，即最终输出有两个神经元。本文使用全连接的神经网络实现正常DNS流量和DNS隐蔽信道流量两种类别的二值分类任务，图5给出了分类器模型的神经网络结构示意图。 图5. scHunter模型神经网络结构示意图