DNS 反射放大攻击就是基于反射的体积分布式拒绝服务(DDoS)攻击,攻击者利用开放 DNS 解析器的功能来压倒目标服务器或网络,使其流量增加,从而使服务器和其周围的基础设施无法访问。
说通俗一点,DNS 放大攻击是一种非对称的 DDoS 攻击。攻击者向外发出带有虚假目标 IP 的较小查询请求,使得被欺骗目标成为更大 DNS 响应的接收者。攻击者利用这种方式,通过持续消耗带宽容量而使网络饱和,达到破坏受害者服务器的目的。
DNS 放大攻击可分为四个步骤:
- 攻击者使用受感染的端点将具有欺骗性 IP 地址的 UDP 数据包发送到 DNS 递归。数据包上的欺骗地址指向受害者的真实 IP 地址。
- 每个 UDP 数据包都会向 DNS 解析器发出请求,通常会传递一个参数(例如 “ANY”),以接收最大的响应。
- 收到请求后,DNS 解析器通过响应来尝试提供帮助,它向欺骗的 IP 地址发送较大的响应。
- 目标服务器的 IP 地址会收到响应,并且周围的网络基础架构会被大量的流量淹没,从而导致拒绝服务。
尽管一些请求不足以破坏网络基础设施,但是当此序列跨多个请求和 DNS 解析器进行扩展时,目标接收到的数据放大可能会很大,最终导致拒绝服务。
二、DNS 反射放大攻击如何工作
DNS 反射放大攻击的过程可以分为以下四个步骤:
1. 发送欺骗性 UDP 数据包攻击者使用受感染的端点将具有欺骗性 IP 地址的 UDP 数据包发送到 DNS 递归。数据包上的欺骗地址指向受害者的真实 IP 地址。就像一个恶意少年打电话给餐馆,却给出目标受害者的电话号码作为回叫号码。
2. 向 DNS 解析器发出请求每个 UDP 数据包都会向 DNS 解析器发出请求,通常会传递一个参数(例如 “ANY”),以接收最大的响应。恶意用户通过发送小的查询,试图获取更大的响应,就像从更少的资源中获取更多收益。
3. DNS 解析器响应收到请求后,DNS 解析器通过响应来尝试提供帮助,它向欺骗的 IP 地址发送较大的响应。在基于反射的攻击中,开放的 DNS 解析器将响应来自 Internet 上任何地方的查询,从而有可能被利用。
4. 目标服务器被淹没目标服务器的 IP 地址会收到响应,并且周围的网络基础架构会被大量的流量淹没,从而导致拒绝服务。虽然一些请求不足以破坏网络基础设施,但是当此序列跨多个请求和 DNS 解析器进行扩展时,目标接收到的数据放大可能会很大。
三、DNS 反射放大攻击的特点
- 全部是大量的 DNS 响应请求,通常里面包含一些不存在或者生僻的域名,经过循环查询从而放大 DNS 流量。攻击者通过伪造 IP 向正常的 DNS 服务器发送恶意查询请求,其中包含大量不存在或生僻的域名,这些请求会引发服务器进行循环查询,进而使 DNS 流量被放大。参考资料中提到 “全部是大量的 DNS 响应请求(Response 请求)通常里面包含一些不存在或者生僻的域名,经过循环查询从而放大 DNS 流量”。
- 会将 OPT RR 字段中的 UDP 报文大小设置为很大的值(如 4096),通过这样放大了攻击流量。攻击者利用扩展 DNS 机制(EDNS),在 OPT RR 字段中设置较大的 UDP 报文大小,如设置为 4096,从而实现攻击流量的放大。例如,“会将将 OPT RR 字段中的 UDP 报文大小设置为很大的值(如 4096)通过这样放大了攻击流量”。
- 发送的 DNS 查询请求数据包大小一般为 60 字节左右,而查询返回结果的数据包大小通常为 3000 字节以上,因此,使用该方式进行放大攻击能够达到 50 倍以上的放大效果。在 DNS 反射放大攻击中,发送的查询请求数据包相对较小,一般约为 60 字节,而查询返回结果的数据包则通常在 3000 字节以上,从而实现了较高的放大倍数,可达到 50 倍以上。正如资料中所说 “发送的 DNS 查询请求数据包大小一般为 60 字节左右,而查询返回结果的数据包大小通常为 3000 字节以上,因此,使用该方式进行放大攻击能够达到 50 倍以上的放大效果”。
- 大量的流量都来自正常的 DNS 服务器,攻击者通过伪造 IP 向正常的 DNS 服务器发送这些恶意的查询请求,将流量引入受害者的服务器,受害者查不到攻击者的真实 IP。攻击者伪造 IP 地址,向正常的 DNS 服务器发送恶意查询请求,使得大量的攻击流量来自正常的 DNS 服务器,而受害者难以查到攻击者的真实 IP。“大量的流量都来自正常的 DNS 服务器攻击者通过伪造 IP 向正常的 DNS 服务器发送这些恶意的查询请求,将流量引入受害者的服务器,受害者查不到攻击者的真实 IP”。
四、DNS 反射放大攻击复现方法
- 设置要使用的 DNS 服务器,如 nslookup set q=ns223.5.5.5。我们可以通过这个命令来指定特定的 DNS 服务器,以便进行后续的攻击复现操作。
- 突破 UDP 包传输大小限制,利用 EDNS 机制扩充响应数据包大小,在 EDNS0 中,扩展了 DNS 数据包的结构,增加了 OPT RR 字段,在此字段中包含了客户端能够处理的最大 UDP 报文大小信息。根据相关的 RFC 文档,如 RFC2671 中提到的扩展 DNS 机制(EDNS),服务端在响应 DNS 请求时,会解析并记录下客户端能够处理的最大 UDP 报文大小,并根据该大小生成响应的报文。在实际攻击中,可以通过配置 DNS 服务器使 UDP 传输大小扩充至 4096 个字节,放大倍数可以达到 60 左右。
- 需要一份开放了查询服务的第三方 DNS 服务器列表,通过端口扫描获得。如果只有前两个条件而我们不能找到大量反射源,攻击仍很难立竿见影。这主要是因为如果反射源很少的话,受攻击方就可以通过黑名单机制屏蔽攻击源,丢弃攻击数据。攻击的条件之一就是需要一份开放了查询服务的第三方 DNS 服务器列表,我们可以通过端口扫描的方式来获得这个列表。
- DNS 服务器需要开启递归查询功能。DNS 服务器开启递归查询功能后,当收到一个无法在本地缓存中找到答案的查询请求时,它会向其他 DNS 服务器发起查询,直到找到答案或者查询失败。在 DNS 反射放大攻击中,攻击者利用互联网上大量开放递归查询的 DNS 服务器发出请求,通过这些服务器的响应对攻击目标实现 DoS 和 DDoS 攻击。我们可以使用 nmap 确定一台服务器是否支持递归查询,如 nmap -sU -p53 --script=dns-recursion 223.5.5.5。
五、DNS 反射放大攻击复现步骤
- 确定攻击目标 IP 和要使用的 DNS 服务器 IP。
-
- 在进行 DNS 反射放大攻击复现之前,首先需要确定攻击的目标 IP 地址以及要使用的 DNS 服务器 IP 地址。这两个地址的选择对于攻击的效果至关重要。攻击目标可以是任何需要被攻击的服务器或网络设备,而 DNS 服务器则需要满足一定的条件,如支持递归查询、开启 EDNS 扩展机制等。
- 使用 Python 脚本伪造攻击源 IP 地址,向 DNS 服务器发送 DNS 查询请求。
-
- 可以使用 Python 中的scapy模块来伪造攻击源 IP 地址,并向 DNS 服务器发送 DNS 查询请求。具体的代码实现可以参考以下示例:
from scapy.all import *
a = IP(dst='8.8.8.8', src='192.168.1.200') # 192.168.1.200 为伪造的源 IP
b = UDP(dport=53)
c = DNS(id=1, qr=0, opcode=0, tc=0, rd=1, qdcount=1, ancount=0, nscount=0, arcount=0)
c.qd = DNSQR(qname='www.qq.com', qtype=1, qclass=1)
p = a/b/c
send(p)
- 在上述代码中,首先创建了一个 IP 数据包a,将目标地址设置为 DNS 服务器的 IP 地址(这里以 8.8.8.8 为例),源地址设置为伪造的 IP 地址(这里以 192.168.1.200 为例)。然后创建了一个 UDP 数据包b,将目标端口设置为 53(DNS 服务的默认端口)。接着创建了一个 DNS 数据包c,设置了相关的参数和查询域名。最后将这三个数据包组合起来发送出去。
- 观察攻击效果,可以通过抓包工具查看数据包的传输情况。
-
- 为了观察 DNS 反射放大攻击的效果,可以使用抓包工具如 Wireshark 来查看数据包的传输情况。在攻击过程中,可以捕获到大量的 DNS 响应数据包,这些数据包的源地址是 DNS 服务器,目标地址是攻击目标。通过分析这些数据包的大小、数量等信息,可以评估攻击的效果。
-
- 同时,还可以通过观察攻击目标的网络流量、服务器负载等指标来判断攻击是否成功。如果攻击目标的网络流量突然增大,服务器负载升高,甚至出现服务不可用的情况,那么很可能是攻击成功了。
总之,DNS 反射放大攻击是一种比较复杂的攻击方式,需要掌握一定的网络知识和编程技能才能进行复现。在进行攻击复现的过程中,一定要在合法的环境下进行,并且不要对实际的网络系统造成损害。
六、如何缓解 DNS 放大攻击
DNS 放大攻击是一种流量型的 DDoS 攻击,对网络安全造成严重威胁。以下是一些缓解 DNS 放大攻击的方法:
1. 加固反射源
- 对开放查询服务的 DNS 服务器作出限制:只对可信任的区域主机提供解析服务。这样可以减少被攻击者利用的可能性。例如,通过配置 DNS 服务器,如在/etc/named.conf文件中进行设置,在options部分添加forward first;和forwarders {192.168.43.192;};,指定转发器的 IP 地址列表,只对这些可信任的 IP 地址提供服务。
- 强制某些 DNS 查询类型使用 tcp 传输,并对单个源 IP 的查询速率做限制:强制某些 DNS 查询类型(例如:txt,any)使用 tcp 传输。TCP 协议相比 UDP 协议更加可靠,并且可以更好地控制流量。同时,对单个源 IP 的查询速率进行限制,可以防止攻击者通过大量的虚假源 IP 地址发起攻击。例如,可以使用网络系统管理工具,如限制 DNS 查询请求每秒只允许 10 个查询,来控制查询速率。
2. 加固被攻击的目标
- 使用 Anycast 技术对攻击流量进行稀释和清洗:因为 DNS 放大攻击属于流量型攻击的一种,可以使用 Anycast 技术对攻击流量进行稀释和清洗。Anycast 技术可以将攻击流量分散到多个节点上,从而减轻单个目标的压力。例如,基于 Anycast 架构 DNS 进行流量清洗及传输方法中,通过引流路由器、流量清洗设备、边缘路由器和 Anycast 节点的协同工作,对整体流量清洗及传输网络进行配置,实现高效的网络流量清洗并实现负载均衡。具体步骤包括对各设备进行配置、启用 LDP、参与 LSP 学习、采用 VNH 技术将边缘路由器虚拟成为一个转发地址等。
总之,通过加固反射源和被攻击的目标,可以有效地缓解 DNS 放大攻击,保护网络安全。
墨者安全 防护盾
墨者安全作为专业级别安全防护专家,在应对 Webshell 风险隐患方面展现出了卓越的能力。其拥有全面的检测机制,能够精准识别 Webshell 的各种类型和变体,无论是复杂的大马,还是隐蔽的内存马,都难逃其敏锐的监测。
墨者安全防护盾具备强大的实时监控功能,对服务器的各项活动进行 7*24 小时不间断的监视。一旦发现任何可疑的 Webshell 活动迹象,立即发出警报,并迅速采取隔离和清除措施,将风险扼杀在萌芽状态。
在防护策略上,墨者安全防护盾采用了多层次的防御体系。不仅能够在网络层面阻挡外部的恶意访问和攻击,还能深入系统内部,对服务器的文件系统、进程等进行深度检查和保护,确保 Webshell 无法植入和运行。
同时,墨者安全防护盾拥有快速的应急响应能力。当 Webshell 攻击事件发生时,专业的安全团队能够迅速介入,进行深入的分析和处理,最大程度减少攻击带来的损失,并帮助用户快速恢复服务器的正常运行。
墨者安全防护盾还注重用户教育和培训,为用户提供关于 Webshell 防范的专业知识和最佳实践,帮助用户提升自身的安全意识和防范能力,共同构建坚实的网络安全防线。