简单说,就是客户端发起正常的一次dns请求,得到的确是一个异常或者不真实的dns信息。一般造成这样的情况,很有可能dns信息在某个环节被通过某种方式篡改。
主要的方式,可以归纳为如下两种:
方式一、攻击者监测到dns查询的请求报文时,伪装成dns服务器向发出请求主机发送响应报文。因为dns报文通常是无连接的udp报文,没有确认机制,源主机不能识别出这个报文并非出自dns服务器。攻击者并不需要丢弃真正dns服务器发回来的响应报文,因为dns的机制会导致源主机只接受最先到达的响应报文(甚至不管是谁发的)而忽略后继到达的其他报文。这样,源主机得到的就是攻击者伪造的域名解析结果。
条件:1、攻击者能截获客户的数据包。2、能最短时间接替返回消息
方式二、本地dns服务器的缓存已受到污染,里面缓存的是错误的结果。dns服务器通常将dns查询的结果缓存在本地一段时间,这本意是为了减少重复dns查询,从而降低dns报文占用的网络带宽。可如果某次dns查询的结果受到污染,则后继一段时间内向该dns服务器查询的结果都会受到污染。
条件:1、本地dns存在攻击漏洞 2、本地dns成为被污染的对象
我们可以拿访问google 、facebook来演示:
[email protected]:/opt# nslookup www.google.com 8.8.8.8 #使用nds8.8.8.8 解析 www.google.com
server:8.8.8.8
address:8.8.8.8#53
non-authoritative answer:
name:www.google.com
address: 37.61.54.158
[email protected]:/opt# nslookup -vc www.google.com 8.8.8.8 #同样,不过改使用tcp的方式解析
address: 216.58.221.228
#我们再同样查查脸书
[email protected]:/opt# nslookup www.facebook.com 8.8.8.8
name:www.facebook.com
address: 37.61.54.158 #发现什么了?dns受到了污染。
我们仔细来查查这个什么玩意地址37.61.54.158
下面是一个正常的google地址返回,因该如下: