专栏名称: FreeBuf
国内关注度最高的全球互联网安全新媒体
目录
相关文章推荐
子弹财经  ·  医美服务专业化 美团北极星“铺路搭桥” ·  昨天  
奇果酱  ·  iOS 18 / 17.7 ... ·  6 天前  
奇果酱  ·  iOS 18 / 17.7 ... ·  6 天前  
FreeBuf  ·  Pick出你心中的三大TOP 10榜单 | ... ·  6 天前  
FreeBuf  ·  年度AI安全创新产品等你来评 | ... ·  1 周前  
51好读  ›  专栏  ›  FreeBuf

DnsDiag:一款针对DNS的故障排除和安全审计工具

FreeBuf  · 公众号  · 互联网安全  · 2024-09-29 18:54

正文


关于DnsDiag


DnsDiag是一款针对DNS的故障排除和安全审计工具,在该工具的帮助下,广大研究人员可以轻松检测DNS基础设施的安全性。



你是否曾怀疑过你的 ISP 是否劫持了你的 DNS 流量?你是否曾观察到 DNS 响应有任何异常行为?你是否曾被重定向到错误的地址并怀疑你的 DNS 有问题?DnsDiag可以对你的 DNS 请求和响应执行基本审核,以确保你的 DNS 正常运行。


可以使用DnsDiag测试任何给定 DNS 服务器对任意请求的响应时间dnsping。就像传统的 ping 实用程序一样,它提供了类似的 DNS 请求功能,还可以跟踪 DNS 请求到达目的地的路径,以确保它没有被重定向或劫持。这可以通过比较发送到同一 DNS 服务器的不同 DNS 查询来实现dnstraceroute,并观察路径之间是否有任何差异。


DnsDiag的dnseval组件能够评估多个 DNS 解析器并为网络选择最佳 DNS 服务器。虽然强烈建议使用自己的 DNS 解析器,并且不要信任任何第三方 DNS 服务器,但如果需要为网络选择最佳 DNS 转发器,dnseval你可以从性能(延迟)和可靠性(丢失)的角度比较不同的 DNS 服务器。


工具要求


dnspython>=2.6.1

cymruwhois>=1.6

httpx>=0.27.0

cryptography>=42.0.7

h2>=4.1.0


工具安装


由于该工具基于Python 3开发,因此首先需要在本地设备上安装并配置好最新版本的Python 3环境。


源码安装


接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/farrokhi/dnsdiag.git


然后切换到项目目录中,使用pip3命令和项目提供的requirements.txt安装该工具所需的其他依赖组件:

cd dnsdiag
pip3 install -r requirements.txt


除此之外,也可以使用pip命令直接安装DnsDiag:

pip3 install dnsdiag


发布版本安装


该工具会不定期发布适用于 Windows、Mac OS X 和 Linux 的二进制软件包。


Docker安装


如果不想在本地机器上安装DnsDiag,可以使用 Docker 镜像并在容器中运行程序。例如:

docker run --network host -it --rm farrokhi/dnsdiag dnsping.py

工具使用


dnsping


DnsDiag的dnsping组件可以通过发送任意 DNS 查询指定次数来 ping DNS 解析器。使用--help可获取工具持的命令行选项。以下是一些有用的参数选项:

--tcp、--tls和--doh可以选择使用的传输协议,默认为 UDP;

--flags用于显示每个响应的响应标志(包括 EDNS );

--dnssec可以请求 DNSSEC;

--ede用于显示扩展 DNS 错误消息;

--nsid用于显示名称服务器标识符 (NSID);


除了 UDP,还可以分别使用 TCP、DoT(TLS 上的 DNS)和 DoH(HTTPS 上的 DNS)进行ping--tcp操作,相关选项分别为--tcp、--tls和--doh:

./dnsping.py -c 5 --dnssec --flags --tls --ede -t AAAA -s 8.8.8.8 brokendnssec.netdnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75 bytes from 8.8.8.8: seq=1 time=113.631 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
75 bytes from 8.8.8.8: seq=2 time=115.479 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
75 bytes from 8.8.8.8: seq=3 time=90.882 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
75 bytes from 8.8.8.8: seq=4 time=91.256 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
75 bytes from 8.8.8.8: seq=5 time=94.072 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]


--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=90.882 ms, avg=101.064 ms, max=115.479 ms, stddev=12.394 ms

dnstraceroute


DnsDiag的dnstraceroute组件是一款路由跟踪实用程序,用于找出 DNS 请求到达目的地所经过的路径。可以将其与实际网络路由跟踪进行比较,并确保 DNS 流量没有路由到任何不需要的路径。


除了UDP之外,还支持TCP作为传输协议,使用--tcp标志。

./dnstraceroute.py --expert --asn -C -t A -s 8.8.4.4 facebook.comdnstraceroute.py DNS: 8.8.4.4:53, hostname: facebook.com, rdatatype: A
1 192.168.0.1 (192.168.0.1) 1 ms
2 192.168.28.177 (192.168.28.177) 4 ms
3 192.168.0.1 (192.168.0.1) 693 ms
4 172.19.4.17 (172.19.4.17) 3 ms
5 dns.google (8.8.4.4) [AS15169 GOOGLE, US] 8 ms

=== Expert Hints ===
[*] public DNS server is next to a private IP address (possible hijacking)

dnseval


DnsDiag的dnseval组件一个批量 ping 实用程序,它向给定的 DNS 服务器列表发送任意 DNS 查询。此脚本用于同时比较多个 DNS 服务器的响应时间。


可以分别使用和dnseval来比较使用不同传输协议(如 UDP(默认)、TCP、DoT 和 DoH)的响应时间。参数选项分别为--tcp、--tls和--doh:

./dnseval.py --dnssec -t AAAA -f public-servers.txt -c10 ripe.netserver                   avg(ms)     min(ms)     max(ms)     stddev(ms)  lost(%)  ttl        flags                  response
----------------------------------------------------------------------------------------------------------------------------
1.0.0.1 36.906 7.612 152.866 50.672 %0 300 QR -- -- RD RA AD -- NOERROR
1.1.1.1 7.752 7.512 8.132 0.183 %0 298 QR -- -- RD RA AD -- NOERROR
2606:4700:4700::1001 7.661 7.169 8.102 0.240 %0 297 QR -- -- RD RA AD -- NOERROR
2606:4700:4700::1111 7.802 7.000 8.128 0.312 %0 296 QR -- -- RD RA AD -- NOERROR
195.46.39.39 14.723 7.024 78.239 22.362 %0 300 QR -- -- RD RA -- -- NOERROR
195.46.39.40 7.524 6.972 10.897 1.191 %0 300 QR -- -- RD RA -- -- NOERROR
208.67.220.220 70.519 6.694 180.229 66.516 %0 300 QR -- -- RD RA AD -- NOERROR
208.67.222.222 37.868 6.663 107.601 41.178 %0 300 QR -- -- RD RA AD -- NOERROR
2620:0:ccc::2 31.471 6.768 178.647 56.546 %0 299 QR -- -- RD RA AD -- NOERROR
2620:0:ccd::2 20.651 6.699 145.029 43.702 %0 300 QR -- -- RD RA AD -- NOERROR
216.146.35.35 19.338 6.713 131.198 39.306 %0 300 QR -- -- RD RA AD -- NOERROR
216.146.36.36 107.741 73.421 266.969 58.003 %0 299 QR -- -- RD RA AD -- NOERROR
209.244.0.3 14.717 7.015 80.329 23.058 %0 300 QR -- -- RD RA -- -- NOERROR
209.244.0.4 7.184 7.003 8.197 0.361 %0 300 QR -- -- RD RA -- -- NOERROR
4.2.2.1 7.040 6.994 7.171 0.052 %0 299 QR -- -- RD RA -- -- NOERROR
4.2.2.2 14.358 6.968 79.964 23.052 %0 300 QR -- -- RD RA -- -- NOERROR
4.2.2.3 7.083 6.945 7.265 0.091 %0 299 QR -- -- RD RA -- -- NOERROR
4.2.2.4 7.103 6.990 7.238 0.086 %0 299 QR -- -- RD RA -- -- NOERROR
4.2.2.5 7.100 7.025 7.267 0.074 %0 299 QR -- -- RD RA -- -- NOERROR
80.80.80.80 149.924 53.310 247.395 97.311 %0 299 QR -- -- RD RA AD -- NOERROR
80.80.81.81 144.262 53.360 252.564 97.759 %0 298 QR -- -- RD RA AD -- NOERROR
8.8.4.4 9.196 7.160 10.974 1.484 %0 299 QR -- -- RD RA AD -- NOERROR
8.8.8.8 7.847 7.056 9.866 0.836 %0 299 QR -- -- RD RA AD -- NOERROR
2001:4860:4860::8844 31.819 7.194 155.761 50.671 %0 299 QR -- -- RD RA AD -- NOERROR
2001:4860:4860::8888 7.773 7.200 9.814 0.777 %0 298 QR -- -- RD RA AD -- NOERROR
9.9.9.9 21.894 6.670 81.434 30.299 %0 300 QR -- -- RD RA AD -- NOERROR
2620:fe::fe              21.177      6.723       80.046      30.062      %0       300        QR -- -- RD RA AD --   NOERROR

许可证协议


本项目的开发与发布遵循BSD-2-Clause开源许可协议。


项目地址


DnsDiag

https://github.com/farrokhi/dnsdiag


FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界
甲方安全建设干货;
乙方最新技术理念;
全球最新的网络安全资讯;
群内不定期开启各种抽奖活动;
FreeBuf盲盒、大象公仔......
扫码添加小蜜蜂微信回复「加群」,申请加入群聊

https://dnsdiag.org/
https://farrokhi.net/