Fancy Blog

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

有关DNS的几个安全性问题

作者:demonalex

在TCP/IP架构中最不安全的莫过于应用层的数据安全了,什么程序/操作系统远程缓冲区溢出、脚本注入都发生在这一层,知道它如何不安全了吧?!今天我想谈谈的也是在这一层的、与各位日常的网迷们息息相关的协议----DNS服务的安全性问题。

最近总结出的有四种出于DNS服务而考虑的安全问题。
1)named服务程序本身的缺陷问题
2)区域文件泄露问题
3)DNS抑制
4)本地DNS文件欺骗
上述的第一、二种威胁是针对DNS服务器,而三、四种则属于针对DNS客户端的。

named服务程序本身的缺陷主要是指该服务的开发者在开发的阶段因为不注意而导致该服务在应用层方面出现类型缓冲区溢出导致攻击者得到ROOTSHELL或D.o.S导致服务或系统出错瘫痪之类的问题,相关缺陷的详细资料可以查阅当地的cert网站。勤加补丁或升级named服务程序是针对这个问题的最佳解决方法了。

区域文件泄露的问题很久以前就出现的了。状态是当客户端使用类似nslookup这样的工具更换主查询DNS服务器以后,该主服务器会以为客户端是本地的从DNS服务器,从而允许客户端查询整个DNS区域文件的内容的。下面是一个典型例子(/**/为解说部分):
------------------------------------------------------------------------------------------------------
C:\>nslookup
Default Server: tempdns2.guangzhou.gd.cn
Address: 61.144.56.101

> set q=all                          /*这里设置查询为全部*/
> super1.com.cn
Server: tempdns2.guangzhou.gd.cn
Address: 61.144.56.101

Non-authoritative answer:
super1.com.cn
    primary name server = ns.xinnetdns.com        /*在这里得到了该域的主域名服务器地址*/
    responsible mail addr = hostmaster.xinnetdns.com
    serial = 1090836369
    refresh = 3600 (1 hour)
    retry   = 1800 (30 mins)
    expire = 604800 (7 days)
    default TTL = 7200 (2 hours)
super1.com.cn   MX preference = 10, mail exchanger = newmail-g1.xinnetdns.com
super1.com.cn   internet address = 210.51.170.68
super1.com.cn   nameserver = ns.xinnetdns.com
super1.com.cn   nameserver = ns.xinnet.cn

super1.com.cn   nameserver = ns.xinnet.cn
super1.com.cn   nameserver = ns.xinnetdns.com
newmail-g1.xinnetdns.com     internet address = 210.51.172.171
newmail-g1.xinnetdns.com     internet address = 210.51.172.172
newmail-g1.xinnetdns.com     internet address = 210.51.172.173
newmail-g1.xinnetdns.com     internet address = 210.51.172.174
ns.xinnet.cn   internet address = 202.106.124.195
ns.xinnetdns.com     internet address = 210.51.170.66
> server ns.xinnetdns.com                         /*使用server命令切换主查询服务器*/
Default Server: ns.xinnetdns.com
Address: 210.51.170.66

> ls super1.com.cn                      /*向主服务器查询该区的内容*/
[ns.xinnetdns.com]
super1.com.cn.           NS   server = ns.xinnetdns.com
super1.com.cn.           A     210.51.170.68
super1.com.cn.           NS   server = ns.xinnet.cn
>
------------------------------------------------------------------------------------------------------
看看,上面立即就返回区文件的内容(FQDN、DNS记录类型对应地址)。但大多的DNS服务器都会作这类型的限制以防止信息泄露的,如:
------------------------------------------------------------------------------------------------------
C:\>nslookup
Default Server: tempdns2.guangzhou.gd.cn
Address: 61.144.56.101

> set q=all
> demonalex.net
Server: tempdns2.guangzhou.gd.cn
Address: 61.144.56.101

Non-authoritative answer:
demonalex.net   nameserver = ns1.dns-diy.com
demonalex.net   nameserver = ns2.dns-diy.com

demonalex.net   nameserver = ns2.dns-diy.com
demonalex.net   nameserver = ns1.dns-diy.com
ns1.dns-diy.com internet address = 210.51.187.81
ns2.dns-diy.com internet address = 218.107.207.123
> server ns1.dns-diy.com
Default Server: ns1.dns-diy.com
Address: 210.51.187.81

> ls demonalex.net
ls: connect: No error
*** Can't list domain demonalex.net: Unspecified error
>
------------------------------------------------------------------------------------------------------
不要小看上面的这个实验所得到的信息,有时它能为你拿到第一手的审计资源主机/分布信息。限制这类型渗透的方法大多是使用“从DNS服务器IP限制”与“加密信道通信限制”来解决。

DNS抑制(DNS poisoning)属于中间人攻击的一种欺骗性质的附属攻击。你可以在使用ARP cache poisoning攻击后通过此攻击来实现欺骗的目的(关于ARP压抑+DNS压抑的工具“CAIN”的具体操作方法我将在后面的操作文中具体介绍一下)。说说原理吧,首先我们需要成功地通过“中间人攻击”劫持到一段P2P的会话(ARP缓存压抑攻击是最好的方法了),然后再通过一个“DNS包改装器”对被攻击的客户端的DNS查询请求进行处理,最后返回恶意修改后的DNS请求给被攻击的客户端DNS插件,这样就能完成一次完美的DNS压抑欺骗过程了。关于如何防止这类型攻击最好的方法就是使用加密信道或在内网的中央数据交换机上加入“ip地址<=>mac地址”的绑定策略。

本地DNS文件欺骗可以说是近年来最热的针对客户端的攻击方式了。经常有朋友问我是否某个网站被黑了或者改版了?(其实没有)或者问为什么经常中脚本木马,杀了又来等等的问题。如果你确认没有被DNS抑制的话很有可能你已经被本地DNS欺骗了。本地DNS欺骗?难道是自己欺骗自己不成?!说说原理吧:其实这些攻击的途径莫过于欺骗被攻击者浏览某个加入脚本的网站(或者其他类似的方法,如加入脚本在编译后的CHM中),修改本地DNS对照表文件hosts(%systemroot%\system32\drivers\etc\hosts)的对应值,打个比方:
默认hosts只有一条关于“环回地址”的记录:
127.0.0.1     localhost
但若我们加一条
127.0.0.1     www.163.com
的记录在下面的话就...我们测试一下效果吧,保存hosts文件,然后在nslookup下:
------------------------------------------------------------------------------------------------------
C:\>nslookup
Default Server: tempdns2.guangzhou.gd.cn
Address: 61.144.56.101

> www.163.com
Server: tempdns2.guangzhou.gd.cn
Address: 61.144.56.101

Non-authoritative answer:
Name:   www.163.com
Addresses: 202.108.36.155, 202.108.36.156, 202.108.36.167, 202.108.36.172
      202.108.36.196, 202.106.168.103, 202.106.168.104, 202.106.168.109, 202
.106.168.121
      202.108.36.153

>
------------------------------------------------------------------------------------------------------
没变化,可以说明DNS测试没问题了吧?!试试用IE来浏览一下http://www.163.com试试,嘿嘿...
------------------------------------------------------------------------------------------------------
C:\>netstat -an|find "TCP"
TCP   0.0.0.0:80         0.0.0.0:0         LISTENING
TCP   0.0.0.0:135         0.0.0.0:0         LISTENING
TCP   0.0.0.0:1025       0.0.0.0:0         LISTENING
TCP   0.0.0.0:1485       0.0.0.0:0         LISTENING
TCP   127.0.0.1:80       127.0.0.1:1485       ESTABLISHED
TCP   127.0.0.1:1485       127.0.0.1:80       ESTABLISHED
TCP   192.168.1.5:139     0.0.0.0:0         LISTENING
------------------------------------------------------------------------------------------------------
这实验的结果告诉我们:%systemroot%\system32\drivers\etc\hosts的作用级要比DNS的作用级要高,因此就算你的DNS没有问题的话hosts这个文件被恶意修改的话一样有被攻击的可能的。解决的方法是:将%systemroot%\system32\drivers\etc\hosts这个文件的属性设置为“只读”,这样就能防止大多数这类型的攻击了。

posted on 2005-01-03 11:46  F4ncy Blog  阅读(1220)  评论(0编辑  收藏  举报