简介
- DDoS(Distributed Denial of Service)分布式拒绝服务攻击指借助于C/S技术,将多台计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
- 利用分布式的客户端,向服务提供者发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝服务的目的。
从僵尸网络谈起
僵尸网络
一般指僵尸主人出于恶意目的,传播大量僵尸程序,并采用一对多方式进行控制的大型网络。僵尸网络的组建
节点
- 普通PC利用过程
- 服务器
攻击Web服务器的步骤有:通过CMS或其他Web应用的漏洞拿到shell、提权、植入恶意程序或者是在访问量大的页面上挂DDoS代码 - 移动设备
渗透步骤类似PC端 - 其他物联网设备
攻击手段
攻击网络带宽资源
直接攻击
- ICMP/IGMP洪水攻击
- UDP洪水攻击
- 原理:
UDP是一种不可靠连接,在发动DoS攻击时只要确定目标机某个端口开放,直接打这个端口即可
- 原理:
以上两种攻击方式都极大依赖于攻击端本身的网络性能,通俗地说就是和目标机拼带宽资源
反射放大攻击
反射攻击又被称为DRDoS(Distributed Reflection Denial of Service,分布式反射拒绝服务)攻击,是指利用路由器、服务器等设施对请求产生应答,从而反射攻击流量并隐藏攻击来源的一种分布式拒绝服务攻击技术。
- ACK 反射攻击
- DNS 放大攻击
DNS 使用的TCP与UDP端口号都是53,主要使用UDP协议。通常,DNS响应的数据包会比查询的数据包大,因此攻击者利用普通的DNS查询请求就能够发动放大攻击,并将攻击流量放大2~10倍。但更有效的方法是使用RFC 2671 中定义的 DNS 扩展机制 EDNS0
在没有EDNS0以前,对DNS查询的响应数据包被限制在512字节以内。……在EDNS0中,扩展了DNS数据包的结构,增加了OPT RR 字段。在 OPT RR 字段中,包含了客户端能够处理的最大 UDP 报文的大小,并根据该大小生成响应的报文。
攻击者能够利用
dig
和EDNS0
进行高效的DNS放大攻击。
- NTP 放大攻击
网络时间协议(Network Time Protocol,NTP)是用来使计算机时间同步化的一种协议,它可以使计算机与时钟源进行同步化并提供高精准度的时间校正,NTP使用 UDP 123 端口进行通信。
在 NTP 协议的服务器实现上,通常会实现一系列 Mode 7 的调试接口,而接口中的 monlist 请求能够获取到与目标 NTP 服务器进行同步的最后600个客户端的 IP 地址等信息。这意味着,只需要发送一个很小的请求包,就能够触发大量连续的包含 IP 地址信息等数据的 UDP 响应数据包。
据统计,只要向 NTP 放大器发送 600 个不超过 64 字节请求包(约 40KB 数据),就能够快速地将 NTP 放大器的放大倍数提高到 700 倍以上,并在该服务器的 NTP 服务关闭或重新启动之前一直保持这么大的放大倍数。
原理图
工具
[root@F #] ntpdc -n -c monlist x.x.x.x
scapy
nmap -sU -pU:123 -n --script=ntp-monlist x.x.x.x
寻找 NTP 放大攻击漏洞(@心伤的胖子)
[root@F #] masscan -pU:123 -oX ntp.xml --rate 160000 start.0.0.0-end.255.255.255
- 对
ntp.xml
里的 ip 去重(如果有重复的) - python scapy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26from scapy.all import *
import thread
#Raw packet data used to request Monlist from NTP server
rawData = "\x17\x00\x03\x2a" + "\x00" * 61
#File containing all IP addresses with NTP port open.
logfile = open('output.txt', 'r')
#Output file used to store all monlist enabled servers
outputFile = open('monlistServers.txt', 'a')
def sniffer():
#Sniffs incomming network traffic on UDP port 48769, all packets meeting thease requirements run through the analyser function.
sniffedPacket = sniff(filter="udp port 48769 and dst net 99.99.99.99", store=0, prn=analyser)
def analyser(packet):
#If the server responds to the GET_MONLIST command.
if len(packet) > 200:
if packet.haslayer(IP):
print packet.getlayer(IP).src
#Outputs the IP address to a log file.
outputFile.write(packet.getlayer(IP).src + '\n')
thread.start_new_thread(sniffer, ())
for address in logfile:
#Creates a UDP packet with NTP port 123 as the destination and the MON_GETLIST payload.
send(IP(dst=address)/UDP(sport=48769, dport=123)/Raw(load=rawData))
print 'End'
防御
- 加固 NTP 服务:
- 把 NTP 服务器升级到 4.2.7p26或以上
- 关闭现在 NTP 服务的
monlist
功能,在ntp.conf
配置文件中增加disable monitor
选项 - 在网络出口封禁 UDP 123 端口
- 一些顶层的 NTP 服务器采用“Closed Account”选项
- 防御 NTP 反射和放大攻击:
- 由于这种攻击的特征比较明显,所以可以通过网络层或者借助运营商实施 ACL 来防御
- 使用防 DDoS 设备进行清洗
- 使用restrict … noquery 或 restrict … ignore 来限制ntpd服务响应的源地址
- eg:在 NTP 配置文件中包含下面的代码行
restrict -4 default nomodify nopeer noquery notrap
restrict -6 default nomodify nopeer noquery notrap
- eg:在 NTP 配置文件中包含下面的代码行
- http://www.team-cymru.org/templates.html
- 建议有:
iptables -A INPUT -s 0/0 -d 0/0 -p udp --source-port 123:123 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 0/0 -d 0/0 -p udp --destination-port 123:123 -m state --state NEW,ESTABLISHED -j ACCEPT
- 建议有:
- 加固 NTP 服务:
SNMP 放大攻击
简单网络管理协议(Simple Network Management Protocol, SNMP)是目前网络中应用最为广泛的网络管理协议,它提供了一个管理框架来监控和维护互联网设备。SNMP 协议使用 UDP 161 端口进行通信。
利用 SNMP 协议中的默认通信字符串和 GetBulk 请求,攻击者能够展开有效的 SNMP 放大攻击。
攻击者向广泛存在并开启了 SNMP 服务的网络设备发送 GetBulk 请求,使用默认通信字符串作为认证凭据,并将源 IP 地址伪造成攻击目标的 IP 地址。设备收到 GetBulk 请求后,会将响应结果发送给攻击目标。 当大量的响应结果涌向攻击目标时,就会导致攻击目标网络拥堵和缓慢,造成拒绝服务攻击。
攻击者发送的 GetBulk 请求数据包约为 60 字节,而请求的响应数据能够达到 1500 字节以上,使用该方式进行放大攻击能够达到 25 倍以上的放大效果。
工具
[root@F #] snmpwalk –c public –v2c x.x.x.x oid
@付弘雪这里oid是获取snmp具体信息内容的一个标识,snmp里面存的信息是一个树状的信息结构
其实snmpwalk是获取一条oid信息,但是这个oid里面附带了下一个树节点的oid号,然后snmp会通过 snmpget继续访问下一个oid号(在getnext字段里面),来执行一个类似于循环的行为,但是snmpget的协议大家也看到了,只能获取到一条信息,79的信息长度,只能获得279的反馈,这样实现攻击的放大倍数是不给力的。
关键点来了,根据rfc1441-rfc1452文档说明,snmp第二版里面引入了getbulk来取代反复getnext,用来更好的在单个请求里面获得大量的管理数据。相对应的bt5下还有个snmpbulkget命令[root@F #] snmpbulkget -v2c -Cn0 -Cr70 -c public x.x.x.x oid
对应就是获取当前oid后面的70个团体字,这样如果你用snmpwalk跑一个1.3.6的团体字会看到很多信息,而你用bulkget这个一次就可以收到一个包里面包含70条信息的数据包
攻击链路
- 攻击链路与前面两种攻击方式不同,其攻击的目标并不是作为互联网端点的服务器的带宽资源,而是骨干网上的链路的带宽资源。
- 对链路进行攻击的一种典型的方式是 Coremelt 攻击。
- 攻击者通过
traceroute
等方式确定各个僵尸机的链路之间的相对位置,然后由攻击机控制僵尸机,使其与链路另一边的每台僵尸机进行大流量通信。使得骨干网链路拥塞甚至瘫痪。攻击系统资源
- 消耗系统资源的分布式拒绝服务攻击的主要目的是对系统维护的连接资源进行消耗和占用,阻止正常连接的建立,从而达到拒绝服务的目的。
攻击 TCP 连接
TCP 连接洪水攻击
思路:攻击者利用大量受控主机,通过快速建立大量恶意的 TCP 连接占满被攻击目标的连接表,使目标无法接受新的 TCP 连接请求,从而达到拒绝服务的目的。SYN 洪水攻击
TCP 半开连接
在建立 TCP 连接过程中,如果在服务器返回 SYN+ACK 报文后,客户端由于某种原因没有对其进行确认,服务器将重传 SYN+ACK 报文,并等待客户端的确认报文直到 TCP 连接超时。
为了减少攻击者的暴露面以及降低攻击者的带宽资源,可以将 TCP SYN 包的源 IP 改成其他主机或不存在的 IP 地址。这里区别于 ACK 放大攻击
PSH+ACK 洪水攻击
- 在 TCP 数据传输的过程中,可以通过设置 PSH 标志位来表示当前数据传输结束,需要服务端进行处理。
在正常的 TCP 传输过程中,如果待发送的数据会清空发送缓冲区,那么操作系统的 TCP/IP 协议栈就会自动为该 TCP 数据包设置 PSH 标志。同样,当服务端接收到了一个设置了 PSH+ACK 标志的报文时,意味着当前数据传输已经结束,因此需要立即将这些数据递交给服务进程并清空接收缓冲区,而无须等待判断是否还会有额外的数据到达。
- 在 TCP 数据传输的过程中,可以通过设置 PSH 标志位来表示当前数据传输结束,需要服务端进行处理。
- 攻击思路:
由于带有 PSH 标志位的 TCP 数据包会强制要求接收端将接收缓冲区清空并将数据提交给应用服务进行处理,因此当攻击者利用受控主机向攻击目标发送大量的 PSH+ACK 数据包时,被攻击目标就会消耗大量的系统资源不断地进行接受缓冲区的清空处理,导致无法正常处理数据,从而造成拒绝服务。
RST 洪水攻击
在 TCP 连接的终止阶段,RST 表示复位,用来在异常时关闭连接。发送端在发送 RST 报文关闭连接时,不需要等待缓冲区中的数据包全部发送完毕,而会直接丢弃缓冲区的数据并发送 RST 报文;同样,接收端在收到 RST 报文后,也会清空缓冲区并关闭连接,并且不必发送 ACK 报文进行确认。
- 很多情况下,攻击者不会与被攻击者处于同一内网,导致发动 TCP RST 攻击时难以获取端口和序列号。在这种情况下,攻击者可以利用大量的受控主机猜测端口和序列号,进行盲打,发动 RST 洪水攻击。只要在数量巨大的 RST 报文中有一条与攻击目标的端口号相同,并且序列号落在目标的接收窗口之中,就能够中断连接。
- TCP RST 攻击和 RST 洪水攻击多用于针对用户的拒绝服务攻击。这种攻击通常被用来攻击在线游戏或比赛的用户,从而影响比赛的结果并获得一定的经济效益。
- Sockstress 攻击
在 TCP 传输数据过程中,并不是直接将数据发送到应用程序,而是先临时存储在接受缓冲区中,该缓冲区的大小由 TCP 窗口表示( TCP 窗口控制协议)。如果 TCP 窗口大小为 0 ,则表示接受缓冲区已被填满,发送端应该停止发送数据,直到接收端的窗口发生了更新。 Sockstress 攻击就是利用该原理长时间地维持 TCP 连接,以达到拒绝服务攻击的目的。
攻击 SSL 连接
安全套接层(Secure Sockets Layer, SSL)是为网络通信提供安全及数据完整性的一种安全协议。 SSL 能够在传输层对网络连接进行加密,以防止传输的数据明文被监听和截获。
- 由于 SSL 协议加密、解密和密钥协商的过程中会消耗大量的系统资源,严重降低机器的性能,因此,通常只有在传输密码等机密信息时才使用 SSL 协议进行传输。
- THC SSL DoS 攻击
- 在进行 SSL 数据传输之前,通信双方首先要进行 SSL 握手,以协商加密算法交换加密密钥,进行身份认证。一般来说,SSL 握手过程只需要进行一次即可,但是在 SSL 协议中有一个 Renegotiation 选项,通过它可以进行密钥的重新协商以建立新的密钥。THC SSL DoS 攻击就是利用 Renegotiation 选项,造成被攻击目标资源耗尽。
- SSL 洪水攻击
- 在 SSL 握手的过程中,服务器会消耗较多的 CPU 计算资源进行加解密,并进行数据的有效性检验。然而,不论数据是否有效,服务器都必须先进行解密才能够做检查。攻击者可以利用这个特性进行 SSL 洪水攻击。
- 为了降低成本,攻击者需要在客户端进行的计算尽可能地少。因此,可以在数据传输前、进行 SSL 握手的过程中发动攻击。即:攻击者并不需要完成 SSL 握手和密钥交换,仅仅在这个过程中让服务器去解密和验证,以致大量消耗服务器的计算资源。
- 攻击工具:
SSLSqueeze
攻击应用资源
攻击 DNS 服务
DNS QUERY 洪水攻击
- 原理:主要是通过发送大量 DNS QUERY 的包,增大 DNS 服务器的处理压力,直至使其宕机。
- 因此,攻击方可以尽量构造不同域名的查询,以有效避开 DNS 服务器缓存中的解析记录,达到更好的资源消耗效果。
DNS NXDOMAIN 洪水攻击
- 作为 DNS QUERY 攻击的变种攻击,区别在于 DNS QUERY 查询的是一个真实存在的域名,而 DNS NXDOMAIN 攻击查询一个不存在的域名。
攻击 Web 服务
- HTTP 洪水攻击
- 与其他攻击思路类似,攻击者操控大量肉鸡,向目标服务器发送大量 HTTP 请求,造成目标服务器处理缓慢甚至得不到处理,导致拒绝服务攻击。
由于 HTTP 协议是基于 TCP 协议的,需要完成三次握手建立 TCP 连接才能开始 HTTP 通信,因此 HTTP 洪水攻击时无法使用伪造源 IP 地址的方式发动攻击。攻击者通常使用 HTTP 代理服务器。
- Web 服务也会有缓存机制。更高效的 HTTP 洪水攻击应不断发出针对不同资源和页面的 HTTP 请求,并尽可能请求无法被缓存的资源(如关键词搜索结果、用户相关资料等),从而加重服务器的负担,增强攻击效果。
对于支持 HTTPS 的 Web 服务器,进行 HTTPS 洪水攻击是更为有效的一种攻击方式。一方面,在进行 HTTPS 通信时,Web 服务器需要消耗更多的资源用来进行认证和加解密;另一方面,一部分防护设备无法对 HTTPS 通信数据流进行处理,也会导致攻击流量绕过设备,直接对 Web 服务器造成攻击。
Slowloris 攻击
在 HTP 协议中规定,HTTP 头部以连续的“\r\n\r\n”作为结束标志。许多 Web 服务器在处理 HTTP 请求的头部信息时,会等待头部传输结束后再进行处理。因此,如果 Web 服务器没有接受到连续的“\r\n\r\n”,就会一直接受数据并保持与客户端的连接。利用这个特性,攻击者能够长时间与 Web 服务器保持连接,并逐渐耗尽 Web 服务器的连接资源。
攻击者可以在发送 HTTP GET 请求时,缓慢地发送无用的 header 字段,并且一直不发送“\r\n\r\n”结束标志,以长时间占用与 Web 服务器的连接并保证该连接不被超时中断。而 Web 服务器能够处理的并发连接数是有限的,因此,攻击者可以耗尽 Web 服务器的连接资源,造成拒绝服务攻击。
工具:
Slowloris、slowhttptest
等。摘自《破坏之王》 P91
在 Slowloris 攻击方法出现以后,IIS、nginx 等一部分 Web 服务器软针对该攻击方法进行了修改,但是 Apache、dhttpd 等 Web 服务器软件依然会受到 Slowloris 攻击的影响。
慢速 POST 请求攻击
在 HTTP 头部信息中,可以使用 Content-Length 字段来指定 HTTP 消息实体的传输长度。当 Web 服务器接收到的请求中含有 Content-Length 字段时,服务器会将该字段的值作为 HTTP BODY 的长度,持续接收数据并在达到 Content-length 值时对 HTTP BODY 的数据内容进行处理。利用这个特性,攻击者能够长时间与 Web 服务器保持连接,并逐渐耗尽 Web 服务器的连接资源。
- 攻击思路:攻击者在发送 HTTP POST 请求时,在请求头部中将 Content-Length 设置为一个很大的值,并以缓慢的速度发送 HTTP BODY 内容。以此来长时间占用这个连接,进而造成拒绝服务攻击。
- 工具:
slowhttptest
- 数据处理过程攻击
Web 服务器在收到 HTTP 请求之后,需要检查并处理其中的数据,通过恶意构造请求数据的内容,攻击者可以显著地增加数据处理过程中的资源消耗,造成拒绝服务攻击。
正则表达式拒绝服务攻击(ReDoS)
对于很多用正则回溯法的引擎如NFA(非确定性有限状态自动机),处理“否定匹配”(即输入字符串与正则表达式不匹配)时,正则引擎需要对所有可能的匹配路径全部进行测试。
《破坏之王》P93-94:如果位于 Web 应用中的正则表达式写得不够好,需要测试的匹配路径数量会随着输入字符串的长度呈指数级增长。利用恶意构造的输入字符串,攻击者只需要提交相对较短的输入字符串(30个字符左右)就可以强制正则引擎处理数亿个匹配路径,所需时间可以达到几个小时甚至几天。只需要几个这种类似的恶意正则表达式匹配请求,就能够完全占用 Web 服务器的计算资源,造成 Web 服务器拒绝服务。
哈希冲突拒绝服务攻击
攻击者构造一组恶意的 POST 数据,使得请求中的“键”的哈希值全部相同,那么保存 POST 数据的哈希表就会因此退化成为链表,对哈希表的查找和插入等操作则变成了对链表的遍历操作,造成大量的计算资源被占用,导致拒绝服务攻击。
混合攻击
攻击分类 | 洪水攻击 | 慢速攻击 |
---|---|---|
网络层攻击 | ICMP/IGMP 洪水攻击 | |
传输层攻击 | UDP 洪水攻击 | Slowloris 攻击 |
TCP 洪水攻击 | THC SSL DoS 攻击 | |
SYN 洪水攻击 | ||
PSH+ACK 洪水攻击 | ||
ACK 反射攻击 | ||
RST 洪水攻击 | ||
SSL 洪水攻击 | ||
应用层攻击 | DNS QUERY 洪水攻击 | Slowloris 攻击 |
DNS NXDOMAIN 洪水攻击 | 慢速 POST 请求攻击 | |
DNS 放大攻击 | 数据处理过程攻击 | |
HTTP 洪水攻击 | ||
NTP 放大攻击 | ||
SNMP 放大攻击 |
DDoS 攻击的防御
攻击的治理
僵尸网络的治理
- 难题
- 进行僵尸网络治理的首要困难在于,我们只有能够检测到网络异常,才能够知道系统感染了僵尸程序。
- 检测到感染,提取到样本,需要对样本进行逆向分析,找出需要的信息。
- 手段
- 根据逆向分析的结果,编写僵尸程序清除工具,分发至企业局域网的其他感染主机进行清除处理。
- 接管或摧毁整个僵尸网络。
地址伪造攻击的治理
难题
根据 TCP/IP 协议内容,无法根除此问题。手段
CERT Advisory CA-1996-21
路由过滤。互联网服务提供商在网络出入口处的路由器上,对符合以下条件的数据包进行过滤:- 从外部接口进入内部网络的数据包,但源地址属于内部网络; - 由内部网络向外发送的数据包,但是源地址不属于内部网络。
RFC 2827
攻击者位于 222.222.222.0/24 网段,属于 ISP D 的区域,通过路由器 Router 2,试图攻击其他主机。如果 Router 2 执行了入口流量过滤,只允许源地址在 222.222.222.0/24 网段内的数据包流出,反之则全部禁止,那么攻击将无法进行。Unicast Reverse Path Forwarding
对于 Input 方向的数据包,检查访问控制列表 ACL 是否允许通过;
按照 Unicast RPF 检查是否由最优路径抵达;
Forwarding Information Base(FIB)查找;
对于 Output 方向,检查访问控制列表 ACL 是否允许通过;
转发数据包。
在 IETF 的最佳实践 BCP 84 中对这种方式有较详细的介绍,这份文档名为 Ingress Filtering for Multihomed Networks
分布式过滤方法
路由器根据数据包的源地址和目的地址判断其转发路径是否经过自己。如果不经过,则丢弃该数据包。
攻击反射点的治理(以 DNS 举例)
- 手段
- Open Reslover Project
- RRL
- NIST SP 800-81
攻击的缓解
缓解 DDoS 攻击的主要方法是对网络流量进行清洗,即设法将恶意的网络流量从全部流量中去掉,只将正常的网络交付该服务器。然而,随着分布式拒绝服务攻击的流量不断增大,单一的流量清洗设备和流量清洗中心已经无法处理如此大规模的网络流量了,因此面对当今的 DDoS 攻击时,再进行流量清洗前还需要进行流量稀释。
攻击流量的稀释
- CDN
- CDN 技术的初衷是提高互联网用户对网站静态资源的访问速度,但是由于分布式多节点的特点,它也能够对分布式拒绝服务攻击的流量产生稀释的作用。
所谓 CDN,就是在互联网范围内广泛设置多个节点作为代理缓存,并将用户的访问请求导向最近的缓存节点(通常通过智能 DNS 来实现),以加快访问速度的一种技术手段。
传统 DNS
智能 DNS
- CDN 技术对于通过域名发起的分布式拒绝服务攻击的流量分散和稀释有较大作用。
- Anycast
- 任播
在网络寻址中,任播是指网络地址和网络节点为一对多的关系,每一个目的地址对应一群接受节点,但消息只会发送给拓扑结构上最近的节点。Anycast 通常是通过在不同的节点处同时使用 BGP 协议向外声明同样的 IP 地址的方式实现的。如下图:
路由器 1 眼中的网络拓扑结构:
因此,路由器 1 会优先将用户的请求报文转发给路由器 2,从而实际到达了服务器 A。
这就缓解了针对 IP 地址进行攻击的问题。
攻击流量的清洗
优秀的流量清洗设备,应该能够同时将误报率和漏报率降低到可以接受的程度,这样就能够在不影响网络或业务系统正常运行的情况下,最大限度地将恶意攻击流量从全部网络中去除
IP 信誉检查
类比于白名单、黑名单攻击特征匹配
- 很多攻击过程会借助工具,为了提高发送请求的效率,攻击工具发出的数据包通常是由编写者伪造并固化到工具当中,而不是在交互过程中产生的,因此一种攻击工具所发出的数据包载荷会具有一些特征。
- 流量清洗设备可以将这些数据包载荷中的特征作为指纹,来识别工具发出的攻击流量。
- 指纹识别包括静态指纹识别和动态指纹识别。静态是指预先将多种攻击工具的指纹特征保存在流量清洗设备内部,设备将经过的网络数据包与内部的特征库进行比对,直接丢弃符合特征的数据包;动态指纹识别则需要清洗设备对流过的网络数据包进行学习,在学习到若干个数据包的载荷部分之后,将其指纹特征记录下来,后续命中这些指纹特征的数据包会被丢弃,而长期不被命中的指纹特征会逐渐老化直至消失。
速度检查与限制
- eg1:
受到THC SSL DoS 攻击时,会在同一个 SSL 会话中多此进行加密密钥的重协商(正常情况下不会这样)。因此,当流量清洗设备进行统计时,如果发现 SSL 会话中密钥重协商的次数超过了特定阀值,就可以直接中断这个会话并把来源加入黑名单。 - eg2:
受到 Slowloris 和慢速 POST 请求攻击时,客户端和服务器之间会以非常低的速率进行交互和数据传输。流量清洗设备在发现 HTTP 的请求长时间没有完成传输时,就可以将会话中断。 - 对于 UDP 洪水攻击等一些没有明显特征、仅通过大流量进行攻击的方法,可以通过限制流速的方式对其进行缓解。
- eg1:
TCP 代理和验证
协议完整性验证
- 在 DNS 解析过程中,如果域名解析请求获得的响应数据中 Flags 字段的 Truncated 位被置换,通常客户端就会使用 TCP 53 端口重新发送域名解析请求
- 攻击者使用的工具由于不接受或不处理解析请求的相应数据,也就不会使用 TCP 53 端口进行重新连接。流量清洗设备可以利用这个区别来有效地区分合法用户与攻击者,拦截恶意的 DNS 攻击请求。
- 对于提供 HTTP 服务的 Web 服务器,可以使用HTTP 协议中的 302 重定向来验证请求的来源是否接受了响应数据并完整实现了 HTTP 协议的功能。HTTP 的 302 状态码表示被请求的资源被临时转移,并会给出一个转移后的地址。正常合法用户在接收到 302 重定向后会顺着跳转地址寻找对应的资源:
- 而攻击者的攻击工具由于不接收或不处理响应数据,则不会进行跳转,因此攻击请求会被清洗设备拦截,Web 服务器不会受到任何影响 :
- 在 DNS 解析过程中,如果域名解析请求获得的响应数据中 Flags 字段的 Truncated 位被置换,通常客户端就会使用 TCP 53 端口重新发送域名解析请求
客户端真实性验证