DNS流量分析领域调研

  • Post author:
  • Post category:其他


作者: 中国地质大学 朱靖宇



DNS介绍

DNS是互联网的基础协议,用于在域名和IP地址之间建立映射。其本质上是一种分层的分布式数据库,在数据库中存储了关联的域名和IP地址对。

在DNS域名中,包括按层次划分的树型结构。根域名为“.”。其子域为顶级域名(TLD),包括.com,.edu,.net等。顶级域名的子域为下属的次级域名(2LD)。最后,全限定域名(FQDN)找出DNS层次结构中的主机名或子域。以www.baidu.com为例

在这里插入图片描述

在这里插入图片描述

接着,来简单的看一下DNS的查询过程。以www.baidu.com为例,当用户输入baidu.com时,其浏览器首先向本地DNS服务器进行查询,如果没有,本地DNS浏览器就接着向网络供应商的DNS服务器查询baidu.com的IP地址。如果网络供应商的DNS服务器也不存在该域名,则首先向根域名服务器请求.com域名服务器地址,得到.com域名服务器IP,接着向.com域名服务器请求baidu.com的地址,得到baidu.com域名服务器IP,再向baidu.com域名服务器请求www.baidu.com地址,得到www.baidu.com的IP,最后向用户本地DNS返回www.baidu.com的IP。如下图所示。

在这里插入图片描述



DNS的安全威胁

由于DNS协议最初的设计中,并不是为了实现数据交换,大部分组织都缺乏对DNS流量的监控,限制和分析。这使得DNS协议可以用来作为良好的隐蔽通道,用来绕过防火墙。

现实中,将DNS作为隐蔽通道常有两种方法。

  • 第一种是使用DNS流量常占用的53号端口,在客户端和服务器IP地址之间建立直接连接。在这种情况下,不需要遵守DNS的约束条件,直接使用原始的UDP协议,但是会产生大量错误的DNS数据包,容易被发现。
  • 第二种是

    基于名称查询

    的DNS隐蔽通道。需要一个客户端,和一个注册的DNS服务器。首先,客户端将要传输的明文通过编码(常用base64,base32等)后,嵌入查询的域名中,如“test123456”通过base32编码为“ORSXG5BRGIZTINJW”,嵌入域名后进行查询,域名为”ORSXG5BRGIZTINJW.abc.com”,其中.abc为注册的域名服务器。接着,攻击者的域名服务器进行解码,得到客户端想发送的消息,并返回一个应答数据。具体如下图所示。

在这里插入图片描述

DNS隐蔽通道常被用于信息渗漏和DNS隧道。前者客户端将数据封装在DNS数据包中,权威名称服务器将恢复数据;后者攻击者将在DNS流量中封装另一个协议,并通过DNS解析建立通信。



主流检测方法

在检测基于DNS的恶意行为时一般有两大类方法,一种是基于图,一种基于机器学习。



基于图的检测方法

在基于图的方法中,需要依据DNS各域间的联系建立域图,并输入已知的危险域和良性域,通过数值传递确定其他域为恶意域还是良性域。

在这里插入图片描述

在这里,最大的挑战在于如何判断两个域之间的联系。在理想条件下,关联的域之间要满足1)联系足够强2)尽可能的使关联在一起的域足够多。然而,这两个条件一定程度上是互相矛盾的。

在Following Passive DNS Traces to Detect Stealthy Malicious Domains Via Graph Inference中,作者将顶级域和IP地址分为私有和共有分别判断,试图同时确保以上两个条件。在文中,作者通过以下方式实现域图。

第一步

,建立一个分类器,用于区分私有IP与公共IP。基于此,建立算法:1)有一个相同私有IP即为关联域。2)在时间窗口内有多个公共IP相同为关联域。

第二步

建立一个顶级域分类器,确定一个顶级域是共享的还是私有的。具有相同专用顶点域的两个或多个域由同一实体控制,而相同公共顶级域的不是。

第三步

基于以上所发现的域关联,建立用于检测恶意域的域图。

该方法的优点在于,避免了公共IP和公共顶级域带来的混淆,即攻击者可能使用公共IP或者通过公共域来进行攻击,如果仅使用IP或者域名来建立关联的话会导致弱关联或者将毫无关系的两个实体进行关联。



基于机器学习方法

基于机器学习的方法中,常见有两类检查,一种是针对DNS隧道,用于检测DNS隧道中封装的协议,另一种是检测DNS隐蔽通道流量。



检测DNS隧道封装协议

在Entropy-based Prediction of Network Protocols in the

Forensic Analysis of DNS Tunnels中,Homem和Papapetrou分析了DNS隧道技术内部包的结构,并表中不同协议的信息熵以及它们的DNS隧道等价物。他们提取了以IP数据包的长度、FQDN的长度和FQDN的熵为特征,并通过机器学习模型对内部协议类型进行分类。虽然该分类方法的准确度为75%,处于可接受范围,但是该方法存在诸多限制:1)研究局限于识别HTTP和FTP两个协议。2)没有考虑DNS隧道的多层嵌套。3)没有处理加密信息或者分装的加密协议。



检测DNS隐蔽通道流量

在该方法中,按照检测单元来划分主要有两种方法,基于单包和基于包集合。在前者中,研究人员关注单个DNS请求包、响应包或者请求/响应包对,从中提取特征来检测隐蔽通道流量。这种方法的实时性比起基于包集合的方法更好,且计算复杂度显著降低。对于后者,研究人员专注于通过网络中一个节点的所有DNS数据包。基于包的内容(时间,fqdn的域,以及请求/响应IP)划分集合。接着从每个集合提取多维特征,使用机器学习方法判断。可以充分利用会话信息,降低信息缺失带来的干扰但是计算复杂度高,存储量大。另外同一集合内包的变化差异较大,难以提取特征。最后,模拟环境中的时间特征与现实环境中的时间特征差异较大,难以获得有效时间特征。



基于单包

在该类检测方法中,研究者主要关注包的有效载荷(完全限定域名FQDN和资源记录数据RR)。

对于完全限定域名,研究者假设传递的数据只存在于DNS的完全限定域中。该类方法起源于Born等人和Qi等人提出的

假设

:正常DNS的FQDN中字符分布常符合自然语言中字符分布,而在隐蔽通道的FQDN中,字符分布更倾向于随机分布。在Real-time detection of DNS exfiltration and tunneling from enterprise networks中,Ahmed等人提取FQDN中字符数、大写字符数、标签数、平均标签长度和熵等统计特征。接着,训练了一个隔离森林模型来检测隐蔽通道的FQDN。在A DNS Tunneling Detection Method Based on Deep Learning Models to Prevent Data Exfiltration中,Zhang检测来自单个DNS请求是否是恶意查询,以阻止基于DNS的数据渗漏,使用DNS的完全限定域名(FQDN)作为检测模型的输入。该文将完全限定域名中的的子域用词嵌入提取词向量特征,再用包括DNN、CNN和递归神经网络(RNN)模型在内的多种深度学习模型进行检测。

在基于资源记录数据的方法中,研究者使用DNS响应包的资源记录检测隐蔽通道。在Detection of Exfiltration and Tunneling over DNS中,Das等人分别检测了DNS渗漏和DNS隧道。在DNS隧道的检测中,仅关注了TXT类型的资源记录数据,并从中提取了10维特征,如他的大写字母的比率,小写字母的比率,数字数,字符串中的点数,和熵等。

相比于以上两种方法,有些研究者认为,不应或者不止应从以上两个方面提取特征。在A Byte-level CNN Method to Detect DNS Tunnels中,Chang Liu等人将DNS数据包的应用层数据作为字节看待。首先使用独热(one-hot)编码将每个字节转化为一个257维向量,接着通过深度学习中的嵌入层降低维数,最后使用CNN网络来判断数据包是否来自隐蔽通道。该方法对比以前提取统计特征的方法,可以提取包括顺序特征和结构特征在内的更加丰富的特征。



基于包集合的方法

基于包集的方法通常是将所有DNS包进行分组,然后从每组提取特征,然后交由机器学习模型进行判断,这里分类有多种方法,包括依据时隙,FQDN的域以及IP等。


基于时隙分组


在《DNS tunneling detection through statistical fingerprints of protocol messages and machine learning》(2015)中, Aiello等人认为,在正常DNS流量比起DNS隐蔽通道流量,每个包之间的互信息更大。他们使用样本数作为滑动窗口,每n

s

个样本(为询问和响应对)划分为一群,从中提取包括请求包大小、响应包大小和时间间隔的均值、方差、偏度和峰度的12维特征。接着通过主成分分析,将特征维度降为2。然后,这些作者计算了连续r集的特征之间的互信息,最后使用阈值方法来检测DNS隐蔽信道。他们采取这种方法提高了用户隐私和群的可伸缩性。同时,与此前的数据包检测相比,提高了实时性和应对大量数据包的能力。但是,缺点在于,每次检测出的是一组n

s

个包中存在的隐蔽通道,现实中隐蔽通道的流量可能混淆在大量正常DNS流量中,这会显著降低这种检测方式的灵敏度。同时,如果对检测到隐蔽通道流量的窗口内包全部丢弃,会造成一定的可用性问题。


基于FQDN的域分组


在《DNS covert channel detection method using the LSTM model》中,Shaojie Chen等人基于FQDN中的次级域和顶级域对DNS包进行分类。他们将FQDN的子域提取出,转化为词向量后依次喂入LSTM网络,实现端到端的检测,接着使用基于域分组和白名单过滤方式过滤掉非隐蔽的DNS通道流量和合法的DNS隐蔽通道流量,以降低假阳性率。该方法的优势在于,不需要使用过于复杂的特征工程,而且利用到了顺序特征,比起直接提取包之间的时间间隔更加具有泛用性。


基于IP分组


为了提取出DNS隐蔽通道流量中的会话信息,一些研究者在基于FQDN的域的基础上,添加了IP地址作为分组标准。

在《 Detection of Exfiltration and Tunneling over DNS》中,Das等人根据相同的请求IP和相同的域对DNS数据包的FQDN进行分组。他们将一组内FQDN的子域依次连接成一个字符串,并从字符串中提取8维特征,其中包括了熵,字符串长度,大写字母占比,维一子域的数量等。最后使用逻辑回归模型判断出结果。

在《Detecting DNS tunnel through binary-classification based on behavior features》中,Liu等人在n对请求/响应包对的基础上,添加了相同的请求IP、响应IP和FQDN域作为条件,将DNS包划分为不同群体。接着,他们从每个群体中,提取出时间间隔、数据包大小、子域熵和记录类型四类总共18维特征。最后,将这些特征喂入二分类模型(如决策树,SVM以及逻辑回归模型)检测隐蔽通道。


其他


在《Optimized Random Forest Model for Botnet Detection Based on DNS Queries》中,作者使用TI-2016 DNS dataset数据集。对该数据集中的特征使用信息增益方法进行特征选择,并随机森林算法进行检测。



版权声明:本文为qq_44465615原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。