发明内容
本发明的主要目的在于提供了一种DNS隧道攻击防御系统、方法、设备及存储介质,旨在解决如何有效防护DNS隧道对网络的危害的问题。
为实现上述目的,本发明提供了一种DNS隧道攻击防御系统,所述DNS隧道攻击防御系统包括透明代理模块、DNS代理服务器、DNS缓存模块、DNS合法性验证模块及DNS报文修改模块;
所述透明代理模块,用于接收DNS请求流量,并将所述DNS请求流量转发至所述DNS代理服务器;
所述DNS代理服务器,用于通过所述DNS缓存模块判断所述DNS请求流量是否缓存命中,若未命中,则通过所述DNS合法性验证模块对所述DNS请求流量进行请求报文检测,获得请求报文检测结果;
所述DNS报文修改模块,用于在所述请求报文检测结果为疑似时,对所述DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将所述修改后的请求报文发送至所述DNS代理服务器;
所述DNS代理服务器,还用于将所述修改后的请求报文发送至上游DNS服务器进行请求响应。
可选地,所述DNS缓存模块,用于在所述DNS请求流量缓存命中时,以使所述DNS代理服务器返回正常响应或错误响应至用户设备。
可选地,所述DNS代理服务器,还用于通过所述DNS合法性验证模块确定所述DNS请求流量对应的请求报文的请求非法分值;
所述DNS合法性验证模块,用于根据所述请求非法分值对所述请求报文进行检测,获得请求报文检测结果。
可选地,所述DNS合法性验证模块,还用于在所述请求非法分值大于预设非法阈值时,则请求报文检测结果为非法。
可选地,所述DNS合法性验证模块,还用于在所述请求非法分值小于预设合法阈值时,则请求报文检测结果为合法。
可选地,所述DNS合法性验证模块,还用于在所述请求非法分值小于所述预设非法阈值,且大于所述预设合法阈值时,所述请求报文检测结果为疑似。
可选地,所述DNS代理服务器,还用于获取所述上游DNS服务器反馈的响应报文,通过所述DNS合法性验证模块确定所述响应报文对应的响应非法分值;
所述DNS合法性验证模块,还用于根据所述请求非法分值与所述响应非法分值确定累加非法分值;
所述DNS合法性验证模块,还用于在所述累加非法分值小于所述预设非法阈值,且大于所述预设合法阈值时,所述DNS请求流量的报文检测结果为疑似;
所述DNS代理服务器,还用于通过所述DNS报文修改模块对所述响应报文进行修改,获得修改后的响应报文;
所述DNS缓存模块,还用于存储所述请求报文、所述修改后的请求报文、所述响应报文、所述修改后的响应报文;
所述DNS代理服务器,还用于分别将所述请求报文与所述修改后的请求报文发送至所述上游DNS服务器进行请求响应,以使所述上游DNS服务器反馈待比对响应报文和待比对修改后的响应报文;
所述DNS代理服务器,还用于将所述响应报文对应的业务数据、所述修改后的响应报文对应的业务数据、所述待比对响应报文对应的业务数据与所述待比对修改后的响应报文对应的业务数据进行比对,若一致,则所述DNS请求流量为合法请求流量。
此外,为实现上述目的,本发明还提出一种DNS隧道攻击防御系统,所述DNS隧道攻击防御方法包括以下步骤:
透明代理模块接收DNS请求流量,并将所述DNS请求流量转发至DNS代理服务器;
DNS代理服务器通过DNS缓存模块判断所述DNS请求流量是否缓存命中,若未命中,则通过DNS合法性验证模块对所述DNS请求流量进行请求报文检测,获得请求报文检测结果;
DNS报文修改模块在所述请求报文检测结果为疑似时,对所述DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将所述修改后的请求报文发送至所述DNS代理服务器;
所述DNS代理服务器将所述修改后的请求报文发送至上游DNS服务器进行请求响应。
此外,为实现上述目的,本发明还提出一种DNS隧道攻击防御设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的DNS隧道攻击防御程序,所述DNS隧道攻击防御程序配置为实现如上文所述的DNS隧道攻击防御系统的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有DNS隧道攻击防御程序,所述DNS隧道攻击防御程序被处理器执行时实现如上文所述的DNS隧道攻击防御系统的步骤。
本发明DNS隧道攻击防御系统包括透明代理模块、DNS代理服务器、DNS缓存模块、DNS合法性验证模块及DNS报文修改模块,首先透明代理模块接收DNS请求流量,并将DNS请求流量转发至DNS代理服务器,然后DNS代理服务器通过DNS缓存模块判断DNS请求流量是否缓存命中,若未命中,则通过DNS合法性验证模块对DNS请求流量进行请求报文检测,获得请求报文检测结果,DNS报文修改模块在请求报文检测结果为疑似时,对DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将修改后的请求报文发送至DNS代理服务器,之后DNS代理服务器将修改后的请求报文发送至上游DNS服务器进行请求响应。本发明中网络设备的DNS服务将由本系统提供,而不是任由DNS请求发往互联网。系统通过透明代理模块、DNS代理服务器、DNS合法性验证模块、DNS缓存模块及DNS报文修改模块之间的数据交互,在DNS隧道的攻击行为发生时做到高效检测和识别,即时做到对隧道的阻断和破坏的安全防护,从底层大大提高了检测与防护的能力上限。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的DNS隧道攻击防御设备结构示意图。
如图1所示,该DNS隧道攻击防御设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入模块比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(Wireless-Fidelity,Wi-Fi)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM),也可以是稳定的非易失性存储器(Non-Vo latile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储系统。
本领域技术人员可以理解,图1中示出的结构并不构成对DNS隧道攻击防御设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及DNS隧道攻击防御程序。
在图1所示的DNS隧道攻击防御设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明DNS隧道攻击防御设备中的处理器1001、存储器1005可以设置在DNS隧道攻击防御设备中,所述DNS隧道攻击防御设备通过处理器1001调用存储器1005中存储的DNS隧道攻击防御程序,并执行本发明实施例提供的DNS隧道攻击防御系统。
本发明实施例提供了一种DNS隧道攻击防御系统,参照图2,图2为本发明DNS隧道攻击防御系统第一实施例的结构框图。
本实施例中,所述DNS隧道攻击防御系统包括透明代理模块2001、DNS代理服务器2002、DNS缓存模块2003、DNS合法性验证模块2004及DNS报文修改模块2005。
在本实施例中,参考图3为本发明DNS隧道攻击防御系统第一实施例的系统设计图,系统包括透明代理模块、DNS代理模块(即DNS代理服务器)、DNS合法性验证模块、DNS缓存模块、DNS报文修改模块。
所述透明代理模块2001,用于接收DNS请求流量,并将所述DNS请求流量转发至所述DNS代理服务器2002。
需要说明的是,透明代理模块,用于在系统运行前进行方便的部署,使系统下设备的所有DNS请求无感接入系统而无需做任何设置相关的处理。
透明代理是一种网络代理技术,在网络通信中引入一个透明的中间层。该模块最重要的一个优势点是实现用户无感接入,用户在接入本DNS隧道攻击防御系统时无需进行任何特殊配置或设置,也无需更改网络设置。
DNS隧道攻击防御系统作为网络的中间节点,透明代理模块首先识别线路接入的所有DNS请求流量忽略其他所有流量,然后将用户的DNS请求转发到后续的DNS代理模块(即DNS代理服务器)。通过透明代理模块接入本防御系统(即DNS隧道攻击防御系统),不涉及到用户电脑设备,用户在接入本防御系统与接入之前都是一样的正常访问互联网资源。
用户的请求经过透明代理模块转发到系统的DNS代理服务器,隐藏了用户的真实IP地址,增加了用户的隐私和安全性。即使本系统(即DNS隧道攻击防御系统)的DNS代理服务器需要向上游权威的DNS服务器进行请求,导致数据流量达到攻击者的服务端,其流量的地址也是本防御系统的地址,脱离了受攻击的设备,其一定程度上增加了攻击者的攻击难度。通过透明代理模块使得本防御系统有着非常高效与低成本优势。
所述DNS代理服务器2002,用于通过所述DNS缓存模块2003判断所述DNS请求流量是否缓存命中,若未命中,则通过所述DNS合法性验证模块2004对所述DNS请求流量进行请求报文检测,获得请求报文检测结果。
需要说明的是,DNS代理模块为主要的工作模块,其首先作为一个DNS服务器为系统下的设备提供完整的DNS服务,同时区别于被动的报文检测系统,DNS服务器模式将会使得防御更为及时和高效。
对于国内主流网站、主流软件以及电脑系统自身会产生的相关域名的查询,在本防御系统默认的通用DNS缓存文件中已收集。对于不同行业的用户,提供额外对应行业偏向的DNS缓存记录。其缓存被本模块的DNS代理服务器加载到内存中直接使用,也将在后续的合法性验证模块中查询、在DNS缓存模块中保证准确性与及时更新。在该DNS代理模块中,DNS服务器对这些预期内的DNS请求予以直接响应,其流量不会传递到外部的公共互联网,达到隔断效果。同时该DNS代理模块也是一个定制化的DNS服务器(即DNS代理服务器),具有黑名单阻断、监控警报、缓存配置、安全审计和日志记录等功能,为维护管理人员提供便利。通过DNS服务器直接为用户提供DNS服务,通过透明代理模块接入所有DNS流量,区别于传统的被动的报文捕获方式的防御系统,本防御系统将不漏处理任何一份攻击性的DNS请求,更为及时和高效,对正常的用户DNS流量的攻击,其具有更快的响应与先天的阻断性。
进一步地,DNS缓存模块,用于在DNS请求流量缓存命中时,以使DN S代理服务器返回正常响应或错误响应至用户设备,参考图4,图4为本发明DNS隧道攻击防御系统第一实施例的各模块时序图。
在具体实现中,请求报文检测结果包括合法、非法及疑似。
进一步地,DNS代理服务器,还用于通过DNS合法性验证模块确定DN S请求流量对应的请求报文的请求非法分值;DNS合法性验证模块,用于根据请求非法分值对所述请求报文进行检测,获得请求报文检测结果。
DNS合法性验证模块,还用于在请求非法分值大于预设非法阈值时,则请求报文检测结果为非法;在所述请求非法分值小于预设合法阈值时,则请求报文检测结果为合法;在所述请求非法分值小于所述预设非法阈值,且大于所述预设合法阈值时,所述请求报文检测结果为疑似。
在具体实现中,DNS合法性验证模块用于DNS隧道流量报文识别,包含多种检测识别方案。判断DNS请求是否为DNS隧道攻击等非法报文,区别于传统的被动的隧道请求检测机制,其还将为后续的处理提供DNS响应报文检测。该模块包含了市面隧道攻击工具识别的特征指纹库,用于初步的特征识别。介于特征识别对攻击可变性、数据缺失、噪声干扰、特征选择困难、上下文依赖等一些了先天的局限性,本合法验证模块发明了一种特征识别失败之后新的检测方案:按处理顺序其包括“非法分值计算”、“无关信息清除”、“主动探测”几个重要步骤。通过传统的特征识别做初步筛选、通过“非法分值”计算对报文进行多维度非法性异常点统计分数、通过“无关信息清除”对标记为“疑似”请求报文进行随机化处理与记录、通过“主动探测”对“疑似”报文进行主动探测与报文再次检测,这将最终为报文是否非法进行定性。
DNS缓存模块服务于DNS代理模块,将为设备提供更迅速安全的DNS服务,也将对DNS隧道攻击有着直接的阻断效果。
所述DNS报文修改模块2005,用于在所述请求报文检测结果为疑似时,对所述DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将所述修改后的请求报文发送至所述DNS代理服务器2002。
在具体实现中,DNS报文修改模块将在不影响DNS查询功能的前提下对请求报文做快速随机化处理,进行“无关信息清除”,打破了传统方案中检测出才能防护的局限性。
所述DNS代理服务器2002,还用于将所述修改后的请求报文发送至上游DNS服务器进行请求响应。
进一步地,DNS代理服务器,还用于获取上游DNS服务器反馈的响应报文,通过DNS合法性验证模块确定响应报文对应的响应非法分值;DNS合法性验证模块,还用于根据请求非法分值与响应非法分值确定累加非法分值;DNS合法性验证模块,还用于在累加非法分值小于预设非法阈值,且大于预设合法阈值时,DNS请求流量的报文检测结果为疑似;DNS代理服务器,还用于通过DNS报文修改模块对响应报文进行修改,获得修改后的响应报文;DNS缓存模块,还用于存储请求报文、修改后的请求报文、响应报文、修改后的响应报文;DNS代理服务器,还用于分别将请求报文与修改后的请求报文发送至上游DNS服务器进行请求响应,以使上游DNS服务器反馈待比对响应报文和待比对修改后的响应报文;DNS代理服务器,还用于将响应报文对应的业务数据、修改后的响应报文对应的业务数据、待比对响应报文对应的业务数据与待比对修改后的响应报文对应的业务数据进行比对,若一致,则DNS请求流量为合法请求流量。
在本实施例中,参考图5,图5为本发明DNS隧道攻击防御系统第一实施例的DNS代理服务器流程图,步骤一:通过DNS代理模块为网络下的设备提供DNS服务;缓存未命中;步骤二:通过DNS合法性验证模块检测DN S请求报文,通过特征识别与“非法分值”计算确定为隧道攻击的非法报文返回错误DNS响应;确定正常使返回上游DNS服务器结果;无法充分确定的进行“疑似”标记;步骤三:在主动探测中对标记为“疑似”的报文进行报文随机化处理的前后两次探测,检测响应报文;对确定为非法报文的返回错误响应。步骤四:检测结果仍然被标记为“疑似”的报文,随机化处理其响应报文返回给用户,记录并在后期做主动探测;步骤五:在后期的两次主动探测中,通过DNS合法性验证模块对记录的所有报文做“非法分值”计算,最终定性;步骤六:上述过程的结果更新DNS缓存。
在上述的步骤一中,通过透明代理模块将为网络的设备提供代理接入,该模块为系统内的设备设置透明代理,其将对设备提供无感的DNS服务接管的网络支持,对于设备的接入设备侧无需做任何网络的设置处理。在更进一步的技术方案中,对于一个网络安全要求较高的网络环境,防火墙规则放行53端口是无奈之选,通过透明代理模块将使系统接收所有53端口的DNS报文流量。这一措施将使得系统不会漏过任何一个DNS报文也为即时检测与防护提供底层支持。
在后续的步骤中,系统的DNS代理模块为设备提供有效的DNS服务,该模块将替代设备请求的最终DNS服务器为其提供DNS服务,由于该模块的DNS数据也都来自上游公共的权威公共DNS服务器,例如谷歌的8.8.8.8、阿里的223.5.5.5、114DNS的114.114.114.114,由于该上游公共DNS服务器可以自定义,其将为系统的DNS服务提供可靠性。
还应理解的是,本系统提供了一个定制化的缓存模块,在DNS代理模块的DNS服务器接收到用户DNS查询请求后,将通过该模块进行缓存查询,对查询有结果且合法的,DNS服务器将直接为用户返回DNS响应,此时不会向上游DNS服务器发送查询,其网络流量也不会在外部互联网传递。对于缓存未命中的DNS请求,在通过合法性检测后将由DNS代理模块向上游权威DNS服务器请求,再对响应合法性检测通过后将这个未命中的DNS请求即时更新到缓存中,此时下次同样DNS请求将会在缓存中命中并直接返回。在DNS缓存模块的运行与初始化期间均可加载准备好的DNS缓存文件,使用Re dis将缓存数据存储在内存中,通过计算机内存的高速读写性能保障DNS请求快速响应。
在具体实现中,定制化的缓存模块与标准的DNS缓存技术相比主要区别在于本缓存模块中缓存的DNS数据将包括合法性检测结果,还包括历史进行过DNS隧道、非法请求的客户端信息和关注名单。对有过非法请求的客户端设备再次发起的合法性检测失败的DNS请求,系统将直接返回错误的DNS响应,流量走向就此中断,但同时也会提供合法正常的DNS服务。
DNS合法性验证模块用于高效准确、多维度、不漏检的识别DNS隧道攻击的非法流量报文。其包含传统的指纹特征识别,支持更新,初始化的特征库由市场上的公开的隧道工具及其变种产生的流量通过机器学习模型进行训练而来,其对使用市面公开工具的隧道攻击有非常好的识别效果。对有能力修改工具源码和自研隧道的攻击来讲,特征库存在一定局限性,为此该模块还提供额外一种新的检测方式和一种新的隧道破坏机制。
在DNS缓存未命中以及特征库检测不出隧道攻击的非法请求报文时,本防御系统引入了“非法分值”的概念,旨在表示DNS请求或响应报文是隧道攻击的非法报文的依据程度,即该分值越高则判定为非法报文依据和理由越充足。将“非法分值”足够低的视为正常、将“非法分值”足够高的视为非法、将位于两临界状态中间的进行标记,在后续的,不阻塞用户的服务以及不放过一个非法报文,系统后续将采取进一步的报文修改与主动探测等处理方案。
在所述的“非法分值”计算中:对所有缓存未命中,特征库识别失败的DN S请求报文进行多项异常点检测与计算,各项检测的结果对应不同分值,对各项检测完的分值累加,所有“非法分值”低于“合法分值阈值”的定性为正常的合法DNS请求,对高于“合法分值阈值”但又低于“非法分值阈值”的标记“疑似”,对高于“非法分值阈值”的视为非法。其算法可按如下表示:
设定如下参数:
N为检测到的异常点总数。
Score_i为异常点i的分值。
Detection_i为异常点i的检测结果(1表示检测到,0表示未检测到)。
非法性分值计算格式为:
非法性分值=Σ(Score_i*Detection_i)(for i=1to N)
设定如下参数:
Illegal Score为非法分值。
Legal Score Threshold为合法分值阈值。
Suspicious Score Threshold为非法分值阈值。
根据非法性分值进行报文定性:
IF Illegal Score>=非法分值阈值60
非法报文
ELSE IF Illegal Score>=合法分值阈值30
标记为疑似
ELSE
正常报文
其中该模块现有的会检测的异常点包括:
指纹特征库的识别结果异常。
域名异常:检测域名是否为正常的域名。
长度比较长:超过20字节小于等于40字节、40字节以上的;
连续的随机字符,或随机字符中出现多次相同字符;
非法字符:特殊符号、空格或非法字符编码等;
命名规范违反:缺少主机名或域名标签、连字符、长尾字符等;
模仿或拼写错误;
非法顶级域名;
域名黑名单;
IP异常:检测目标IP地址是否位于黑名单中或与恶意活动有关联。(针对DNS响应报文)
查询类型异常:检测查询类型是否正常。
合法但不常见的,但是在10s内超过5次以及60s内超过20次查询如下类型的(该配置项需要管理员根据实际情况放宽限制):
TXT记录(Text Record):用于存储任意文本数据,可以包含人类可读的文本信息,也可以包含机器可解析的数据。
KEY记录(Key Record):用于存储与数字签名和加密相关的信息。
SRV记录(Service Record):用于指定提供特定网络服务的服务器。
MX记录(Mail Exchanger):用于指定接收域名的邮件服务器。
非法查询类型:与DNS协议规范不符、非法或未知的查询类型;
非法的查询类型组合;
不一致的查询类型:同一域名的多个查询请求中的查询类型与响应数据不一致(针对“主动探测”功能)
非法查询类型参数;查询类型参数(如IPv6查询的类别字段)包含非标准值。
数据包大小异常:检测数据包大小是否正常范围。
异常大或异常小的数据包;
不一致的数据包大小:同一类型的请求或响应中,数据包大小或业务数据不一致;(针对“主动探测”功能)
查询频率异常:检测查询频率是否正常(该配置项需要管理员根据实际情况放宽或缩小限制)。
异常频繁的查询请求;
频繁的重复查询;
异常频繁的查询类型变化;如短时间内用户频繁切换查询类型
黑名单用户;
关于域名长度的异常项:一般域名的长度通常在10到20个字符之间,域名长度的范围受到域名注册机构和规范的限制。最长的顶级域名(TLD)是63个字符,加上子域名和顶级域名之间的点号分隔符,整个域名的总长度可以超过这个限制。然而,长域名并不常见,大多数域名都会选择较短与好记。
在上述的各项异常点的检测项目中,检测出异常对应的非法分值都将不一样:比如系统特征指纹库检测出的异常请求被设计为直接返回100分值的“非法分值”,而“非法分值阈值”被设计仅为60分,即一旦累计检测项的总分值达到或超过60分,该报文直接被定性为DNS隧道攻击的非法报文,而后续的异常点检测也不再继续。当然异常点分值是允许管理人员做有限度调节,各种不太正常的DNS请求如何判定都缺乏一个绝对的标准,但是本防御系统经过长时间的分析与调研,预设的分值就是默认标准。对于一些模糊的无法即时充分确定为DNS隧道攻击的异常点检测项目,例如:对于上述域名异常检测项中,域名长度超过20字节但小于等于40字节的分值被设计为20、域名模仿或拼写错误被设计为10分值。在两项都被检测到时“非法分值”已达到30,则该份请求将被标记为“疑似”。因为“合法分值阈值”被设计为30,高于“合法分值阈值”的请求报文都将被标记为“疑似”。异常点检测完毕低于“合法分值阈值”30分值的,被定性为正常的DNS请求报文。如果在后续的检测完后没有上升到60,则该份“疑似”标记的报文会进行进一步的处理。对于这种不好即时定性的“疑似”报文的处理,是本防御系统最重要的优势。为了保障用户的DNS请求服务,在不能充分确定为非法报文之前是不能拒绝为用户提供服务或返回错误响应,对于这种情况本防御系统又引入了DNS报文修改模块与主动探测的功能以彻底解决此问题。
DNS代理模块的主动探测功能开始工作,首先经过两个过程处理“疑似”报文:
1、发送被标记为“可疑”的DNS请求报文到的上游权威DNS服务器,获取其响应。
2、被标记为“疑似”的报文在经过DNS报文修改模块做“无关信息清除”后发送到上游权威的服务器,获取其响应。
将两个过程处理收到的响应通过DNS报文合法性检测模块进行检测处理。DNS报文合法性检测模块将对两次探测的响应进行“非法分值”检测计算,对于检测的结果:如果请求报文的“非法分值”单独加上两次响应的“非法分值”的两次总分值有达到“非法分值阈值”的,将会判定请求报文为非法报文,其异常点检测将包括两份响应的业务数据或类型存在差异的异常情况;如果两次总分值都没有达到“非法分值阈值”的,则将第2个处理中获取的响应数据做的“无关信息清除”后返回给用户,并记录两次响应数据。其包含了两次响应数据对比认为业务数据或类型一致的无异常情况,此时该“疑似”报文经过了一次主动探测处理并检测无异常。在后续的10分钟和3小时后还将进行第两次主动探测以彻底对该DNS请求做是否非法的最终定性。
在上述第2个过程中,“无关信息清除”是不在丢失用户查询信息的情况下对数据报文随机化处理,旨在一定程度上破坏潜在的攻击报文的携带的信息,其为本防御系统的主动隧道破坏机制,是对被标记“疑似”报文最合理的处理措施。其最重的依据是:对于DNS隧道攻击,隧道的建立与维持需要设计协议、报文之间有着强上下文关联性、数据需要有纠错重传校验处理、通道保持也需要持续的数据传递。如果攻击者将这些功能实现依赖DNS协议的一些字段域中,且假设逃过了特征识别与“非法分值”检测,那么“无关信息清除”将这些数据做随机化处理后,导致攻击者必要数据丢失,将直接影响干扰这些功能的运行,触发重传等纠错机制,导致大量报文产生,甚至直接阻断掉隧道建立与维护;对于无法即时充分确定为非法的被标记为“疑似”的请求报文,本防御系统不能直接拒绝该用户的DNS服务,但又不能随便将未最终确定的“疑似”报文传递出去,通过“无关信息清除”,使攻击者逃过了初步检测也拿不到实际的原始响应数据;而对于实际上正常的请求,“无关信息清除”并不破坏请求查询的业务数据,不影响用户DNS查询的功能与使用体验。这样使得在本防御系统在还未充分确定“疑似”报文是否非法之前,向用户、向上游DNS服务器传递的始终是经过“无关信息清除”的非原始报文,使得本防御系统对攻击未充分确定前仍然能做出对抗与防御。在所述的“无关信息清除”中,对报文随机化处理本防御系统根据DNS协议格式包含如下措施:
随机重置DNS报文中两字节的Transaction ID;
随机重置Flags中的Recursion Desired位;
清理Flags保留位Reserve、清理Answer RRs、Authority RRs、Addition al RRs共6字节为0x00;
置Questions为实际查询数值;
对预设时间内的DNS请求做请求顺序的随机化重置等处理方式。
在上述的对“疑似”做第一次主动探测处理并检测无异常的,在后续的1分钟和3小时后还将进行第两次主动探测和检测以对该DNS请求是否非法做最终的定性。其最重要的依据是:不变的数据无法传递变化的信息。对于实际为DNS隧道产生的非法报文,随着时间流逝,隧道状态、数据序列化、上下文变化、隧道里流量变化等都决定着隧道表现出的DNS流量是前后变化、无法一致的。在实际隧道的流量中,一次有效的请求能获取与之对应的响应,若干时间后再次相同的请求对于隧道来讲是错误无效的,至少也是过期的。隧道流量的某一相同请求由曾经的有效的状态变更至为至少是过期的状态,隧道对端无法回应与曾经状态数据一致的响应与数据,例如隧道对端可能不回复或者回复错误,但都无法回复与曾经那个响应一致的响应。此时在第一次的即时主动探测和后两次不同时间间隔的主动探测中,系统通过一份被标记“疑似”的请求报文可以拿到不同时间中、“无关信息清除”处理与否的最高六份响应报文样本。在多次不同时间的主动探测中,隧道对端回复的多个响应报文无法都能维持一致,这将使本防御系统在通过“非法分值”计算,直接对标记为“疑似”的报文进行最终定性。而如果被标记“疑似”的请求报文实际是正常的而非DNS隧道的非法报文,实际情况是:DNS服务器回复一致的DNS响应才是正确的,因为其对应着DNS资源短时间都不会有变化这一事实,这也是DNS缓存存在的原因。至此,在后续的主动探测中将为“疑似”标记的非法报文进行最终的非法与否定性。同时DNS缓存模块也将会更新记录。
DNS代理模块对全部DNS请求的进行接管不漏任何一份DNS隧道攻击报文的检测;报文修改模块对请求和响应报文的随机化处理进行隧道破坏打破了传统方案中先检测出才能防护的局限性;特征识别与“非法分值”检测系统、报文标记、主动探测相结合的报文检测方式不惧攻击手段的更新与进步。
在本实施例中,首先透明代理模块接收DNS请求流量,并将DNS请求流量转发至DNS代理服务器,然后DNS代理服务器通过DNS缓存模块判断DNS请求流量是否缓存命中,若未命中,则通过DNS合法性验证模块对DN S请求流量进行请求报文检测,获得请求报文检测结果,DNS报文修改模块在请求报文检测结果为疑似时,对DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将修改后的请求报文发送至DNS代理服务器,之后DNS代理服务器将修改后的请求报文发送至上游DNS服务器进行请求响应。本实施例中网络设备的DNS服务将由本系统提供,而不是任由DNS请求发往互联网。系统通过透明代理模块、DNS代理服务器、DNS合法性验证模块、DNS缓存模块及DNS报文修改模块之间的数据交互,在DNS隧道的攻击行为发生时做到高效检测和识别,即时做到对隧道的阻断和破坏的安全防护,从底层大大提高了检测与防护的能力上限。
参照图6,图6为本发明DNS隧道攻击防御方法第一实施例的流程示意图。
如图6所示,本发明实施例提出的DNS隧道攻击防御方法包括以下步骤:
步骤S10:透明代理模块接收DNS请求流量,并将所述DNS请求流量转发至DNS代理服务器。
步骤S20:DNS代理服务器通过DNS缓存模块判断所述DNS请求流量是否缓存命中,若未命中,则通过DNS合法性验证模块对所述DNS请求流量进行请求报文检测,获得请求报文检测结果。
DNS缓存模块在DNS请求流量缓存命中时,以使DNS代理服务器返回正常响应或错误响应至用户设备。
步骤S30:DNS报文修改模块在所述请求报文检测结果为疑似时,对所述DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将所述修改后的请求报文发送至所述DNS代理服务器。
DNS代理服务器通过所述DNS合法性验证模块确定所述DNS请求流量对应的请求报文的请求非法分值;DNS合法性验证模块根据所述请求非法分值对所述请求报文进行检测,获得请求报文检测结果。
DNS合法性验证模块在所述请求非法分值大于预设非法阈值时,则请求报文检测结果为非法;DNS合法性验证模块在所述请求非法分值小于预设合法阈值时,则请求报文检测结果为合法;DNS合法性验证模块在所述请求非法分值小于所述预设非法阈值,且大于所述预设合法阈值时,所述请求报文检测结果为疑似。
步骤S40:所述DNS代理服务器将所述修改后的请求报文发送至上游DNS服务器进行请求响应。
DNS代理服务器获取所述上游DNS服务器反馈的响应报文,通过所述DNS合法性验证模块确定所述响应报文对应的响应非法分值;DNS合法性验证模块根据所述请求非法分值与所述响应非法分值确定累加非法分值;DNS合法性验证模块在所述累加非法分值小于所述预设非法阈值,且大于所述预设合法阈值时,所述DNS请求流量的报文检测结果为疑似;DNS代理服务器通过所述DNS报文修改模块对所述响应报文进行修改,获得修改后的响应报文;DNS缓存模块存储所述请求报文、所述修改后的请求报文、所述响应报文、所述修改后的响应报文;DNS代理服务器分别将所述请求报文与所述修改后的请求报文发送至所述上游DNS服务器进行请求响应,以使所述上游DNS服务器反馈待比对响应报文和待比对修改后的响应报文;DNS代理服务器将所述响应报文对应的业务数据、所述修改后的响应报文对应的业务数据、所述待比对响应报文对应的业务数据与所述待比对修改后的响应报文对应的业务数据进行比对,若一致,则所述DNS请求流量为合法请求流量。
在本实施例中,首先透明代理模块接收DNS请求流量,并将DNS请求流量转发至DNS代理服务器,然后DNS代理服务器通过DNS缓存模块判断DNS请求流量是否缓存命中,若未命中,则通过DNS合法性验证模块对DN S请求流量进行请求报文检测,获得请求报文检测结果,DNS报文修改模块在请求报文检测结果为疑似时,对DNS请求流量对应的请求报文进行修改,获得修改后的请求报文,并将修改后的请求报文发送至DNS代理服务器,之后DNS代理服务器将修改后的请求报文发送至上游DNS服务器进行请求响应。本实施例中网络设备的DNS服务将由本系统提供,而不是任由DNS请求发往互联网。系统通过透明代理模块、DNS代理服务器、DNS合法性验证模块、DNS缓存模块及DNS报文修改模块之间的数据交互,在DNS隧道的攻击行为发生时做到高效检测和识别,即时做到对隧道的阻断和破坏的安全防护,从底层大大提高了检测与防护的能力上限。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。