常见的DNS攻击与防御

news2024/10/5 3:22:31

DNS查询通常都是基于UDP的,这就导致了在查询过程中验证机制的缺失,黑客很容易利用该漏洞进行分析。DNS服务可能面临如下DNS攻击风险:

  1. 黑客伪造客户端源IP地址发送大量的DNS请求报文,造成DNS request flood攻击。
  2. 黑客伪造成授权服务器发送大量的DNS回应报文,造成DNS reply flood攻击。
  3. 黑客篡改某些网站的域名和IP地址对应关系,导致用户访问被导向至其他网站。
  4. 黑客向DNS服务器发送大量错误格式的DNS异常报文,或者发送大量超长DNS报文,导致DNS服务器处理这些报文时出现异常,拒绝正常服务。

接下来我们就重点介绍安全领域比较常见的一些DNS攻击以及相应的防御措施。

DNS Request Flood攻击与防御

DNS request flood 的攻击原理是黑客控制僵尸网络向DNS服务器发送大量不存在的域名的解析请求,最终导致服务器因大量DNS请求而超载,无法继续响应正常用户的DNS请求,从而达到攻击的目的。

 

 

31779c160df54e67acdc2d3a4253ef2e.png

 

在DNS request flood的攻击过程中,攻击源可能是虚假源, 也可能是真实源;攻击目标可能是DNS授权服务器,也可能是DNS缓存服务器。针对不同类型的攻击源,采取的防御方式也不同。

针对于虚假源攻击缓存服务器,Anti-DDoS系统防御DNS request flood攻击最初采用的方式是TC源认证方式。

TC源认证

DNS查询有TCP和UDP两种方式。通常情况下,DNS查询都是基于UDP的,此时TC标志位置为0,可以通过将TC标志位置为1来将UDP改为TCP方式。华为Anti-DDoS系统就是通过修改DNS报文中的TC标志位,对客户端进行源认证的。

 

 

7c728be3c52c49b9b3d2cb43627cb453.png 

TC源认证交互过程如下:

Anti-DDoS设备基于目的地址对DNS Request报文的速率进行统计,当DNS Request报文的速率超过阈值时,启动源认证机制:拦截DNS请求,将TC标志位置为1并进行回应,要求客户端以TCP方式重新发起DNS查询。

  • 如果这个源是虚假源,则Anti-DDoS系统不会正常响应这个DNS回应报文,更不会通过TCP方式重新进行DNS查询。
  • 如果是真实客户端发送的请求,则Anti-DDoS系统会重新发送SYN报文,请求建立3次握手。Anti-DDoS系统对客户端源进行TCP层面的认证。源认证通过后,客户端源IP地址被加入白名单。客户端重新请求建立3次握手,Anti-DDoS系统将客户端第2次发送的3次握手请求直接放行,发送给服务器。 客户端与服务器之间建立 3 次握手成功,并通过 TCP 方式完成本次 DNS查询。

我们再来结合一组抓包深入了解一下此过程。

① 客户端向DNS服务器第一次发送DNS请求报文,DNS请求报文基于UDP,TC标志位是0,请求的域名是www.×××.com。

c21fb0051303457899adf428667c20da.png

 

② Anti-DDoS系统代替Web服务器进行回应,并将TC标志位设置为1,希望客户端通过TCP方式重新发起DNS查询。

265a88ddbedc45e6a6447f28ebfc3bff.png

 

③ 客户端重新用TCP方式进行了DNS查询,源认证成功后,客户端以TCP方式与服务器建立连接,进行DNS查询。

1c168d17c73442569d614b95a5e75ee0.png

 

这种方式是防御DNS request flood攻击的一种基本的认证模式,适用于客户端是浏览器的认证方式。但现网中有一些真实的客户端,并不支持通过TCP方式进行DNS查询,在这种情况下,这种防御方式就不适用了。所以,现在对于缓存服务器的DNS request flood攻击的防御模式已经逐渐被另一种“被动防御”模式所取代。

被动防御

被动防御模式利用DNS的重传机制,不反弹 DNS 查询报文,而是直接不处置,将其丢弃,然后看客户端是否重传。

f982503ce4274b23a3f9ba3838a87b0b.png

 

如上图所示,当客户端发送的DNS请求报文速率超过告警阈值后,Anti-DDoS系统启动源认证机制:Anti-DDoS系统在第一次收到收到DNS请求报文后,记录DNS请求报文的域名、源 IP 地址等基本信息生成的HASH 值,并丢弃首包。后续一定时间戳内,如果Anti-DDoS系统再收到与这个HASH值相同的DNS请求报文时,就认定其为重传包,对其执行放行操作。

被动防御模式是一种比较通用的防御手段,适用于攻击源不断变换的 DNS 请求攻击。其对客户端的类型没有限制,无论缓存服务器还是授权服务器都适用。对于授权服务器,除了被动模式外,还有一种常用的防御模式——CNAME。

CNAME模式

授权服务器直接服务的“客户”通常是缓存服务器,而不是客户端的浏览器。所以在源认证的时候,授权服务器的防御机制和缓存服务器的机制不同。授权服务器利用的是DNS的CNAME(别名)机制。

CNAME(别名):

DNS协议允许将多个域名映射到同一个IP地址上,此时可以将一个域名作为A记录指向服务器 IP 地址,然后将其他域名作为别名,指向之前有 A 记录的域名。这样类型的存在是为了保证在IP地址变更时,系统不必一个一个地对域名做出相应更改指向。应用此种机制后,系统只需要更改 A 记录的相应域名到新 IP 地址上,其他别名将自动被更改到新IP地址上。

CNAME机制进行源认证的交互过程如下:

Anti-DDoS 系统部署在授权服务器前,统计到达授权服务器的流量。流量达到告警阙值后,Anti-DDoS系统启动源认证,对请求报文进行重定向:

  • 如果是真实存在的源,Anti-DDoS 系统会正常响应源认证报文,认证通过的后,Anti-DDoS 系统会将此源记录进白名单,后续这个源发送的请求将被直接通过,不需重复认证。

496e07194e674f118986465a761d6946.png 

  • 如果是虚假源,Anti-DDoS 系统不会正常响应源认证报文,所有它发送的请求报文也不会到达授权服务器。3a773449a86e4ec9bdb286207b7876a4.png

 

接下来我们再以一组抓包为例了解一下此过程。

① 客户端发送DNS查询的请求,查询的域名是www.×××.com。

def9aaafe68f4160b4a14de310e2f1b4.png 

② Anti-DDoS系统代替Web服务器进行回应,并为www.×××.com的域名加了一个前缀将其重定向为GksbtkNgmpldezpe.www.×××.com,让客户端重新请求这个别名。

1643cdf67f8942839391b1b5b5e577da.png

 

③ 客户端重新请求重定向后的新域名:GksbtkNgmpldezpe.www.×××.com。客户端正常响应这个重定向域名后,Anti-DDoS系统对客户端的源认证就通过了。

e5c6b78cd2ab40f39e659cb176e95161.png

 

④ Anti-DDoS系统第2次重定向,将GksbtkNgmpldezpe.www.×××.com再重定向回最初访问的域名www.×××.com。

209404cb1c86460c9bb2955de75ffad4.png

 

⑤ 客户端重新请求www.×××.com,这次发送的DNS请求报文会直接到达服务器。后续服务器会回应这个域名的解析地址,完成此次DNS查询。

865e132d3785447d982484816993a69f.png

 

DNS Reply Flood攻击与防御

DNS服务器收到DNS回应报文时,不管自己有没有发过解析请求,都会处理这些DNS回应报文。DNS reply flood攻击是黑客发送大量的DNS回应报文到DNS缓存服务器,导致缓存服务器因为处理这些DNS回应报文而耗尽资源,影响正常业务的过程。

dd40f077cc8d476b8ce881f68918b5ff.png

DNS reply flood攻击大多都是虚假源攻击,黑客控制僵尸主机发出的DNS回应报文的源IP地址通常都是伪造的,是不存在的。所以在防御的时候,系统就可以从回应源IP地址的真假性切入,判定这个源IP是否是真实源。

针对这种攻击行为,Anti-DDoS 系统一般可使用源认证方式进行防御。源认证的方法就是通过构造一个DNS请求报文,试探客户端是否能正常回应的过程。

b7cd3f8a67fb4838b275bc404af6d851.png

 

源认证过程如下:

  1. Anti-DDoS系统部署在受保护服务器前,并统计到达服务器的DNS回应报文。当到达服务器的DNS回应报文超过告警阈值时,Anti-DDoS系统启动防御。
  2. Anti-DDoS系统收到某个源IP地址发来的DNS回应报文后,会重新构造一个新的DNS请求报文,然后记录构造查询报文的QueryID和源端口号。
  • 如果是虚假源,则Anti-DDoS系统不会回应这个DNS回应报文,认证不通过。
  • 如果是真实DNS授权服务器,则Anti-DDoS系统会重新回应DNS回应报文。 Anti-DDoS系统收到DNS回应报文后,会将其与之前记录的Query ID和源端口号进行匹配。如果完全一致,则系统判定此DNS回应报文就是反弹DNS请求报文的回应,源认证成功,将其加入白名单。后续这个源再发送的DNS回应报文都会被直接通过,直到白名单老化。

这是一种传统的DNS reply flood攻击和防御形式。近几年,还有一种升级版的DNS reply flood攻击,因为危害性较大,而备受安全界的关注,这就是DNS反射攻击。

如下图所示,黑客将自己的源IP地址伪造成被攻击目标(主机A)的IP地址,然后向网络中开放的DNS服务器发送大量的查询请求。黑客通过伪造DNS请求报文的源IP地址,控制DNS回应报文的流向,这些DNS回应报文都会被引导到被攻击目标,导致被攻击目标的网络拥塞,从而拒绝正常服务。全球有几千万台开放式的DNS服务器,这些服务器的接入带宽往往都比较高,而且,DNS回应报文的大小通常也是DNS请求报文的几倍甚至几十倍,因此,这种攻击可达到放大攻击的效果。

c46e1e60dbe940e08ec966ad71d48237.png 

DNS反射攻击和前面介绍的传统DNS reply flood攻击有两点本质的不同。

  1. 传统DNS reply flood攻击的攻击目标一般是DNS缓存服务器;而DNS反射攻击的攻击目标一般是客户端。
  2. 传统DNS reply flood攻击大多是虚假源攻击,而在DNS反射攻击中,DNS请求报文都是真实的,DNS回应报文也都是真实的。

在这种情况下,源认证方式便不适用DNS反射攻击了。Anti-DDoS系统借鉴防火墙的会话表机制进行防御:当DNS请求报文经过Anti-DDoS系统时,Anti-DDoS 系统会创建一张会话表,记录 DNS 请求报文的这五元组信息。当Anti-DDoS系统再收到DNS回应报文时,就会查会话表。

  • 如果它与会话表匹配,系统就判定它是真实的回应报文,允许它通过;
  • 如果它与会话表不匹配,则系统判定这个回应报文为攻击报文,禁止它通过。

除了源认证和会话检查以外,DNS 攻击还可以通过限速的方式被防御。DNS 限速有两种:域名限速和源IP地址限速,针对DNS请求报文和DNS回应报文都生效。

  1. 指定域名限速
    如果某个域名的DNS请求或回应报文速率过高,我们可以针对这个域名进行限速。通常某个域名遭受的访问量一直高,但突然有一天某访问量增长到平时的很多倍,此时我们可判断这个域名可能遭受了攻击。
  2. 源IP地址限速
    如果某个源IP地址域名解析的速率过大,源IP地址限速就可以有针对性地限速这个源IP地址的DNS请求报文或者DNS回应报文,这样也不会对其他源造成影响。

DNS缓存投毒攻击与防御

路由器DNS劫持

黑客利用路由器的漏洞入侵受害者的路由器,篡改路由器中DNS服务器的地址,将该 DNS服务器地址指向恶意的 DNS服务器地址。

这种劫持方式不容易被发现,受害者只要输入真实域名或者合法网站地址,黑客就可将其重定向到一个恶意网站上。一旦这种情况发生,对于受害者来说后果是非常可怕的。他访问的每一个域名可能都是假的,看到的淘宝页面可能不再是淘宝页面,登录的网银可能也不再是网银,用户的各种敏感信息都会受到严重威胁。

对于这种方式,最有效的防御办法就是用户为路由器设置安全系数高的密码,然后定期修改密码。

授权服务器的修改

直接在授权服务器上修改域名和IP地址的映射关系是最直接的一种方式。黑客如果使用这种方式作为攻击的手段,需要通过特殊手段获取授权服务器的管理员权限,此方式的难度系数其实是非常大的。当然,也有另一种可能,就是出于某种特殊目的,管理员直接修改授权服务器上的域名和IP地址的映射关系,这种类型比较少见,也不是我们能控制的。

缓存服务器的修改

缓存服务器并不知道域名和IP地址的映射关系,一旦缓存服务器从授权服务器获取了映射关系后,会将其在内存中存储一段时间,直到记录老化。老化时间由DNS回应报文中的TTL决定。在这个有效期内如果再有客户端请求这个相同域名的解析,缓存服务器就会直接用缓存中的IP地址进行回应。记录老化以后,如果有客户端再次请求这个域名时,缓存服务器就会重新向授权服务器请求这个域名的解析。

缓存投毒攻击就是黑客伪造了恶意的DNS回应报文,导致缓存服务器无意中将恶意的域名和IP地址映射关系存储到自己的缓存中。当客户端再通过缓存服务器请求这个域名解析时,就会被指向恶意主机。

缓存投毒攻击过程如下图所示:

92b5915dd96c4a4fa33d374e49dc380b.png 

  1. 黑客向DNS缓存服务器发送一个不存在的子域名,请求解析。
  2. 缓存服务器查找本地缓存项查不到该域名,就会向授权服务器发起查询请求。
  3. 在授权服务器回应这个请求前,黑客就会伪造大量的DNS回应报文发向缓存服务器。
    为了达到攻击的目的,黑客伪造的DNS回应报文的源IP地址必须是授权服务器的源IP地址,目的端口必须是缓存服务器的源端口;同时,DNS回应报文的Query ID和DNS请求报文的Query ID也要一致。源IP地址和目的端口都很好伪造,但是成功伪造Query ID是有一定难度的。因此黑客伪造大量DNS回应报文时,会不断变换Query ID字段,一旦该Query ID先于授权服务器被发送给缓存服务器,缓存服务器就会将黑客发送的伪解析IP地址作为解析地址,保存到本地的缓存表中。
  4. 之后,当授权服务器再将真正的回应报文发送到缓存服务器时,缓存服务器也不会接收,直接将其丢弃。

在 DNS 缓存服务器中,如果仅仅伪造的子域名的解析地址是假的也没有多大影响。因为黑客利用投毒的这个子域名通常都是不存在的,正常客户端不会请求这个不存在的子域名。

但是如下图所示的DNS reply报文中:第一个框内是对该子域名的解析地址;第二个框内则是主域名 ddos.com 所在的 DNS 授权服务器和IP 地址的对应关系,授权服务器在回答缓存服务器请求时,也会将这部分内容一起发送过去,缓存服务器不仅仅会存储子域名的解析地址,还会将主域名的解析地址一并更新到自己的缓存列表中。这样后续再有客户端请求这个主域名时,也会一并被指向虚假的IP地址。

22b20813e4554d518bf188f9fa0ff73c.png

 

对于缓存投毒攻击,Anti-DDoS系统采用会话检查模式进行防御。在防御过程中,Anti-DDoS系统检查DNS回应报文的会话五元组信息(源IP地址、目的IP地址、源端口号、目的端口号、协议),Query ID和域名是否与缓存服务器发出的DNS请求报文一致。

c3e95d6e09474e99844699e64246b1b0.png

 

  1. 当缓存服务器向授权服务器发出域名查询请求时,Anti-DDoS 系统记录会话信息及请求报文中的Query ID和域名。
  2. Anti-DDoS 系统收到回应报文后,需检查会话五元组、回应报文中的 Query ID和域名与请求报文中的Query ID和域名是否匹配。
  • 如果报文命中会话五元组,并且Query ID和域名与记录的请求报文中的Query ID和域名匹配,则放行该报文。
  • 如果报文没有命中会话,则被丢弃。
  • 如果该报文命中会话,但是其域名或Query ID与请求报文不匹配,则该报文被丢弃,同时该会话被删除,以免后续投毒报文完成投毒攻击。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js安装与配置步骤

前言一、安装Node.js1.下载2.安装3.添加环境变量二、验证是否安装成功三、修改模块下载位置1.查看npm默认存放位置2.在 nodejs 安装目录下,创建 “node_global” 和 “node_cache” 两个文件夹3.修改默认文件夹4.测试默认位置是否更改成功四、设置淘宝镜像1.将npm默…

ARM Linux 内核启动2 ——C语言阶段

一、内核启动的C语言阶段 1 1、这一块的学习思路 (1) 抓大放小,不深究。 (2) 感兴趣可以就某个话题去网上搜索资料学习。 (3) 重点局部深入分析。 2、具体学习方法 (1) 顺着代码执行路径抓全。这是我们的学习主线。 (2) 对照内核启动的打印信息进行分析。 3、…

Ansible批量部署采集器

千台服务器部署采集器的时候用到了 Ansible,简单记录一下。 安装 Ansible pip install ansible yum install ansible –y在 /etc/ansible/hosts 中添加被管理组 ,比如图中[web] 是组的名字。 执行ansible命令测试,通过hosts中定义的web组执…

君子签「数据签」正式上线,推动企业电子合同实现高效安全签署

近年来,从政府机关到企事业单位,数字化转型步伐明显加快。 在数字化的驱动下,在各行业的服务过程中,君子签对产品部署有了更深的沉淀和经验,通过不断打磨、升级产品,「数据签」产品于近日正式上线&#xf…

Word这样用,提高效率不加班

Word这样用,提高效率不加班 今天给大家分享23条Word文档的应用小技巧。对于大家来说,掌握些技巧能够效率百倍,何乐不为? 这些技巧是本人通过整理一直在用并且使用频率较高的,也希望能帮到大家。有兴趣的小伙伴可以自己…

Python | 基于LendingClub数据的分类预测研究Part01——问题重述+特征选择+算法对比

欢迎交流学习~~ 专栏: 机器学习&深度学习 本文利用Python对数据集进行数据分析,并用多种机器学习算法进行分类预测。 具体文章和数据集可以见我所发布的资源:发布的资源 Python | 基于LendingClub数据的分类预测研究Part01——问题重述特…

多路I/O转接 Epoll

基本概述 epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被监听的文件描述符集合…

从输入url到页面展现(二)找服务器其实是在找IP地址

前言 前一节我们讲述了url的规则,url的几种类型,以及访问web服务器的时候,如果用户访问的url如果不包含index.html的话,大概会如何去寻找这个url对应的文件,如果感兴趣的同学可以回头去看上一篇:从输入url…

PyTorch中的可视化工具

目录 一、网络结构的可视化 1.1 通过HiddenLayer可视化网络 1.2 通过PyTorchViz可视化网络 二、训练过程可视化 2.1 通过tensorboardX可视化训练过程 2.2 HiddenLayer可视化训练过程 三、使用Visdom进行可视化 一、网络结构的可视化 我们训练神经网络时,除…

xshell是什么软件

xshell是什么软件? Xshell 是一个强大的远程管理软件,它支持SSH,TELNET 协议。Xshell可以在Windows下访问远端服务器、路由器、网络机顶盒等,类似的常用软件还有putty,以及Windows下的Telnet。 下面简单介绍一下xshell软件。 X…

康耐视Designer,通过VC5与三菱Q系列PLC-SLMP通讯说明

测试使用软件版本 Designer Version: 2.7 GX Works2 Version: 1.77F 测试使用硬件 Cognex Vision Controller VC5 CIC-5000R Mitsubishi PLC: Q06UDEHCPU PLC端设置(内置以太网口型号) 1.新建一个工程,选择对应的PLC系列和PLC类型: 2.PLC参数设置(以太网设置):…

LabVIEW-数值控件和布尔控件

简介 LabVIEW 以其强大、开放、图形化的虚拟仪器软件开发环境使得无论是否有过编程经验的工程师或科学家使用它时都可以快速、高效地与测量和控制硬件通信,并进行复杂的数据分析及处理。LabVIEW集成了满足GPIB、PXI、VXI、RS232、RS485、USB、DAQ等多种形式的设备互…

MATLAB算法实战应用案例精讲-【自动驾驶】激光雷达LiDAR(补充篇)

目录 前言 几个高频面试题目 自动驾驶中的传感器:LiDAR和 Radar的区别 LiDAR Radar 性能对比 激光雷达中是如何做到和GPS时间同步的? 一、三种方案PPSGPRMC、PTP、gPTP 二、同步过程 算法原理 发展历程 国内外厂商 算法思想 测距 三角测…

【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 前向概率计算笔记

目录前向概率模型基础参数公式推导代码实现前向概率 给定隐马尔可夫模型λ\lambdaλ,定义到时刻ttt部分观测序列为o1,o2,⋯,oto_1,o_2,\cdots,o_to1​,o2​,⋯,ot​且状态为sis_isi​的概率为前向概率,记作αt(i)P(o1,o2,⋯,ot,itsi∣λ)\alpha_t(i)P(o…

GDPU C语言 天码行空9

填空题 1. 指针排序 数组 输入 n5 30 85 12 77 6输出 6 12 30 77 85 &#x1f920; 代码 #include<stdio.h>#define N 10void sort(int *x,int n)// *x 是 数组 a 的地址 {int i,j,k,t;for(i0;i<n-1;i)//从前往后枚举 坑位{ki; for(ji1;j<n;j) if(x[k…

计算机网络 实验五

⭐计网实验专栏&#xff0c;欢迎订阅与关注&#xff01; ★观前提示&#xff1a;本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求&#xff0c;因此以下内容建议仅做思路参考。 一、实验目的 理解DNS的域名解析机制&#xff0c;理解DHCP的工作机制熟悉WEB应用及超…

逍遥自在学C语言 | 位运算符>>的高级用法

前言 在上一篇文章中&#xff0c;我们介绍了<<运算符的高级用法&#xff0c;本篇文章&#xff0c;我们将介绍>> 运算符的一些高级用法。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小…

HCIP-6.8BGP的团体属性、BGP联盟

BGP的团体属性、BGP联盟1、Community:团体属性1.1、案例配置2、BGP联盟属性2.1、配置案例&#xff1a;2.2、四种类型的AS_PATH&#xff1a;对于大型网络或者路由条目较多&#xff0c;使用一种BGP特有的路由标记&#xff0c;用于简化路由策略的执行。对于减少路由条目&#xff0…

unity,制作一个环状滑动条

介绍 unity&#xff0c;制作一个环状滑动条 方法 1.导入png图片素材2.新建一个滑动条&#xff0c;两者图片都设置为图片3.调节slider的参数4.调节backgroud的参数5.fill area、fill的参数同上。 得到两个叠加的圆环。6.设置fill的背景颜色为红色7.设置fill填充方式&#xff0…

【C++】容器适配器之priority_queue 仿函数

一、priority_queue 的介绍和使用 1.priority_queue 的介绍 我们和学习之前的容器一样&#xff0c;可以使用cplusplus官网进行学习&#xff1a;priority_queue文档介绍 priority_queue(优先级队列)是一种容器适配器&#xff0c;它 和queue使用同一个头文件&#xff0c;其底层…