2009年7月15日星期三

国外DNS服务器的域名劫持

  有人发现,使用国外的OpenDNS依旧无法解决部分域名被错误解析的问题,这个现象我在07年10月份也发现过,当时得出的结论是,即使用OpenDNS也不能完全解析出全部正确的域名,只能解析正确一部分,对于另一些域名(例如域名被加入关键字过滤)则无法正确解析。

  我估计的原因还是和入侵检测系统(IDS)有关,也就是说IDS监控了DNS的端口号(53),其工作原理应该和监控HTTP端口(80)类似,当IDS监控到该端口数据包中有某个关键字的时候,对于HTTP协议是发送一个RESET信号,让客户端浏览器“连接被重置”,而DNS解析不存在客户端浏览器问题,因此IDS可能伪造了一个假的DNS解析结果,替换掉原有的解析结果,从而使得OpenDNS等国外域名解析服务器也无法正确解析某些域名。

  这个问题的最根本原因,在于DNS的安全性没有得到足够的重视,使得DNS存在很多安全隐患,如果DNS通讯过程之中,使用了加密传输的方法,类似https那样,传输前加密,接收时解密,那么攻击和篡改DNS的难度就增大了很多,这样的DNS系统就较难再被劫持了。

  目前针对DNS劫持的解决方法并不太多,大概只能使用一份越来越大的本地hosts文件来应付了。