2006年5月26日

GFW劫持域名

Author: Hagen.GoO 转载请注明作者出处
MSN contact: wantm009@hotmail.com
Keyword: 域名劫持,GFW
Quote:

今天用 NSLOOKUP 查询某域名WWW的主机记录时,发现一个有趣的想象:程序每次返回的结果都不一样,显示的IP有207.12.88.98 208.56.31.43 65.160.219.113 169.132.13.103等等。出于好奇,接着查询其MX和NS记录,结果 NSLOOKUP 返回的既不是MX记录,也不是NS记录,却都是A记录;接着再试其他的Query Type,发现也是同样结果。更换DNS服务器,结果依然。换句话说,不管去查询这个域名的任何记录,返回的都是A记录,而且包含的IP地址每次都不一样。

原以为这是对方域名服务器的问题,不过有点不死心,上 DNSStuff,使用它页面上的 NSLOOKUP 工具查询测试,结果一切正常,看来不是对方的问题。那么……,难道是GFW在捣鬼?

于是开启 Commview,监视所有的DNS数据包,分析比较了半天也没有实质发现。

ROOT DNS、.COM NS 以及目标域名的相关服务器在国外,北京应该没有这么大本事直接去篡改;当局也不可能强制ISP使用DNS CACHE等技术绑架域名,因为我使用的DNS服务器是台北的。那么到底是什么方法实现域名劫持的呢?

Commview 没有什么突破,试试 Ethereal 抓包,结果真有发现!

从截图中,不难发现:

GFW并没有修改或者堵截任何DNS数据包。只是GFW的IDS侦测到DNS数据包中含有关键字,立即伪造一条A记录作为回应,其给出的IP地址应该是一个事先指定的,且不能访问或者已经屏蔽了的地址。NSLOOKUP 其实也是收到了目标域名NS服务器给出的正确回应,只是IDS给出的伪造A记录先于目标域名NS服务器的回应,按照RFC的协议标准,NSLOOKUP 丢弃了后到达的回应包,使用了先到达的IDS伪造的A记录。所以不管是查询MX记录还是SOA记录,返回的都是A记录。

解决此类的域名劫持应该比较简单:在 %SystemRoot%\System32\Drivers\etc\Hosts 中添加一条正确的记录即可。

没有评论: