DNS的发展及其安全问题 许忠英 2000年 第31期   DNS(Domain Name System域名系统)在Internet的蓬勃发展中起了非同寻常的作用——现在上网,只需输入域名,就可登录你想去的网站,而不必像在网络初发展时,要键入xxx.xxx.xxx.xxx这样长串的IP地址。这种有自己的名字、人性化的IP网址让许多普通的人很容易就记住网站,从而接近了Internet。   DNS的发展可以追溯到1980年,那时Internet尚不普及。在当时的Internet上,主机的名称和它所对应的IP地址被放在一个称为Hosts的文件中。随着Internet的发展,其所连结的主机数增加非常快,使得这种以Hosts文件为主的管理方式变得越来越难以维护。于是DNS的解决方案就在这时候被提出。当时首先对DNS表示支持的就是美国国防部,后来,美国的一些在计算机领域较领先的学校和公司,如柏克莱大学、加州大学、数据电脑公司等都对DNS给予了支持。   DNS之所以立刻为大家所接受的原因,在于它是人性化的IP地址。DNS名称的前两位是由Network Solutions控制,第一位包含类似gov、com、edu这样的缩写,第二位包含的就是机构名称,例如whitehouse.gov、microsoft.com等。这种方式的使用,让人们可以容易地记住网址。   然而,由于几乎所有的网络应用程序设计都具有时代的烙印,而在那时候的网络安全并不是一个非常重要的课题,因此,在设计DNS时自然也未将这个问题考虑进去。于是,现在便有一些黑客利用特殊程序进入DNS的资料库,找寻他们感兴趣的东西。   现在每一个domain zone(域名区)的DNS server(域名服务器)几乎都有两个,其中一个通常是该zone(区域)的primary DNS server(主域名服务器),其它的大多为secondary DNS server(从域名服务器)。一个secondary DNS server通常通过UDP包、利用端口53来向primary DNS server更新该区域的资料,这个过程称为“zone transfer(区域传送)”。在zone transfer中,TCP的连接是由primary DNS server负责建立的,有些黑客便利用这种zone transfer的方式,从SOA(Start of Authority)取得各种机密资料。因此,一些比较机灵的管理员会将zone transfer设定在secondary DNS server上,这样外来者就不容易取得primary DNS server的资料了。   保护主机的另一个方法,就是将你的主机名以不规则名称命名或是用乱数命名。例如你可以将你的Hp UNIX server命名为th25230,这样即使黑客取得了zone资料,也不知道哪一个主机才是值得攻击的。但是管理员必须要有一本账来记住哪一个主机用哪一个主机名,大多数企业都不愿意这样做——因为这种作法会增加管理的困难,假如有一天网络管理员离职了,新任管理员必然对这些主机感到非常头痛。   现在一些比较新版的应用程序可以杜绝黑客利用zone transfer来读取区域主机的资料,例如BIND 8.1.2(for Unix)就可以对一些zone的列表存取设下限制。不过如果你有防火墙的话,就可以利用防火墙对DNS做更多补充措施,例如保护内部网络比较重要的主机不随便被外界存取,甚至不允许外界直接存取,并把一些比较重要的内部网络地址隐藏起来。但是要这样做之前,你必须要先确认一下该防火墙是否支持NAT(Network Address Translation)的功能。如果你的防火墙是包过滤且不支援NAT的话,那这种防火墙将无法保护你的DNS讯息——因为它采取TCP的连接方式,所以当你和Internet上任一部其它主机连线时,你的DNS讯息就可以被任一个系统读取。   并不是每一个防火墙供应商都能好好地处理有关DNS方面的问题,甚至有些防火墙还未把DNS的安全问题考虑进去,因此在选购防火墙时要特别注意这一点。一般说来,53端口是给DNS使用的,但如果你的系统不用作DNS service,那你可以将此端口转给其它服务器使调用,这就成为了黑客攻击的途径之一——对那些没有考虑DNS安全的防火墙来说,53端口就相当于防火墙的后门。某些防火墙就允许各种包自由通过此端口。而要预防53端口成为黑客进入的通道有两个简单的方法:其一是阻断此端口,改由其它受保护的端口进行服务,二是设下存取DNS的条件。有一种被称为“port scanner(端口扫描)”的黑客入侵方式,就是利用未被保护的端口来进行攻击。   一些早期的DNS服务器对一些DNS的回应是来者不拒。它们将这些讯息存放在缓存(cache)中,换句话说,如果黑客传送的DNS回应是假的,那么这些服务器依旧会将这些讯息存到缓存中,而当有客户对这类假讯息提出某些要求时,黑客就可以知道该DNS服务器缓存中的一些资料了。比较早期的Windows NT系统、Unix或是Linux系统都发生过这种情况。因此,要保护DNS的方法最基本的还是得从认证与存取授权方面着手,并对DNS用来通讯的53端口进行监督或是限制存取,这样才能确保你的网络主机资料不会外泄。