DNS服务器是将IP转换为域名,例如www.baidu.com 实际上所访问是一个IP地址。由此可见,域名是用来简化访问方式的,如果互联网完全按数字IP来,不方便助记。
DNS服务器已53端口(TCP/UDP)提供服务(DNS 服务器),而客服端通过DNS服务器获取域名所对应的IP(解析器)
反射攻击(reflection attack)是指攻击者可以发送伪造源IP地址的报文。攻击者将生成一个来自目标受害者的数据包发送到Internet上的某个服务器,该服务器将立即回复。因为源IP地址是伪造的,远程互联网服务器会回复并发送数据给受害者。这有两个影响:1. 攻击的实际来源被隐藏,很难追踪; 2. 如果使用了许多互联网服务器,攻击可能包括来自世界各地的大量数据包。
如果目标服务器启用 DNS 递归(反射攻击方法),攻击者可以在 UDP 数据包上欺骗源,以使 DNS 将响应发送到目标服务器。
攻击者可以滥用 ANY 或 DNSSEC 记录类型,因为他们曾经做出更大的响应。
检查DNS是否支持递归的方法是查询域名,并检查响应中是否存在标志“ra”(递归可用):
在Linux下使用dig命令
dig google.com A @<IP>
标志部分qr rd ra表示查询响应(querier response)、递归请求(recursion desired)和递归可用(recursion available)
1、ACL控制访问
如果运行递归DNS解析器,最佳实践是确保它只响应来自授权客户端的查询。换句话说,如果你正在为你的公司运行一个递归DNS服务器,并且你的公司的IP空间是5.5.5.0/24(即5.5.5.0 - 5.5.5.255),那么它应该只响应来自这个范围的查询。如果一个查询从9.9.9.9到达,那么它不应该响应。
2、禁止递归响应
禁用DNS服务递归(DNS ANY)。
3、完全禁止DNS查询
假设我们知道我们没有从我们的网络发送任何DNS查询。因此,我们可以安全地过滤来自DNS解析器的响应:在我们的路由器上丢弃来自开放解析器的响应。
来源部分:
https://book.hacktricks.xyz/network-services-pentesting/pentesting-dns#dns-recursion-ddos