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

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隐蔽通道流量,每个包之间的互信息更大。他们使用样本数作为滑动窗口,每ns个样本(为询问和响应对)划分为一群,从中提取包括请求包大小、响应包大小和时间间隔的均值、方差、偏度和峰度的12维特征。接着通过主成分分析,将特征维度降为2。然后,这些作者计算了连续r集的特征之间的互信息,最后使用阈值方法来检测DNS隐蔽信道。他们采取这种方法提高了用户隐私和群的可伸缩性。同时,与此前的数据包检测相比,提高了实时性和应对大量数据包的能力。但是,缺点在于,每次检测出的是一组ns个包中存在的隐蔽通道,现实中隐蔽通道的流量可能混淆在大量正常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数据集。对该数据集中的特征使用信息增益方法进行特征选择,并随机森林算法进行检测。

DNS流量分析领域调研相关推荐

  1. 网络安全模型_基于数据驱动的网络安全流量分析总结

    导读 网络和社交流量分析是检测和防御网络攻击的基础.随着数据集的日益剧增,手工定义规则的传统方法逐渐被机器学习(ML)方法替代,这是因为ML有更好的工作性能.在数据驱动的研究背景下,通过研究社交流量和 ...

  2. dns隧道攻击原理及常用工具流量分析

    今天看到一个关于Lyceum组织的文章,这个组织擅长使用dns隧道攻击,这种攻击方式还是头一次听说,于是搜集了一些文章来看看. 原文https://www.cnblogs.com/HighnessDr ...

  3. 2020用户行为分析领域最具商业合作价值企业盘点

    大数据产业创新服务媒体 --聚焦数据 · 改变商业 历经2个多月的时间,由数据猿工作人员与外部专家成员联合组成的评选推荐委员会,从数千家企业.机构中通过直接申报交流.外界评价.匿名访问等交叉验证的筛选 ...

  4. 2021用户行为分析领域最具商业合作价值企业盘点

    数据智能产业创新服务媒体 --聚焦数智 · 改变商业 6月19日,数据猿携手上海大数据联盟,依托双方优势资源与力量,共同以媒体+联盟的方式推动产业的发展与行业的进步,特以"聚焦数智价值 引领 ...

  5. zeek系列之:流量分析流量数据采集流量探针利器zeek

    什么是zeek Zeek是一个被动的开源网络流量分析器.许多运营商将Zeek用作网络安全监视器(NSM),以支持对可疑或恶意活动的调查.Zeek还支持安全领域以外的各种流量分析任务,包括性能评估和故障 ...

  6. clickhouse批量写入_交互式分析领域,为何 ClickHouse 能够杀出重围?

    来源:微信公众号:云加社区,作者:姜国强 出处:https://mp.weixin.qq.com/s/9PZTws3KSzlybHXM6XC2hg 导语 | 在百花齐放的交互式分析领域,ClickHo ...

  7. wireshark tcp data中文_wireshark流量分析入门

    点击蓝字关注我们吧! wireshark流量分析入门 打开wireshark后,按ctrl+K,勾选需要抓包的网卡,我这里勾选WLAN. 点击Start开始抓包. wireshark过滤器表达式 协议 ...

  8. CTF——MISC——流量分析

    目录 一.流量包修复 二.协议分析 三.数据提取 例题: 1,题目:Cephalopod(图片提取) 2,题目:特殊后门(icmp协议信息传输) 3,题目:手机热点(蓝牙传输协议obex,数据提取) ...

  9. 监控 DNS 流量,预防安全隐患五大招!

    2019独角兽企业重金招聘Python工程师标准>>> 尽管 IT 管理员尽心尽责地监控设备.主机和网络是否存在恶意活动的迹象,却往往出力不讨好.主机入侵检测和端点保护对很多公司来说 ...

最新文章

  1. Xilinx FPGA全局介绍
  2. 如何正确使用Cocoapods
  3. Sencha Touch 开发入门
  4. boost::mpl模块实现quote相关的测试程序
  5. PHP的ob多级缓冲设置
  6. python列表和元组的应用_python学习笔记之列表(list)与元组(tuple)详解
  7. 基于Spring读写分离
  8. YbtOJ#832-鸽子饲养【凸包,Floyd】
  9. java ean13 条形码_【教程】Spire.Barcode 教程:如何在C#中创建EAN-13条码
  10. Codeforces 864E Fire(背包DP)
  11. ddr布线 pads_DDR SDRAM布线规则
  12. 如何防止在listbox中添加很多数据出现不停的刷新
  13. 海思3519A上运行yolov3(二)——Linux和Windows开发环境和运行环境搭建
  14. P3930 SAC E#1 - 一道大水题 Knight
  15. Maven的Scored介绍
  16. java版五子棋分析_基于JAVA的五子棋游戏系统设计实现分析.doc
  17. 读《多头自注意力层和卷积层的关系》笔记
  18. 如何寻找基因的启动子——NCBI版
  19. 根据GPS经纬度判断当前所属的市区
  20. 非华为电脑管家连接平板--无法连接问题解决方案之一

热门文章

  1. CSS 网格FR 小数单位概述
  2. 倒计时3天!第二届数字孪生城市建设与产业发展高峰论坛不见不散
  3. 社交网络电影人物解析,社交网络 电影解析
  4. 无法通过微软正版验证怎么办?
  5. 同济大学计算机学院徐老师,罗怡桂 - 师资队伍 - 同济大学软件学院
  6. 博客九周年:稳中求胜 持续发展
  7. W3C 代码标准规范
  8. PytestUnknownMarkWarning: Unknown pytest.mark.T1 - is this a typo? You can register custom marks to
  9. python 代码块批量添加 Tab缩进 取消缩进 anaconda
  10. Python之操作Excel异常错误