以下是发现和验证DNS污染漏洞的详细步骤和方法,分为普通用户视角和安全研究人员/运维人员视角。
这些方法适合怀疑自己网络被污染的非技术人员。
1、使用nslookup或dig命令进行对比查询:
原理在不同的网络环境(如国内网络 vs. 国外VPN网络)和不同的DNS服务器(如国内公共DNS vs. 国外公共DNS)下查询同一个域名,对比结果。
操作步骤
在本地网络查询
* 打开命令提示符(CMD)或PowerShell。
* 输入nslookup 被墙的域名.com
(例如nslookup google.com
)。
* 记录返回的IP地址。
使用国外公共DNS查询
* 输入nslookup 被墙的域名.com 8.8.8.8
(使用Google DNS)。
* 输入nslookup 被墙的域名.com 1.1.1.1
(使用Cloudflare DNS)。
* 记录返回的IP地址。
判断如果本地查询返回的IP与使用8.8.8.8
或1.1.1.1
查询返回的IP完全不同,并且本地返回的IP是一个明显不相关、通常是国内的IP地址,那么极有可能遭遇了DNS污染。
2、使用在线DNS查询工具:
* 访问诸如[https://www.dnscheck.tools/](https://www.dnscheck.tools/)、[https://toolbox.googleapps.com/apps/dig/](https://toolbox.googleapps.com/apps/dig/) 等网站。
* 在这些网站上输入你怀疑的域名,选择全球各地的DNS服务器进行查询。
判断如果来自全球大部分地区的解析结果一致,而唯独你所在地区或运营商的解析结果异常,则可能存在污染。
3、尝试访问HTTPS网站:
* DNS污染通常只篡改IP地址,但无法伪造SSL证书。
* 如果你的浏览器访问https://某个被污染的域名.com
时出现SSL证书错误警告(例如提示证书与域名不匹配),而访问其真实IP(通过国外DNS查到的)却正常,这强烈表明你收到的IP是被伪造的。
二、 安全研究人员/运维人员深入分析方法(专业准确)
这些方法用于精确验证和取证,适合需要写报告或深入分析的安全人员。
1、使用dig命令追踪解析全过程:
dig
命令是网络诊断的瑞士军刀,功能比nslookup
更强大。
查询权威DNS记录
dig +trace 被怀疑的域名.com
这条命令会显示DNS解析的完整迭代过程,从根域名服务器一直到权威域名服务器,如果在这个过程中,某一步返回的IP与最终权威服务器给出的IP不一致,就能定位污染发生的环节。
指定不同的DNS服务器进行对比
dig @8.8.8.8 被怀疑的域名.com dig @208.67.222.222 被怀疑的域名.com # OpenDNS dig @114.114.114.114 被怀疑的域名.com # 国内DNS
对比不同公共DNS的返回结果。
2、分析TTL值异常:
* DNS记录都有一个TTL(Time to Live)值,表示该记录可以缓存的时间。
* 攻击者实施的DNS污染,为了使其效果持久,可能会返回一个非常长的TTL值(例如几万秒)。
你可以通过dig
命令查看TTL
dig 被怀疑的域名.com | grep -E "IN\s+A"
如果返回的TTL异常地大,而你知道该域名的真实TTL应该很小(例如CDN的TTL通常很短),这是一个可疑信号。
3、使用TCP DNS查询:
* 传统的DNS查询使用UDP协议,UDP是无连接的,易于伪造,而TCP协议需要三次握手,伪造起来困难得多。
* 大多数DNS污染攻击只针对UDP查询,因此可以尝试强制使用TCP进行DNS查询。
dig +tcp 被怀疑的域名.com @8.8.8.8
判断如果UDP查询返回错误IP,而TCP查询返回正确IP,则可以100%确认存在DNS污染(并且是针对UDP的污染)。
4、捕获并分析DNS流量(最高级方法):
* 使用Wireshark 或tcpdump 工具直接抓取网络上的DNS请求和响应数据包。
操作步骤
1. 打开Wireshark,开始捕获流量。
2. 在命令行执行nslookup 被怀疑的域名.com
。
3. 停止捕获,使用过滤器dns
。
分析查看DNS响应包(Response),重点关注:
Transaction ID 请求和响应的ID是否匹配?不匹配则是伪造的响应。
Source IP 响应包的源IP地址是否是你要查询的DNS服务器的IP?如果不是,则是伪造的响应。
Answer Section 里面的IP地址是否为虚假IP?
如果你想检测的不是某个特定域名,而是你所在的整个网络是否存在DNS污染漏洞(例如路由器被黑),可以尝试:
查询一个绝对不存在的域名
nslookup 一个随机的不存在的域名123456abc.com
正常的DNS服务器应该返回NXDOMAIN
(表示域名不存在)。
如果返回了一个虚假的IP地址(比如指向一个广告页面或恶意网站),说明你使用的DNS服务器(很可能是运营商默认的或路由器DNS)被劫持了。
方法 | 描述 | 如何判断存在污染 |
多DNS服务器对比 | 用国内、国外多个DNS查询同一域名 | 结果不一致,国内DNS返回奇怪IP |
HTTPS证书验证 | 直接浏览器访问https版域名 | 出现SSL证书错误警告 |
dig +trace | 追踪DNS解析全过程 | 解析路径中某一步返回了错误IP |
TCP vs UDP | 分别用TCP和UDP协议查询DNS | UDP返回错误IP,TCP返回正确IP |
Wireshark分析 | 抓包分析DNS响应数据 | Transaction ID不匹配、源IP非目标DNS |
综合建议:对于大多数用户,方法一(对比查询) 和HTTPS证书验证 就足以做出判断,对于安全研究人员,TCP/UDP对比 和流量分析 是确凿的证据。
如果确认存在DNS污染,解决方案通常是:
1、更换为可信的、不受污染的DNS服务器,如8.8.8.8
,1.1.1.1
,但注意,在某些网络环境下,这些DNS的UDP流量也可能被劫持。
2、使用DNSSEC:一种可以验证DNS响应真实性的安全扩展,但需要递归DNS服务器和权威服务器都支持,普及度有限。
3、使用加密的DNS,如DNS over HTTPS (DoH) 或DNS over TLS (DoT),这是目前最有效的解决方案,因为加密后的DNS请求和响应无法被中间节点识别和篡改,现代浏览器和操作系统都已支持。
文章摘自:https://idc.huochengrm.cn/dns/16196.html
评论