跳到主要内容

about DNS劫持

提示

本篇技术只限于技术交流,不得应用于违法犯罪!

DNS劫持是一种网络攻击手段,攻击者通过篡改DNS服务器的响应,将用户访问的网站重定向到恶意网站。这种攻击可能导致用户的个人信息泄露、财产损失等风险。

实现DNS劫持的技术有多种,总得来说是三种类型

  1. DNS缓存投毒:
    攻击者通过向DNS服务器发送伪造的DNS响应,使其缓存错误的IP地址信息。当用户查询该域名时,DNS服务器会返回错误的IP地址,导致用户被重定向到恶意网站。
  2. 本地主机文件篡改:
    攻击者修改用户计算机上的本地主机文件,将目标网站的域名映射到恶意IP地址上。这样,当用户访问该网站时,系统会直接使用恶意IP地址进行连接。
  3. 中间人攻击:
    攻击者在用户和目标网站之间插入自己控制的服务器,截获用户的DNS请求并篡改其响应。这样,用户实际上访问的是攻击者控制的恶意网站。 这类攻击,比较难实现,也最难防范,影响面也是最大的。 在链路上,只要添加一个网桥型包过滤器就能实现,很难被识破。

不同的DNS劫持,有不同的防范技术。

  • 使用可信的DNS服务器:
    选择可靠的DNS服务提供商或使用公共DNS服务器,如Google DNS(8.8.8.8和8.8.4.4)或OpenDNS(208.67.222.222和208.67.222.223)。
  • 启用DNSSEC:
    DNSSEC是一种安全扩展,可以验证DNS响应的真实性和完整性,防止DNS劫持。
  • 更新操作系统和应用程序:
    及时安装操作系统和应用程序的安全补丁,以修复已知的安全漏洞。
  • 使用防火墙和安全软件:
    配置防火墙规则,限制对敏感端口的访问;使用安全软件进行实时监控和检测潜在的威胁。
  • 定期备份数据:
    定期备份重要数据,以防止数据丢失或受到勒索软件等威胁。

DNS中间人攻击的技术实现

此部分涉及较多知识,不便在此深讲,只讲实现的技术关健点。

DNS路由包劫持

在链路上,可采用路由器或防火墙或或网桥型包过滤器,对DNS数据包进行修改,将目标DNS改写也自己控制的DNS服务器。 例如:以iptables为例,如下规则可实现DNS数据包的目标地址改写为被自己控制的DNS服务器。

$ipt -t nat -A PREROUTING -i $lan_dev -p udp --dport 53 -j DNAT --to-destination x.x.x.x:53
$ipt -t nat -A PREROUTING -i $lan_dev -p tcp --dport 53 -j DNAT --to-destination x.x.x.x:53
$ipt -t filter -A FORWARD -i $lan_dev -p icmp -j ACCEPT
$ipt -t filter -A FORWARD -i $lan_dev -p udp --dport 53 -j ACCEPT
提示

在链路安装网桥型包过滤器,除可以做DNS劫持,其实可以做任何类型的数据包劫持,如mysql/3306、ssh/22等。

另外一个典型的应用场景是web透明代理。

DNS记录篡改

在自己可控制的DNS上面添加相应记录,将DNS记录的返回修改为可想要的记录,DNS服务器会将该记录返回给用户,从而实现即定目标。 例如:正常时www.test.com应返回1.1.1.1,则经过修改后可返回2.2.2.2.

曾记得,以前采用电信或移动或联通线路上网时,若网站错误,会弹出一个广告页,这是ISP线路商做过的DNS劫持。 类似如下记录

# nslookup -qt=a www.tabeffaaaafffff.com 192.168.3.238
服务器: UnKnown
Address: 192.168.3.238

非权威应答:
名称: www.tabeffaaaafffff.com
Address: 10.2.6.253 # 广告地址

如何防范

这类攻击最明显的特点是用户端在配置DNS时,无论填写的DNS服务器IP是否正确,则只要DNS包被路由到劫持节点,则都能被正确解析。 Alt text

最根本的防范就是采用安全可靠的线路,在上网时,数据包从源地址到目标地址,经过很多链路,要确保每一段链路都是可靠的。

若在链路无法更换的情况下发现了此类DNS攻击,该如何处理?是有反制措施的,有需要的朋友可直接联系我。