为什么即使 DNS 服务器是假的,NSlookup 也会返回 IP 地址?

为什么即使 DNS 服务器是假的,NSlookup 也会返回 IP 地址?

最初在新闻组中询问,完整日志: https://groups.google.com/forum/#!topic/microsoft.public.windowsxp.general/Ll32NWComwY

在此处输入图片描述

快照显示 DNS 答案确实是由假服务器返回的。

答案1

没有什么“确实”的。如果您的 ISP 希望对 DNS 查询执行 MITM(中间人)攻击,它很容易将查询重定向到另一个目的地而不让您知道(至少不仅仅是基于回复的源 IP 地址)。

以下是概念验证。以下是我的 LAN 中主机的防火墙规则:

*nat

-A PREROUTING -p udp --dport 53 -m limit --limit 20/minute -j ACCEPT
-A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1
-A POSTROUTING -p udp --dport 53 -j SNAT --to-source 192.168.1.110

COMMIT

这些规则的基本含义是,如果平均 DNS 查询数量超过一定数量,则将查询重定向到特定主机(在这种情况下,它只是一个“普通”的 DNS 转发器/服务器,因为它本身不会伪造结果);否则,接受它(即“按原样”进行“路由”)。

最后一条规则导致回复首先被路由回它(通过将源伪装成它自己),以便防火墙可以对其一直跟踪的回复源与原始目的地(以及回复目的地与原始源)执行“反向 NAT”。

下面是当我使用“中间人”主机作为不存在的 DNS 服务器的网关对 LAN 中的另一台主机进行 DNS 查询时的结果:

[tom@archlinux ~]$ ssh 192.168.1.143
Last login: Fri Oct 25 14:32:11 2019 from 192.168.1.110
[tom@alarm ~]$ ip r get 200.100.200.100
200.100.200.100 via 192.168.1.110 dev eth0 src 192.168.1.143 uid 1000 
    cache 
[tom@alarm ~]$ while true; do timeout 1 nslookup www.google.com 200.100.200.100; if [ $? -eq 0 ]; then sleep 5; else echo "timeout!"; fi; done

timeout!

timeout!

timeout!

timeout!

timeout!

timeout!

timeout!
Server:     200.100.200.100
Address:    200.100.200.100#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.26.132
Name:   www.google.com
Address: 2404:6800:4005:805::2004


timeout!

timeout!
Server:     200.100.200.100
Address:    200.100.200.100#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.26.132
Name:   www.google.com
Address: 2404:6800:4005:805::2004


timeout!

timeout!

timeout!
Server:     200.100.200.100
Address:    200.100.200.100#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.26.132
Name:   www.google.com
Address: 2404:6800:4005:805::2004

^C

相关内容