DNS 反射攻击是什么?
定义简述
DNS 反射攻击是一种利用 DNS(域名系统)协议进行的分布式拒绝服务(DDoS)攻击方式。在互联网中,DNS 服务器承担着将域名转换为对应 IP 地址的重要任务,以便我们能顺利访问各类网站等网络资源。
而攻击者会通过伪造请求报文来实施 DNS 反射攻击,他们把请求报文的源地址修改成攻击目标的 IP 地址,然后将这些伪造后的请求发送到公共 DNS 服务器上。由于 DNS 服务器收到请求后,会按照正常流程对相应的 “请求源”(也就是被攻击者伪造的攻击目标 IP)进行响应,大量的响应数据包就会纷纷涌向真正的攻击目标,最终可能造成目标系统的服务不可用。
并且,DNS 反射攻击还有可能产生放大攻击的效果。因为 DNS 回复包的大小通常是请求包的几倍甚至几十倍,加上网络中存在着数量众多(全球有超过几千万台)且接入带宽往往比较高的开放式 DNS 服务器,攻击者只要控制一定数量的僵尸主机,向这些开放 DNS 服务器发送大量伪造的查询请求,就可以让海量的 DNS 回应报文都被引导至被攻击目标,使其网络出现拥塞,进而导致拒绝服务的情况发生,就像洪水一般冲击目标系统,干扰其正常运行。例如,原本可能只是几十字节的 DNS 请求消息,经过攻击者的手段配置后,能让目标服务器接收到数千字节的响应消息,极大地增加了目标服务器接收的通信量,加速其资源耗尽的速度,给目标系统带来严重影响。
DNS 反射攻击的原理剖析
利用 DNS 回复包特性
在 DNS 反射攻击中,DNS 回复包比请求包大这一特性被攻击者巧妙利用,成为实施攻击的关键一环。正常情况下,当我们的设备向 DNS 服务器发起域名解析请求时,DNS 服务器会根据请求查找对应的 IP 地址,并将包含此 IP 地址等相关信息的回复包发送回请求的源 IP 地址,整个过程是合法合规且有序的。
然而,攻击者却会进行恶意伪造操作。他们会篡改请求包的源 IP 地址,将其伪造成受害者服务器的 IP 地址,然后把这些伪造后的请求包发送到众多公共 DNS 服务器上。由于 DNS 服务器在接收到请求后,并不能辨别请求包源 IP 地址的真伪,依然会按照正常流程去查找相应记录,并将对应的回复包发往 “请求源”,也就是被攻击者伪造的受害者 IP 地址处。如此一来,大量比请求包体积大得多的回复包就源源不断地涌向了真正的受害服务器,使得受害服务器需要处理的流量剧增,很容易超出其承载能力,进而导致服务出现异常甚至瘫痪,达到攻击者想要的攻击效果。
UDP 协议的可乘之机
DNS 解析常用的是 UDP(用户数据报协议),这一协议本身存在的一些特性为 DNS 反射攻击创造了有利条件。UDP 协议属于无连接协议,它不像 TCP 协议那样在通信前需要进行三次握手来建立可靠连接,发送方可以直接向接收方发送数据报文,这就使得攻击者能够更加轻易地发起请求。
而且,UDP 协议中源地址属性易于伪造,攻击者可以随心所欲地篡改请求包中的源 IP 地址信息,把它改成受害者的 IP 地址,然后向 DNS 服务器发送请求。对于 DNS 服务器来说,很难直接验证这些请求包源 IP 地址的真实性,只能按照收到的请求去处理并返回相应回复包。再加上 UDP 协议本身缺乏像 TCP 协议那样完善的差错控制和流量控制机制,攻击者利用其发送大量伪造的请求包时,能够在短时间内让网络中充斥着大量的 DNS 请求与回复流量,干扰正常的网络通信秩序,同时也让攻击行为变得更难以被追踪溯源,为攻击者实施 DNS 反射攻击提供了诸多便利,使其可以更轻易地达成攻击目的。
攻击中的流量放大过程
DNS 反射攻击的流量放大过程极具破坏性,其通常是这样进行的:攻击者首先会准备好大量的被控制机器,也就是所谓的 “僵尸主机”。然后,攻击者向众多开放的 DNS 服务器发送大量伪造的小型查询请求,这些请求往往经过精心构造。例如,会使用一些特定的查询方式,像进行 ANY 查询,让 DNS 服务器返回被查询域名的所有记录,使得服务器返回的响应包体积远大于请求包体积,一般来说,请求包可能仅有几十字节,但响应包可能会达到数千字节,这就初步实现了流量的放大。
接着,攻击者利用多台被控制的 “僵尸主机” 同时向不同的开放 DNS 服务器发起海量的此类伪造请求,众多 DNS 服务器收到这些请求后,都会按照正常流程向被伪造的源 IP 地址(也就是受害服务器的 IP 地址)发送大体积的响应包。如此一来,大量的大体积响应包就如同洪水一般从各个方向汇聚到目标服务器,瞬间让目标服务器接收的流量呈几何级数增长,远远超出其正常的处理能力,最终导致目标服务器出现网络拥塞,无法及时响应正常的业务请求,造成拒绝服务等严重的攻击后果,干扰甚至阻断目标服务器所承载业务的正常运行。
DNS 反射攻击与其他 DNS 攻击的区别
对比传统 DNS reply flood 攻击
传统 DNS reply flood 攻击与 DNS 反射攻击存在着一些本质的不同。
首先,在攻击目标方面,传统 DNS reply flood 一般将 DNS 缓存服务器作为攻击目标,通过向其发送大量的 DNS reply 报文,致使缓存服务器因忙于处理这些报文而资源耗尽,进而影响正常业务;而 DNS 反射攻击通常把客户端当作攻击目标,攻击者伪造请求报文的源地址为客户端 IP 地址,引导 DNS 回应报文涌向客户端,造成客户端网络拥塞、拒绝服务等情况。
其次,从请求报文和回应报文真实性来看,传统 DNS reply flood 大多属于虚假源攻击,黑客控制僵尸主机发出的 DNS reply 报文的源 IP 地址通常都是伪造的,是不存在的真实源;但 DNS 反射攻击中,DNS 请求是真实的,它是攻击者向网络中真实的开放 DNS 服务器发送的查询请求,相应地,DNS 回应报文也都是真实的,是由这些真实的 DNS 服务器发出的,属于真实源攻击。正因如此,适用于防御传统 DNS reply flood 攻击的源认证方式,对于 DNS 反射攻击就无法起到作用了,需要采用如会话检查等其他防御手段来应对。
与 DNS 劫持等攻击的差异
DNS 反射攻击和 DNS 劫持、缓存投毒等常见的 DNS 攻击在多个方面有着明显差异。
在攻击手法上,DNS 反射攻击是利用伪造请求报文的源地址,借助开放 DNS 服务器的正常响应机制,将大量回应报文引向被攻击目标,以此实现攻击效果,并且利用了 DNS 回复包比请求包大以及 UDP 协议特性等条件;而 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 回应报文从四面八方汹涌而至,瞬间让服务器接收到的流量远远超出了其所能处理的极限。
就像一家餐厅原本可以正常接待一定数量的顾客,为他们提供餐饮服务,但突然涌进了数倍甚至数十倍于接待能力的客人,餐厅的服务员、厨师等根本忙不过来一样。服务器在面对如此庞大的流量冲击时,其 CPU 会忙于处理海量的数据请求,内存资源也会被快速耗尽,导致无法再对合法的 DNS 查询请求进行及时响应。例如,一个提供网站服务的服务器,遭受 DNS 反射攻击后,访问该网站的用户会发现页面无法加载,一直处于转圈等待的状态,或者直接显示无法连接等错误提示,原本可以正常登录、浏览、操作的各项功能全部失效,这就是因为服务器已经被攻击流量 “淹没”,无暇顾及正常的业务请求,最终出现服务中断、拒绝为合法用户提供正常服务的情况,严重损害了服务提供商的声誉以及用户的使用体验,对依赖该服务的相关业务也会产生连锁负面反应。
如何防御 DNS 反射攻击
常见的防御思路概述
面对 DNS 反射攻击,目前有一些通用的防御思路可供参考。
其一,源 IP 验证方向。由于 DNS 反射攻击中攻击者是伪造请求报文的源地址为攻击目标 IP 地址,所以通过验证请求来源的真实性可以在一定程度上拦截攻击流量。比如在一些场景中,对收到的 DNS 请求报文进行反向探测,查看其是否能正常回应相应的验证报文,以此判断源 IP 是真实存在的还是被伪造的。不过这种方式对于 DNS 反射攻击这类真实源攻击来说,应用起来需要更巧妙地结合其他手段,因为其请求本身是发向真实的开放 DNS 服务器的,并非传统的虚假源攻击那么容易识别。
其二,流量限制角度。可以从域名或者源 IP 地址等维度来进行流量管控。从域名来看,如果某个域名的 DNS 请求或回应报文速率过高,超过了正常的访问量范围,那就可能是遭受攻击了,此时针对这个域名进行限速,就像超市卖东西一样,资源有限的情况下,定量提供资源,先到先得,这样可以避免异常大量的请求或回应报文冲击网络和服务器。而源 IP 地址限速则是针对那些域名解析速率过大的源 IP 进行限制,不会影响其他正常的源 IP 的请求,确保整体网络流量处于一个相对平稳、可处理的状态。
其三,异常报文检测方面。攻击者有可能会发送大量错误格式的 DNS 异常报文,或者利用超长 DNS 报文等方式来试图让 DNS 服务器出现异常,进而影响正常服务。所以对报文的格式、长度以及跳数(TTL 值)等进行检测很关键。例如,正常基于 UDP 协议的 DNS 协议长度一般不大于 512 字节,若收到的报文长度远超这个数值,那就可以判定其为异常报文并直接丢弃,防止其对网络造成危害。通过综合运用这些不同角度的防御思路,可以构建起相对稳固的防线,抵御 DNS 反射攻击带来的风险。
具体的防御技术手段
以下是一些具体的防御 DNS 反射攻击的技术手段及其工作原理:
- 限速:
-
- 域名限速:它是基于域名维度的流量控制手段。通常情况下,某个域名在正常业务状态下的访问量是相对稳定的,如果突然出现一天其 DNS 请求或回应报文速率比平时高出好多倍,那大概率是遭受了攻击。此时,通过技术手段设定针对该域名的访问速率限制,一旦超过这个阈值,就对多余的报文进行拦截处理。比如,一个电商网站的域名,平日里每小时的 DNS 解析请求量大概在几千次,若某一时刻突然每小时达到数万次,系统检测到后就会对超出正常速率部分的请求进行限制,保障网络的正常运行,避免大量异常请求报文占用过多带宽和服务器资源,使服务器可以正常响应合法用户的请求。
-
- 源 IP 地址限速:这是从源 IP 角度出发的限速方法。当发现某个源 IP 地址发起的域名解析速率过大,明显超出正常范围时,就针对性地对这个源 IP 地址进行限制。例如,某个 IP 地址在短时间内向 DNS 服务器发起大量的域名解析请求,经过系统监测和比对正常的请求速率范围后,判定其异常,便会对该 IP 后续发送的超出限制的请求报文进行丢弃,防止其对整个网络环境以及目标服务器造成流量冲击,确保其他正常的 IP 地址的请求不受影响,维持网络服务的正常秩序。
- 源认证:
-
- 会话检查:Anti-DDoS 系统借鉴防火墙的会话表机制,利用 DNS 交互过程中 DNS request 报文首包建会话的特点来防御 DNS 反射放大攻击。具体而言,会话表五元组信息包含源 IP 地址、目的 IP 地址、源端口、目的端口和协议。当 DNS request 报文经过 Anti-DDoS 系统时,系统会创建一张会话表,记录下这份 DNS 请求报文的这五元组信息。后续当系统再收到 DNS reply 报文时,就会去查询会话表,如果能够匹配会话表中的信息,那就判定这个 DNS reply 报文是真实的、合法的,允许其通过;但要是没有匹配到会话表,就判定这个 DNS reply 报文为攻击报文,禁止其通过,从而有效拦截攻击者引导的大量虚假 DNS 回应报文涌向目标服务器,保护目标系统免受攻击影响。
-
- TC 源认证(适用于部分场景):常用于对客户端源的认证场景(但有一定的客户端类型限制)。正常 DNS 查询大多基于 UDP 协议,此时 TC 标志位置为 0,当客户端发送的 DNS 请求报文长度超过告警阈值时,启动源认证机制,拦截 DNS 请求,将 TC 标志位置为 1 并进行回应,要求客户端以 TCP 方式重新发起 DNS 查询。如果这个源是虚假源,那么它不会正常响应这个 DNS 回应报文,更不会重新通过 TCP 方式重新进行 DNS 查询;要是真实客户端发送的请求,就会重新发送 SYN 报文,请求建立三次握手,系统对客户端源进行 TCP 层面的认证,源认证通过后,客户端源 IP 加入白名单,后续客户端重新请求建立三次握手时,系统会将客户端第二次发送的三次握手请求直接放行,送给服务器,最终客户端与服务器之间建立三次握手成功,并通过 TCP 方式完成本次 DNS 查询。不过现网中有一些真实客户端并不支持通过 TCP 方式进行 DNS 查询,这种情况下此方法就不适用了,需要采用其他替代手段。
- 报文格式检查:
-
- 格式规范检查:对 DNS 报文的格式进行严格检查,因为攻击者可能会发送不符合标准格式的 DNS 异常报文来干扰 DNS 服务器的正常运行。系统按照既定的 DNS 报文格式标准,对收到的每一份报文进行校验,比如检查报文头部、各字段的长度和内容等是否符合规范,一旦发现是非标准格式的 DNS 报文,就直接将其丢弃,防止这些异常报文进入后续的处理流程,避免对服务器和网络造成不必要的负担以及潜在的安全威胁。
-
- 长度检测:鉴于正常基于 UDP 协议的 DNS 协议长度通常有一定限制(一般不大于 512 字节),而很多 DNS 反射攻击等情况会采用超大 DNS 报文试图造成链路堵塞等问题,所以会对报文长度进行检测。当检测到 DNS 报文长度超过设定的阈值时,就判定其为异常报文并丢弃处理,以此保障网络中流通的报文都是在合理长度范围内的正常报文,维护网络通信的顺畅和服务器的稳定运行。
-
- TTL 值检测:通过监测 DNS 报文的跳数限制(TTL 值)来判断报文是否正常。每个 DNS 报文在网络中传播都有其允许的跳数范围,当收到的 DNS 报文的跳数超出了这个正常阈值时,说明其可能存在异常情况,比如被攻击者恶意篡改或者在网络中异常循环等,这时系统会直接丢弃该 DNS 请求报文,避免其对网络造成不良影响,确保只有符合正常传播规则的报文才能在网络中传递并被处理
墨者安全 防护盾
墨者安全作为专业级别安全防护专家,在应对 Webshell 风险隐患方面展现出了卓越的能力。其拥有全面的检测机制,能够精准识别 Webshell 的各种类型和变体,无论是复杂的大马,还是隐蔽的内存马,都难逃其敏锐的监测。
墨者安全防护盾具备强大的实时监控功能,对服务器的各项活动进行 7*24 小时不间断的监视。一旦发现任何可疑的 Webshell 活动迹象,立即发出警报,并迅速采取隔离和清除措施,将风险扼杀在萌芽状态。
在防护策略上,墨者安全防护盾采用了多层次的防御体系。不仅能够在网络层面阻挡外部的恶意访问和攻击,还能深入系统内部,对服务器的文件系统、进程等进行深度检查和保护,确保 Webshell 无法植入和运行。
同时,墨者安全防护盾拥有快速的应急响应能力。当 Webshell 攻击事件发生时,专业的安全团队能够迅速介入,进行深入的分析和处理,最大程度减少攻击带来的损失,并帮助用户快速恢复服务器的正常运行。
墨者安全防护盾还注重用户教育和培训,为用户提供关于 Webshell 防范的专业知识和最佳实践,帮助用户提升自身的安全意识和防范能力,共同构建坚实的网络安全防线。