1. 引言
网络技术快速发展的同时,各类网络安全问题层出不穷。根据2021年2月公布的第47次《中国互联网络发展状况统计报告》,2020年,国家信息安全漏洞共享平台收集整理信息安全漏洞20,721个,较2019年同期增长28% [1]。在各类漏洞威胁中,DDoS (Distributed Denial of Service,分布式拒绝服务)攻击以容易实施、难以防范、难以追踪等特点成为最难以防范和抵御的网络攻击类型之一,其中DNS反射放大攻击(DNS Amplification Attack)又是其中较为常见的方式。DNS攻击主要是利用UDP及DNS协议的安全漏洞,以DNS服务器作为攻击流量的反射放大器,实现对目标主机的DDoS攻击。如果DNS服务器被攻击,将会导致大量网站无法被正常访问,对网络安全造成严重威胁。由于计算机根区文件是公开可访问的,因此顶级域的权威服务器很容易被用来作为反射放大器。
2016年美国Dyn公司遭到了一次与以往不同的DDoS攻击,此次攻击通过Mirai病毒,将攻陷的物联网设备作为“肉鸡”,使得Dyn服务器一下子收到了成千上万条请求导致瘫痪。经调查发现,这是通过DNS的TCP和UDP数据包发起的一次攻击,据称此次攻击手段还不是很成熟,但已经对Dyn内部造成巨大伤害。DNS反射放大攻击是一种具有巨大攻击力的DDoS攻击方式之一,其危害大、成本低、溯源难,被黑色产业从业者所喜爱。攻击者只需要付出少量的代价,即可对需要攻击的目标产生巨大的流量冲击,对网络带宽资源、连接资源和计算机资源造成巨大的压力。Dyn公司的DNS服务器受到DNS反射放大攻击后,导致美国大范围断网,事后的攻击流量分析显示,DNS反射放大攻击是造成美国大范围断网的DDoS攻击的主力之一。
本文通过构建UDP请求的知识图谱,提出运用客户机与服务器的访问频率阈值的方法来检测、发现DNS Query Flood攻击。
2. 研究现状
2.1. DNS Query Flood攻击研究现状
当前DNS服务器由于其本身缺陷导致安全事故频发,针对DNS Query Flood攻击已有不少研究。严芬等人通过分析一段时间内DNS流量变化情况,得到该时间段内域名解析的成功率,计算出信息熵值,从而判断DNS服务器是否出现异常,进一步利用滑动窗口算法计算源IP地址的信息熵值,与正常情况比较得出结论,并通过实验验证了该检测方法的有效性 [2]。NM SAHRI和Koji OKAMURA提出引入一个服务器控制器,负责向先前请求DNS服务的每个主机发送身份验证包,通过验证请求客户端网络回复的“身份验证包”,来确定DNS查询是否为合法的查询或攻击包。经实验证实,该方法可以有效阻止来自僵尸网络的所有DNS查询 [3]。Roberto Alonso等人提出了一种新的递归抽取DNS流量来检测DNS Query Flood攻击的方法,建立了一种基于异常的检测机制,给定DNS使用的时间窗口,利用DNS攻击特征捕获DNS社群结构,通过观察DNS社群结构的变化来判断是否受到DNS攻击 [4]。
本文通过对客户机与DNS服务器之间的UDP数据包特征的研究,分析DNS Query Flood攻击流量的判定阈值,以尽早发现可能的攻击行为、减少损失。
2.2. 知识图谱简介
知识图谱是结构化的语义知识库,以符号形式描述物理世界中的概念及其相互关系。其基本组成单位是“实体–关系–实体”三元组,以及实体及其相关属性–值对,实体间通过关系相互联结,构成网状的知识结构 [5]。
相对于现有的字符串模糊匹配方式而言,知识图谱一方面能够通过推理实现概念检索从而改变现有的信息检索方式;另一方面能以图形化方式向用户展示经过分类整理的结构化知识,从而更方便人们对知识体系的理解和规律的发现。
实现知识图谱的相关图数据库软件,可将信息数据化、网格化,用可视化的方式呈现大量数据的关系,极大提高数据的可访问性。在图数据库工具中,通过编程可对数据进行多维度的探索,构建数据之间深层次的关系,以提高人工智能的推理能力。知识图谱的方法在金融数据分析中已广泛应用,实现了从简单的量化模型走向更为复杂的价值判断和风险评估的应用,逐步把经验变成可重用、可演化、可验证、可传播的知识模型,实现了数据到智能化决策的提升。
本文将知识图谱方法应用于网络流量分析,以发现DNS Query Flood攻击,这是一种新的应用尝试。
3. 基于流量知识图谱的DNS攻击检测方法
3.1. DNS Query Flood攻击基本原理
DNS服务器进行域名解析时,是通过UDP报文进行通信的,而UDP协议是一种无连接的服务,在DNS Query Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包,通过利用大量UDP小包冲击DNS服务器。
客户端与DNS服务器的UDP交互流程如下:
① 首先服务器会查找是否有对应缓存;
② 当没有缓存信息,且该域名无法由该DNS服务器进行解析时,DNS服务器会向上层DNS服务器递归查询域名信息,直到全球互联网的13台根DNS服务器,若仍然无法解析,则没有回应的报文。
此交互过程如图1所示。
Figure 1. UDP-based domain name resolution process
图1. 基于UDP的域名解析过程
DNS Query Flood攻击的原理如下:根据图1客户端与DNS服务器的UDP交互流程所述,设有用户机A、服务器B、上层服务器C。当攻击发生时,三者之间的通信过程如下:
1) 用户机A对服务器B发动DNS Query Flood攻击;
2) 服务器B向其上层服务器C进行递归查询。
利用知识图谱概念对DNS Query Flood攻击进行图形描述,如图2所示。
Figure 2. Knowledge graph of DNS Query Flood Attack
图2. DNS Query Flood攻击的知识图谱
3.2. 流量检测及确定阈值方法
DNS Query Flood攻击难以应对的主要原因在于这是一种攻击流量和正常流量混合在一起的攻击方式。在对于流量进行检测时,如何区分正常流量和攻击流量成为一个难点。
通过图2可直观地发现:在DNS Query Flood攻击过程中,用户机A与服务器B之间、服务器B与服务器C之间的大部分网络流量都是用户机A对服务器B、服务器B对服务器C的单方面数据查询和关联建立。
因此,本文研究提出通过构建历史正常流量知识图谱,对知识图谱中的正常流量进行分类,抽出每一条流量的时间戳,以此计算出正常的源地址对DNS服务器的访问频率,找出其中的最大值作为阈值。确定阈值之后,在实际网络管理过程中,即可以源地址为基础,对流量进行分类,计算出源地址对DNS服务器的访问频率,并与阈值进行比较,小于阈值的则为正常流量,大于阈值的即作为攻击流量的可疑对象,可进一步跟踪处理。
4. DNS Query Flood检测实验流程
4.1. 实验数据的选取及预处理
本文分析的DDoS攻击流量数据集,来自加州大学洛杉矶分校计算机科学系的网络研究实验室和高级系统研究实验室的数据(https://lasr.cs.ucla.edu/ddos/traces/)。该数据通过在测试机上运行TFN攻击工具并附加在另一台测试机而生成,同时也存在一些合法流量。实验中,分别抽取了两份攻击流量和两份正常流量作为本文研究的对象,将它们记作attacktrace1,attacktrace2,trace1和trace2。因为DNS Query Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包,通过利用大量UDP小包冲击DNS服务器,所以本文主要研究其中UDP数据包,能更好地对DNS Query Flood攻击流量进行检测、防御。
数据预处理时,首先将获取到的格式为txt文件转化为csv格式。
然后根据官网给出的关于UDP封包的列名信息进行字段处理,生成的数据如表1所示,表中各段含义如下:发送数据包的时间Packet_TIME;掩盖数据包源的IP地址IP_from;掩盖数据包目标的IP地址IP_to;原始源端口PORT_from;原始目标端口PORT_to;数据包的长度LENGTH。
4.2. 核心代码
本实验中采用Python语言中的py2neo模块和Neo4j可视化数据库进行构造知识图谱。代码整体可分为三个部分,核心部分就是根据正常流量数据计算其阈值。
1) 通过py2neo模块连接Neo4j数据库,并导入数据。
2) 创建函数create_rel,此函数主要功能是以导进来的数据为基础,构建知识图谱。首先以数据中的IP_from (原IP)和IP_to (目的IP)作为图谱中的两个节点,并把Packet_TIME (数据的时间戳)作为IP_from的一个属性,visit作为连接两个节点的联系,依次构建UDP数据包知识图谱。
3) 以第二步构建好的知识图谱为基础,对IP_from和其时间属性进行统计,并计算IP_from对于DNS服务器的访问频率。具体流程为:
① 通过NodeMatcher查询Neo4j中相同的IP_from地址,并统计其个数,并将其时间属性放进已经定义好的列表attr。
② 对IP_from的访问频率进行计算,在创建好的attr列表中寻找最大时间和最小时间并求其差值,结合前面统计的IP_from个数计算出IP_from对服务器的访问频率。
③ 将这部分代码放进一个for循环中,计算每一个IP_from的访问频率,并将每一个频率放进列表Threshod中,找出Threshod中的最大值,作为本实验的阈值。
4.3. 阈值的计算
实验中随机抽取攻击流量5000条和正常流量722条,以及2000条混合流量(其中1000条正常流量,1000条攻击流量)。
第一步:构建知识图谱。运用创建函数create_rel构建出DNS访问图谱,构建的图谱如图3所示。
第二步:计算检测阈值。查找出知识图谱中每个IP_from的个数,并将同一IP_from的时间属性放到列表diff中,计算最大时间差,结合IP_from的个数来计算相应IP每分钟访问的次数,之后将不同IP每分钟访问次数加入到列表Threshod中,找出列表Threshod中的最大值作为检测阈值为28.75721。
第三步:检验阈值的有效性。将5000条攻击流量数据包,按照第一步工作步骤构建攻击流量的知识图谱,之后计算攻击流量每个IP每分钟的访问次数,利用计算出的攻击流量和第二步得出的阈值进行比较,高于阈值为攻击流量,低于阈值的为正常流量。经过实验检验,发现利用阈值28.75721可成功检测出绝大部分攻击流量,正确率高达95.04%。
Figure 3. DNS access map visually constructed by Neo4j
图3. Neo4j可视化构建的DNS访问图谱
4.4. 攻击流量的检测
为了进一步检验本文方法的可靠性,在数据集中另外选取一部分攻击流量和正常流量,将它们混合在一起构成新的数据集合来进行测试。此混合数据集共计2000条数据,包括1000条正常流量和1000条攻击流量,如表2所示。
Table 2. Example of mixed traffic data
表2. 混合流量数据示例
利用python编写的程序,2000条混合流量计算出的各IP地址的访问频率检测值如表3所示。
Table 3. System resulting data of standard experiment
表3. 标准试验系统结果数据
表3检测结果在Neo4j中的图表现形式,如图4所示。
Figure 4. Access frequency knowledge graph
图4. 访问频率知识图谱
从图4可以看出攻击数据和正常数据的访问频率分别处于以阈值28.75721为分界线的不同区间,这表明利用本文方法可成功区分出DNS Query Flood攻击的攻击流量和正常流量。
5. 结束语
DNS Query Flood攻击会造成服务器资源被攻击者占用,导致DNS服务器无法对其他正常用户提供服务。由于DNS具有逐级向上查询的特性,当DNS Query Flood攻击出现时,域名服务器与上级域名服务器之间的通信次数急剧增加,最终可能会使上级域名服务器资源也被耗尽,导致更大范围的网络崩溃,这是一种危害极大的攻击手段 [6]。为此,本文提出了通过构建网络流量知识图谱,运用正常的源地址对DNS服务器的访问频率阈值来检测DNS Query Flood攻击的方法,并在加州大学洛杉矶分校分布网络研究实验室采集的DNS Query Flood攻击流量数据集上通过Neo4j进行可视化分析。实验结果表明该方法确定的阈值对于攻击流量的检测成功率高达95.04%,验证了该检测方法的有效性和可靠性。
当然对于一些大型的DNS服务器而言,由于每天会有各种新增的访问,仅仅运用历史数据可能会影响阈值的准确性,可以在本研究的基础上结合机器学习的方法,结合历史访问数据实时进行阈值的计算和调整,以增加算法的自适应能力 [7],可进一步提高其可靠性。
基金项目
江苏省高等学校大学生实践创新训练计划基于典型案例的网站安全问题研究项目,项目编号:202010329035Y。