DNS安全
DNS 安全DNS 欺骗种类1. DNS 欺骗(DNS Spoffing)(1)缓存感染黑客会熟练的使用DNS 请求,将数据放入一个没有设防的DNS 服务器的缓存当中。这些缓存信息会在客户进行DNS
DNS 安全
DNS 欺骗种类
1. DNS 欺骗(DNS Spoffing)
(1)缓存感染
黑客会熟练的使用DNS 请求,将数据放入一个没有设防的DNS 服务器的缓存当中。这些缓存信息会在客户进行DNS 访问时返回给客户,从而将客户引导到入侵者所设置的运行木马的W eb 服务器或邮件服务器上,然后黑客从这些服务器上获取用户信息。
(2)DNS 信息劫持
入侵者通过监听客户端和DNS 服务器的对话,通过猜测服务器响应给客户端的DNS 查询ID 。每个DNS 报文包括一个相关联的16位ID 号,DNS 服务器根据这个ID 号获取请求源位置。黑客在DNS 服务器之前将虚假的响应交给用户,从而欺骗客户端去访问恶意的网站。
(3)DNS 复位定向
攻击者能够将DNS 名称查询复位向到恶意DNS 服务器。这样攻击者可以获得DNS 服务器的写权限。
2. 拒绝服务(Denial of service,DoS )
黑客主要利用一些DNS 软件的漏洞,如在BIND 9版本(版本9.2.0以前的 9系列)如果有人向运行BIND 的设备发送特定的DNS 数据包请求,BIND 就会自动关闭。攻击者只能使BIND 关闭,而无法在服务器上执行任意命令。如果得不到DNS 服务,那么就会产生一场灾难:由于网址不能解析为IP 地址,用户将无方访问互联网。这样,DNS 产生的问题就好像是互联网本身所产生的问题,这将导致大量的混乱。
3. 分布式拒绝服务攻击和缓冲区漏洞溢出攻击(Buffer Overflow)
DDOS 攻击通过使用攻击者控制的几十台或几百台计算机攻击一台主机,使得服务拒绝攻击更难以防范:使服务拒绝攻击更难以通过阻塞单一攻击源主机的数据流,来防范服务拒绝攻击。Syn Flood是针对DNS 服务器最常见的分布式拒绝服务攻击。
Bind 软件的缺省设置是允许主机间进行区域传输(zone transfer)。区域传输主要用于主域名服务器与辅域名服务器之间的数据同步,使辅域名服务器可以从主域名服务器获得新的数据信息。一旦起用区域传输而不做任何限制,很可能会造成信息泄漏,黑客将可以获得整个授权区域内的所有主机的信息,判断主机功能及安全性,从中发现目标进行攻击。
,解决方法
此解决方法是针对于有多个辅助DNS 服务器,防止在主域向辅域传输的时候发生泄露或劫持而使用的,如果是单域是不需要考虑这些的,单域主要考虑的是缓存区感染、信息劫持和缓冲区益出以及分布式攻击或拒绝服务攻击。
缓存区感染和服务器被攻破是可以通过单一独享网段来避免的。
拒绝服务攻击和缓存区溢出漏洞是通过避免BIND 漏洞来避免的现在(2008-5-22日)最新的bind 的版本是9.5.a2
在主从域名服务器之间建立签名
TSIG 技术
DNS 的事务签名分为 TSIG (Transaction Signatures) 与 SIG0 (SIGnature)两种。该如何选择呢? 首先,要先判断客户端与服务器间的信任关系为何,若是可信任者,可选择对称式的 TSIG。TSIG 只有一组密码,并无公开/私密金钥之分;若是非完全信任者,可选择非对称式金钥的 SIG0,虽有公开/私密金钥之分,相对的,设定上也较复杂。至于要选用哪种较适合,就由自己来判断。通常区带传输是主域名服务器到辅助域名服务器。通常在主域名服务器配置文件/etc/named.conf的dns-ip-list 的访问控制列表(ACL ,access control list )会列出一些IP 地址,它们只能为主域进行传输区带信息。一个典型例子如下:
acl “dns-ip-list” {
172.20.15.100;
172.20.15.123;
};
zone “yourdomain.com” {
type master;
file “mydomain.dns”;
allow-query { any; };
allow-update { none; };
allow-transfer { dns-ip-list; }; };
都是黑客会利用IP 欺骗一个DNS 服务器,迫使其进行非法区带传输。TSIG 技术可以进行有效防范。
1、TSIG 技术
交易签章 (TSIGRFC 2845),是为了保护 DNS安全而发展的。从BIND 8.2版本开始引入 TSIG 机制,其验证 DNS 讯息方式是使用共享金钥(Secret Key) 及单向杂凑函式(One-way hash function) 来提供讯息的验证和数据的完整性。主要针对区带传输(ZONE Transfer)
,进行保护的作用,利用密码学编码方式为通讯传输信息加密以保证 DNS 讯息的安全,特别是响应与更新的讯息数据。也就是说在DNS 服务器之间进行辖区传送时所提供保护的机制,以确保传输数据不被窃取及监听。下面以BIND 9.21为例:
首先在开始设置,必须为主域名服务器(master DNS)和辅助域名( slave DNS) 进行时间同步,否则会造成区带传输的失败。可以使用ntp 或者rdate 工具进行服务器时间同步。
假设要限制yourdomain.com 的主域到IP 地址分别是172.20.15.100 (ns1.yourdomain. com) 和 172.20.15.123 (ns2.yourdomain.com). 的两个辅助域名服务器之间进行区带传输。在此将详述 TSIG 的实际操作,可以防止DNS 服务器和黑客的DNS 服务器之间不会发生IP 欺骗。
步骤一:执行 dnssec-keygen function 产生加密金钥,一个为 public key 文件,另一个为 private key 文件:
产生加密金钥:
dnssec-keygen -a hmac-md5 -b 128 -n HOST zone-xfr-key
该文件中公开金钥(public key)是: Kzone-xfr-key. 157 08825.key;私有金钥(priv ate key)是Kzone-xfr-key. 157 08825.private。此时查看文件通常包括以下内容:
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: YH8Onz5x0/twQnvYPyh1qg==
步骤二:使用TSIG 金钥在主域名服务器和辅助域名服务器的设置文件named.conf 设定:
key zone-xfr-key {
algorithm hmac-md5;
secret “YH8Onz5x0/twQnvYPyh1qg==”;
};
步骤三:将下面的声明加入服务器ns1.yourdomain.com 的设置文件/etc/named.conf中:
server 172.20.15.123 {
keys { zone-xfr-key; };
};
步骤四:将下面的声明加入服务器ns2.yourdomain.com 的设置文件/etc/named.conf中:
,server 172.20.15.100 {
keys { zone-xfr-key; };
};
步骤五:为主域名服务器ns1.yourdomain.com 的yourdomain.com 区带的设置文件/etc/named.conf 写入以下配置:
acl “dns-ip-list” {
172.20.15.100;
172.20.15.123;
};
key zone-xfr-key {
algorithm hmac-md5;
secret “YH8Onz5x0/twQnvYPyh1qg==”;
};
server 172.20.15.123 {
keys { zone-xfr-key; };
};
zone “yourdomain.com” {
type master;
file “mydomain.dns”;
allow-query { any; };
allow-update { none; };
allow-transfer { dns-ip-list; };
};
步骤六:为辅助域名服务器ns2.yourdomain.com 的yourdomain.com 区带的设置文件/etc/named.conf 写入以下配置:
acl “dns-ip-list” {
172.20.15.100;
172.20.15.123;
};
key zone-xfr-key {
algorithm hmac-md5;
secret “YH8Onz5x0/twQnvYPyh1qg==”;
};
server 172.20.15.100 {
keys { zone-xfr-key; };
};
,zone “yourdomain.com” {
type master;
file “mydomain.dns”;
allow-query { any; };
allow-update { none; };
allow-transfer { dns-ip-list; };
};
步骤七:再次重新启动主域名服务器和辅助域名服务器。
说明为确保安全性的问题,TSIG 可确认 DNS 之信息是由某特定 DNS Server 所提供。通常TSIG 应用于域名服务器间的区带传输,确保数据不会被篡改或产生 dns spoofing。 步骤八:
验证TSIG 技术是否生效,步骤如下:
删除辅助域名服务器(ns2.yourdomain.com)的区带文件。
重新启动辅助域名服务器。
检查辅助域名服务器的区带文件是否自动建立。辅助域名服务器用来从主服务器中转移一整套域信息。区带文件是从主服务器转移出的,作为磁盘文件保存在辅助域名服务器中。 注意事项:如果为域名服务器配置了TSIG ,那么要确保普通用户不能接触主域名服务器和辅助域名服务器的配置文件/etc/named.conf。另外也不能修改两台服务器的共享的TSIG 密钥
以下的技术是在客户端和DNS 服务器之间建立签名认证的方法。
DNSSEC 技术
DNS 欺骗是对目前网络应用,最大的冲击在于冒名者借着提供假的网域名称与网址的对照信息,可以将不知情用户的网页联机,导引到错误的网站,原本属于用户的电子邮件也可能因而遗失,甚而进一步空开成为阻断服务的攻击。所幸,目前较新的 BIND 版本,针对这一类问题,已经有加入许多改进的方法,不过真正的解决方案,则有赖封包认证机制的建立与推动。DNSSEC 就是试图解决这一类问题的全新机制, BIND9 已经完整加以设计并完成。DNSS EC 引入两个全新的资源记录类型:KEY 和SIG ,允许客户端和域名服务器对任何DNS 数据的来源进行密码验证。
,DNSSEC 主要依靠公钥技术对于包含在DNS 中的信息创建密码签名。密码签名通过计算出一个密码hash 数来提供DNS 中数据的完整性,并将该hash 数封装进行保护。私/公钥对中的私钥用来封装hash 数,然后可以用公钥把hash 数译出来。如果这个译出的hash 值匹配接收者刚刚计算出来的hash 树,那么表明数据是完整的。不管译出来的hash 数和计算出来的hash 数是否匹配,对于密码签名这种认证方式都是绝对正确的,因为公钥仅仅用于解密合法的hash 数,所以只有拥有私钥的拥有者可以加密这些信息。下面我们看看如何为名称是domain.com 的域建立DESSEC 配置。
步骤一:为 domain.com 域建立一对密钥。在 /var/named 目录下,使用命令: “/usr/local/sbin/dnssec-keygen -a DSA -b 768 -n ZONE domain.com” 这个命令产生一对长度768位DSA 算法的私有密钥(Kdomain.com. 003 29462.private)和公共密钥(Kdomain.co m. 003 29462.key)。其中29462称作密钥标签( key tag)。
步骤二:使用命令:“ /usr/local/sbin/dnssec-makekeyset -t 3600 -e now 30 Kdomain.com. 003 29462“建立一个密钥集合。该命令以3,600 seconds 的生存时间(time-to-live )建立密钥集合,有效期限三十天,并且创建一个文件:domain.com.keyset 。
步骤三:使用命令“ /usr/local/sbin/dnssec-signkey domain.com.keyset Kdomain.com. 003 29462 “为密钥集合签字。然后建立一个签字文件:domain.com.signedkey 。 步骤四:使用命令 “/usr/local/sbin/dnssec-signzone -o domain.com domain.db command , where domain.db ”为区带文件签字。然后建立一个签字文件: domain.db.signed。
步骤五:替换 配置文件/etc/named.conf中 domain.com的区带文件部分。清单如下:
zone “domain.com” IN {
type master;
file “domain.db.signed”;
allow-update { none; }; };
从上面的配置过程我们也看到DNSSEC 的一些缺点:
除了配置负责,还有标记和校验DNS 数据显然会产生额外的开销,从而影响网络和服务器的性能。签名的数据量很大,这就加重了域名服务器对互联网骨干以及一些非骨干连接的负担。产生和校验签名也占用了很多中央处理器的时间。有时候,不得不把单处理器的DNS 服务器换成多处理器的DNSSEC 服务器。签名和密钥占用的磁盘空间和RAM 容量达到它们表示的数据所占容量的10倍。同时数据库和管理系统也不得不进行相应的升级和扩容。
总结:域名系统的配置和管理是一项比较复杂和繁琐的系统管理任务,它对整个网络的运行影响极大。为了保证DNS 服务器的安全运行,不仅要使用可靠的服务器软件版本,而且要对DNS 服务器进行安全配置,本文介绍了TISG 和DNSSEC 技术有助于减少 DNS Spoofing 攻击的发生,增进网络使用者对因特网使用的信任,杜绝信息系统遭受入侵与攻击的产生。
,DNS 的CHROOT 的安装方式
一.bind-chroot 介绍
DNS 是一种将域名解析为IP 地址的服务. 如:
www.turbolinux.com.cn
通过DNS 解析, 可以
得到210.77.38.126.
bind 是linux 的DNS 服务器程序.bind-chroot 是bind 的一个功能, 使bind 可以在一个 chroot 的模式下运行. 也就是说,bind 运行时的/(根) 目录, 并不是系统真正的/(根) 目录, 只是 系统中的一个子目录而已. 这样做的目的是为了提高安全性. 因为在chroot 的模式下,bind 可以 访问的范围仅限于这个子目录的范围里, 无法进一步提升, 进入到系统的其他目录中.
二.bind-chroot 的安装
1.rpm 包
在GTES10,10.5,11中, 都已包含有bind-chroot 包, 可以直接安装相应rpm 包.
# rpm -ivh bind-chroot.xxx.rpm
2. 源码包安装
源码下载地址:
以bind-9.4.1-P1版本为例.
# tar zxvf bind-9.4.1-P1.tar.gz
# cd bind-9.4.1-P1
# ./configure
# make
# make install
三.bind-chroot 的使用
1.rpm 包方式
在GTES 11上, 如果已经安装了bind-chroot 的包, 则bind 的默认启动方式就是chroot 方式. # /etc/init.d/named start
# ps -ef | grep named
named 2090 2613 1 0 07:49 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot
2. 源码包方式
使用源码包安装完成bind 后, 使用下面步骤进行配置:
建立named 用户
# useradd named
建立chroot 后所需的目录和文件
# mkdir -p /var/named/chroot/etc
# mkdir /var/named/chroot/dev
# mkdir -p /var/named/chroot/var/named/data
# mkdir -p /var/named/chroot/var/run
# cp /var/named/* /var/named/chroot/var/named/
# cp /etc/rndc.key /var/named/chroot/etc/
建立chroot 后, 所需的设备文件
# cd /var/named/chroot/dev
,# mknod null c 1 3
# mknod random c 1 8
# mknod zero c 1 5
# chmod 666 null random
# chown -R named.named /var/named /var/run
建立named.conf 配置文件
# vi /var/named/chroot/etc/named.conf
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
// query-source address * port 53;
};
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { 127.0.0.1 ; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
,};
zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};
include "/etc/rndc.key";
启动bind
# /usr/local/sbin/named -u named -t /var/named/chroot
# ps -ef | grep named
named 15739 1 0 08:27 ? 00:00:00 /usr/local/sbin/named -u named -t /var/named/chroot
现在bind 已经运行在chroot 模式下了.
DNS 欺骗(DNS Spoofing):主要有以下三种形式。①攻击者在自己的主机上安装网络侦听器,劫持域名查询请求,然后假冒DNS 的响应,返回一个错误解析地址,使发出该域名查询请求的客户机得到一个错误的解析地址;②攻击者通过污染DNS 的缓冲区(DNS Cache Poisoning )将D N S 高速缓存内的信息修改。由于D N S 的解析过程是先从本地的缓存中查找要求解析的域名的IP 地址,当本地的缓存内的信息被修改后,就会将一个被篡改后的IP 地址发送给请求者,使请求者得到一个错误的解析地址。③攻击者侵入操作系统,获得管理员权限,直接修改DNS 数据文件。针对域名服务器的拒绝服务(DoS )攻击:这种攻击主要有二种,一种是利用DNS 软件本身的漏洞(如:UNIX 下使用BIND ,存在ZXFRBUG 、S R V B U G、S V G D I V E B U G 等)进行攻击;另一种是用户端泛滥,攻击者仿造源地址,产生一个查询请求,使域名服务器忙于应付大量的无效回应,而无法处理正常的用户请求。利用区传输造成DNS 信息泄密:名字
,服务器通常含有域名空间中某一部分的完整信息,这一
部分称为区。区的内容是从文件或其它名字服务器中加载过来的。在加载的过程中,黑客可以劫获传输的内容,造成整个区域的信息泄露,同时在加载的过程中,也会增加服务器的负载。一旦DNS 系统被攻击成功, 入侵者就会删除日志文件,销毁自己可能暴露的蛛丝马迹,然后在DNS 系统中安装程序,通过运行它获得管理员权限,同时开始向外进行扫描,在几分钟内就可发现大量的存在相同漏洞的服务器,并可对之重复上述攻击,如此反复,后果不堪设想
避险的方法:
1.防止单点故障:为每个域提供多台域名服务器,不要将所有的域名服务器放在同一个子网中,将所有的域名服务器分别放在不同的路由器后面;所有的域名服务器不要使用同一条线路,避免因线路问题使所有的DNS 瘫痪;及时备份域名服务器,尽量将多个域名服务器运行在不同的操作系统上。限制区域传输:区传输会暴露整个区域的信息并加重服务器负载,所以应该严格限制区传输,防止黑客列举区中的信息,了解网络中的主机数目、机器型号和用途。
2. 专用D N S 服务器:在D N S 服务器上不要提供其它服务,如W W W 、E M A I L 等。对外只开放UDP53 和TCP53 端口,配置