DNS域欺骗攻击详细教程之Linux篇

标签: dns 欺骗 攻击 | 发表时间:2014-01-14 00:08 | 作者:lanxuezaipiao
出处:http://blog.csdn.net

一、DNS域欺骗攻击原理

DNS欺骗即域名信息欺骗是最常见的DNS安全问题。当一个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了。DNS欺骗会使那些易受攻击的DNS服务器产生许多安全问题,例如:将用户引导到错误的互联网站点,或者发送一个电子邮件到一个未经授权的邮件服务器。


二、DNS域欺骗攻击实现步骤

1.配置实验环境;

2.假设攻击者已经侵入受害者机器实施攻击;

3.使用嗅探进行DNS ID欺骗;

4.DNS通配符攻击。


我们需要像图1那样设置实验环境。为简化,我们让用户计算机、DNS服务器和攻击者计算机位于同一物理机器上,但是使用不同的虚拟机,网页可以是任意网页。


图1 实验环境

本次实验中,DNS Server部署在Fedora 17(192.168.1.137)上,Attacker系统为SeedUbuntu 11.04(192.168.1.141),User系统为Redhat 9.0(192.168.1.128),网页选择为www.example.com。下面介绍如何在Fedora 17和SeedUbuntu 11.04上安装BIND9 DNS软件,如何设置example.com域及其子域。应当指出的是,example.com的域名是被保留用于文件的,不属于任何人,所以使用它不必担心重名。

   注意:如果没有这些虚拟机系统可以用自己的环境,如两个Ubuntu和一个Windows XP或7,这样下面针对Fedora的DNS配置可省略不看。


2.1 配置实验环境

2.1.1 在Fedora 17上配置DNS服务器

使用BIND 9软件包作为DNS服务器,具体配置步骤如下:

1)安装DNS服务器:#yum install bind9

查看安装后的相关软件包信息:$ rpm – qa bind

查看端口是否已启动:$ netstat – tunlp | grep 53

 

图2 安装bind 9

 

2)创建域。修改DNS主配置文件/etc/named.conf,用以下内容创建一个名为example.com的域和名为1.168.192.in-addr.arpa的域。注意,我们以192.168.1.x为例,如果你使用了不同的IP地址,需要修改/etc/named.conf及相应的反向DNS查找文件。

zone "example.com" {

    type master;

    file "/var/named/example.com.db";

};

zone "1.168.192.in-addr.arpa"{

    type master;

    file "var/named/rev.1.168.192.in-addr.arpa";

};


3)设置正向域文件。在/var/named目录下,编写如下的example.com.db域文件:

@ IN SOA ns.example.com.admin.example.com.(

13070201 ; Serial

28800 ; Refresh

3600 ; Retry

604800 ; Expire

38400) ; Negative Cache TTL

example.com. IN NS ns.example.com.

example.com. IN MX 10 mta.example.com.

www IN A 220.181.111.86 ; modify this IP addressaccordingly

mta IN A 192.168.1.137 ; modify thisIP address accordingly

ns IN A 192.168.1.3 ; modify thisIP address accordingly

*.example.com. IN  A 173.194.72.141 ; modify this IP addressaccordingly


图3 example.com.db域文件

 

4)设置DNS反向查找文件。在/var/named目录下,编辑一个名为rev.1.168.192.in-addr.arpa的反向DNS查找域文件:

@ IN SOA ns.example.com.admin.example.com.(

13070202;

28800;

604800;

604800;

86400 )

@   IN NS ns.example.com.

137 IN PTR example.com.


图4 rev.1.168.192.in-addr.arpa域文件

 

5)转发DNS请求。局域网中的本地DNS服务器往往分程传递DNS请求,它们不能解析外部DNS。我们将我们的DNS服务器配置为只解析example.com,让外部的DNS服务器解析其它请求。这需要附加以下行到/etc/named.conf来实现。本例中,DNS服务器从一个客户端到另一个DNS服务器202.38.64.1分程传递DNS请求。

options {

    forwarders {

    202.38.64.1;

    }

};

 

6)启动DNS服务器并查看启动named服务的日志。

启动DNS服务器的方式有下面几种:

# /usr/sbin/named -u named

# service named start

# /etc/inti.d/named start

 

查看启动named服务的日志:

# tail /var/log/messages

图5 启动named服务日志

从中可以看出我们启动named服务成功。如果启动失败,可在此找到失败的详细原因以供我们排查。


2.1.2 在SEEDUbuntu上配置DNS服务器

1)安装DNS服务器:#sudo apt-get install bind9

查看安装后的相关软件包信息:# sudo dpkg – lbind9

查看端口是否已启动:# netstat – tunlp | grep 53

注意:若/etc下有bind文件,则表示bind9已经安装过,不用重新安装或用dpkg -lbind来查看是否安装了该软件包。

图6 安装DNS Server

 

在DNS Server下的配置文件主要有:(在/etc/bind/下)

/etc/bind/named.conf.local          //本地文件

/etc/bind/named.conf.options        //全局设置

/etc/bind/named.conf.default-zone    //添加或删除zone的配置

/etc/bind/db.127                  //本机反解

/etc/bind/db.local                 //本机正解

 

2)创建域。修改DNS主配置文件/etc/bind/named.conf,用以下内容创建一个名为example.com的域和名为1.168.192.in-addr.arpa的域。注意,我们以192.168.1.x为例,如果你使用了不同的IP地址,需要修改/etc/named.conf及相应的反向DNS查找文件。

zone "example.com" {

    type master;

    file "/etc/bind/example.com.db";

};

zone "1.168.192.in-addr.arpa"{

    type master;

    file "/etc/bind/rev.1.168.192.in-addr.arpa";

};


3)设置正向域文件。在/etc/bind目录下,编写如下的example.com.db域文件:

@ IN SOA ns1.example.com.admin.example.com.(

13070201 ; Serial

28800 ; Refresh

3600 ; Retry

604800 ; Expire

38400) ; Negative Cache TTL

example.com. IN NS ns1.example.com.

example.com. IN MX 10 mta.example.com.

www IN A 220.181.111.86 ; modify this IP addressaccordingly

mta IN A 192.168.1.141; modify thisIP address accordingly

ns1 IN A 192.168.1.3 ; modify thisIP address accordingly

*.example.com. IN  A 220.181.111.86 ; modify this IP addressaccordingly

图7 example.com.db域文件

 

4)设置DNS反向查找文件。在/etc/bind目录下,编辑一个名为rev.1.168.192.in-addr.arpa的反向DNS查找域文件:

@ IN SOA ns1.example.com.admin.example.com.(

13070202;

28800;

604800;

604800;

86400 )

@   IN NSns1.example.com.

141 IN PTR example.com.

图8 rev.1.168.192.in-addr.arpa域文件

5)转发DNS请求。局域网中的本地DNS服务器往往分程传递DNS请求,它们不能解析外部DNS。我们将我们的DNS服务器配置为只解析example.com,让外部的DNS服务器解析其它请求。需要附加以下行到/etc/named.conf.options来实现。本例中,DNS服务器从一个客户端到另一个DNS服务器202.38.64.1分程传递DNS请求。

forwarders {

    202.38.64.1;

};

 

6)启动DNS服务器及查看启动日志以便排错。

启动DNS服务器的方式有下面几种:

# /usr/sbin/named -u bind

# service bind9 start

# /etc/inti.d/bind9 start

查看启动bind服务的日志:

# tail /var/log/syslog

图9 启动DNS服务及启动日志

从中可以看出我们启动bind服务成功。


2.1.3 在服务器即本机(192.168.1.137)上进行测试

以Fedora为例进行测试,SeedUbuntu测试方法一样。

1)让DNS服务器能监听到本机端口,在/etc/named.conf的options选项listen-on port 53里添加本机IP,即192.168.1.137或直接改为any,然后将allow-query改为any即可,如下图所示:

图10 DNS Server监听本机端口

 

2)设置本机DNS服务器如下:

# vi /etc/resolv.conf

在首行添加一项:nameserver 192.168.1.137(DNS Server IP)

图11 设置本机DNS Server

然后ping www.example.com,应该可以看到ping包将前74.125.31.99。

图12 ping www.example.com结果

 

2.1.4 在客户机即用户机器(192.168.1.128)上进行测试

1)让DNS服务器能监听到客户机端口

    Fedora中,在/etc/named.conf的options选项listen-on port 53里添加该机IP,即192.168.1.128,然后将allow-query改为any即可,设置成功后一定要重启named服务,如图13。

图13 DNS Server监听客户机端口

 

2)设置客户机DNS服务器

    在客户机Redhat的文件/etc/resolv.conf里添加下面几行:

 

图14 设置客户机DNS服务器

设置好了pingwww.example.com,结果如下图所示:

图15 ping www.example.com结果


2.2 假设攻击者已经侵入受害者机器

    如果攻击者已经成功入侵受害者机器,这时可以通过下面两种方式来进行DNS欺骗攻击。

2.2.1 修改HOSTS文件

    HOSTS文件(/etc/hosts)里的主机名和IP地址对用于本地查找,它们优先于远程DNS查找。例如,如果用户计算机的HOSTS文件里有一个地址对“192.168.1.200  www.example.com”,则不用询问DNS服务器,这台机器上www.example.com将被解析为192.168.1.200。

如果攻击者已经侵入一台用户机器,每当用户试图访问www.example.com时,他们可以修改HOSTS文件来误导用户到另一个恶意网站,方法如下:

1)首先使用ssh登录到远程机器,获得root权限。

图16 ssh远程登录

2)修改HOSTS文件。

    这里以重定向到google网站为例,使用IP地址173.194.72.99,然后远程修改HOSTS文件,在里面添加下面一项:

173.194.72.99  www.example.com

图17 修改HOSTS文件

    此时在用户机器上ping www.example.com发现IP地址已改变,去浏览器输入www.example.com发现立即重定向到Google网站。

图18 IP地址重定向

 

2.2.2 修改网络配置文件resolv.conf

    当配置一台计算机的网络时,我们需要明确告诉机器DNS服务器在哪。这要通过DNS网络设置来实现。在Linux中,设置保存于/etc/resolv.conf文件。假设你已经侵入了一台机器,可以使用这项技术重定向这台机器的DNS请求到你的DNS服务器。具体步骤如下:

1)首先ssh登陆到用户机器,然后往/etc/resolv.conf写入一行:

nameserver 192.168.1.141;其中192.168.1.141是你的DNS服务器。


图19 向resolv.conf写入内容

然后再dig www.example.com 发现DNS Server和IP地址已经改变成攻击者的DNS和设置好的IP,如下图所示:

图20 DNS Server和IP地址改变

 

注意:如果用户机器为Ubuntu或Fedora,每次重启网络都会重写文件resolv.conf,这意味着这次攻击成功,下次用户重启网络或机器后,你写入的信息就不在了,为了使resolv.conf文件不被重写,下面给出Ubuntu和Fedora这两种用户环境下的方法:

(a)Ubuntu:停止network manager服务,防止其在启动时重写/etc/resolv.conf文件,具体方法:

$ sudo servicenetwork-manager stop ;立即停止network manager服务

$ sudo vi/etc/init/network-manager.conf ;永久停止network manager服务

注释掉start on的部分即可

 

(b)Fedora:停止使用networkmanager服务,具体方法:

# vi /etc/sysconfig/nework-scripts/ifcfg-eth0

图21 ifcfg-eth0文件内容

 

NM_CONTROLLED = no 表示不由NetworkManager接管。 

此时再去/etc/resolv.conf发现以前的信息全部没有了,可以添加自己固定的nameserver,重启网络后不会被重写。如果用户机器为Redhat则不需要改动,因为Redhat未使用NetworkManager服务,所以resolv.conf文件不会被重写。

 

2.3 使用嗅探进行DNS ID欺骗

    在本攻击中,受害者的机器还没有被入侵,所以攻击者不能在其机器上重定向DNS请求过程。然而若攻击者和受害者处于同一本地局域网,他们仍然可以造成巨大的破坏。当一个用户在web浏览器键入一个网址,如www.chase.com,用户的机器将向DNS服务器发出一个DNS请求来解析主机名的IP地址。当监听到这个DNS请求,攻击者将编造一个假的DNS应答。一个假的DNS应答如果符合以下标准将会被用户机接受:

1、源IP地址必须与DNS请求被送往的IP地址相匹配

2、目的IP地址必须与DNS请求送来的IP地址相匹配;

3、源端口号(UDP端口)必须与DNS请求被送达(通常是53号端口)的端口号相匹配;

4、目的端口号必须与DNS请求送来的端口号相匹配;

5、UDP校验和的计算必须正确无误;

6、传输ID必须与DNS的传输ID相匹配;

7、答复询问部分的域名必须与请求询问部分的域名匹配;

8、答复部分的域名必须与DNS请求询问部分的域名匹配;

9、用户电脑必须在收到合法的DNS响应之前收到攻击者的DNS应答。

满足了1到8的条件,攻击者就可以嗅探到受害者发送的DNS请求信息,然后就可以创建 一个伪造的DNS响应,在真正的DNS服务器响应之前,发送给受害者。Netwag tool 105工具提供了执行嗅探和响应的应用。首先在终端下输入netwag打开工具,然后进行如下配置:

图22 netwag tool105配置

 

    配置成功后点击右下角的“Run”按钮即可监听受害者机器向自己DNS服务器发送的数据包并发送自己伪造的DNS包,这样等一小段时间再nslookup www.example.com发现此网站本来的IP地址已经改变成攻击者伪造的IP,表示DNS欺骗成功。

图23 DNS ID欺骗成功

注意:在发送自己伪造数据包的过程中可能因为网络传输延迟等的影响,条件9并不是每次都满足,即并不是每次都欺骗成功,所以受害者每次打开www.example.com网站可能是原来的网站也可能是伪造的网站。


2.4 DNS通配符攻击

    DNS通配符是DNS配置文件中的特殊表项,用来处理容器名称解析。例如,下面的表项就是一个通配符入口:

*.example.com. IN A 128.230.212.170 ;modify IP address as required

example.com域中所有的主机名,例如,www.mybank.com.pharmer.example.com,如果没有更好的匹配,将被映射到128.230.212.170,在本次攻击中,攻击者向受害者发出一个很长的URL,就如上面用到的那个。受害者通常被这个URL的第一部分所欺骗,那是一个真正的网站名字。然而,如果受害者点击此链接,DNS请求将发往攻击者的DNS服务器,会返回一个恶意网站的IP地址。攻击者将使虚假网页看起来和来自www.mybank.com的一样,如果受害者输入密码,他们的密码将暴露给攻击者。使用DNS通配符配置,攻击者可以构建许多不同的误导URL。具体操作如下:

1)在入侵者成功入侵到用户机器后,首先修改/etc/resolv.conf文件,使用户的DNS服务器重定向到攻击者的DNS服务器,如下图所示:

图24 重定向DNS服务器

然后在攻击者的DNS服务器的配置文件example.com.db里添加一行

*.example.com. IN A 173.194.72.147 ;

其中173.194.72.147是你自己恶意网站的IP,然后给用户发送一个较长的看起来像真实URL的伪造URL,如:www.mybank.com.pharmer.example.com,将会被映射到事先设置好的173.194.72.147上,如下图:

图25 添加通配符项

图26 伪造URL映射成功


三、DNS的防范方法

  防范方法其实很简单,总结来说就只有两条:

(1) 直接用IP访问重要的服务,这样至少可以避开DNS欺骗攻击。但这需要你记住要访问的IP地址。

(2) 加密所有对外的数据流,对服务器来说就是尽量使用SSH之类的有加密支持的协议,对一般用户应该用PGP之类的软件加密所有发到网络上的数据。只要能做到这些,基本上就可以避免DNS欺骗攻击了。


作者:lanxuezaipiao 发表于2014-1-13 16:08:40 原文链接
阅读:65 评论:0 查看评论

相关 [dns 欺骗 攻击] 推荐:

DNS域欺骗攻击详细教程之Linux篇

- - CSDN博客互联网推荐文章
DNS欺骗即域名信息欺骗是最常见的DNS安全问题. 当一个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了. DNS欺骗会使那些易受攻击的DNS服务器产生许多安全问题,例如:将用户引导到错误的互联网站点,或者发送一个电子邮件到一个未经授权的邮件服务器. 二、DNS域欺骗攻击实现步骤.

备用的dns

- - 互联网 - ITeye博客
下载软件 百度找出来了 居然被解析到了本地. cr173 被指向到了 127.0.0.1. 找遍了hosts 和路由器 最后才发现是万恶的联通. 阿里dns 速度和质量都不错. 百度dns 评测说较慢 备胎. 114DNS安全版 (114.114.114.119, 114.114.115.119).

[20:00]腾讯网各地访问正陆续恢复 微博称“史上首次严重DNS攻击 类似911”

- javad78 - cnBeta.COM
今晚18:00左右腾讯网(QQ.com)及其下所有子域名全部无法打开,至少持续一小时,目前接报各地在逐渐恢复. 原因不明,不过有可能是因为DNS无法解析. 根据微博薛皎说法,“转内部声明:腾讯网遭遇史上首次严重DNS攻击,类似911,服务器出现15分钟之久故障,全站至今无法打开. 技术正在查,同时大骂还让不让人下班了.

Public DNS Tool-DNS切换工具

- - 无名小卒
Public DNS Tool v9.1下载: dbank| kuaipan| 官方. 无名小卒(Digital Fingerprint: b98c67913fef00419d415179421ab42f) Related Posts. Webluker-免费CDN、DNS解析和网站监控服务.

DNS解析过程及DNS TTL值

- - IT技术博客大学习
标签:   DNS   TTL.    经常说DNS劫持,也常常说域名解析不正确. 在阅读《HTTP权威指南》缓存一章时,提到缓存文档过期采用“生存时间技术”与DNS类似. 所以抽空学习了解了一下DNS的解析过程,以及DNS TTL值的概念. 根域名服务器(root-servers.org)是互联网域名解析系统(DNS)中最高级别的域名服务器,全球仅有13台根服务器.

新网DNS故障

- - 月光微博客
  新网的DNS服务今天出现长时间故障,包括新网自身在内的大量域名都无法解析,导致网站无法打开,例如使用新网服务的jiathis等网站域名都无法解析.   做为一个域名服务商,DNS发生如此长时间的故障,并且导致客户的域名无法解析,实在太不应该了.   建议新网的客户对新网进行集体诉讼,或者干脆把域名转走算了.

DNS服务-详解

- - 操作系统 - ITeye博客
DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务. <1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器. <2> 当本地的域名服务器收到请求后,就先查询本地的缓存. 如果有查询的DNS信息记录,则直接返回查询的结果.

域名遭遇DNS污染

- - 望月的博客
费劲九牛二虎之力,终于将在 万网注册的wangyueblog.com这个域名转移到godaddy,然而舒心的日子没有几天,麻烦又来了,由于日益严重的 DNS污染,域名常常出现解析错误,真是屋漏偏逢连夜雨,不过,blogging还得继续,所以还是得想办法,在这里将想法和办法分享,仅供参考. 某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.

公共DNS服务器更换工具Public DNS Server Tool

- - 软矿
不知道大家有没有偶尔会遇到过QQ能上但网络却死活上不去或者打开速度慢得非常不正常的情况,出现这种情况的其中一个可能因素就是你所用的服务商DNS出现了障碍. 这种情况下,你可以尝试通过更换可用的DNS服务器来碰下运气. 但手动更改DNS似乎有点麻烦,且一时半刻你也找不到可用的DNS服务器,此时 Public DNS Server Tool将会为你解决这个麻烦.

Google DNS每天请求700亿次,成最大DNS服务商

- - 脚本爱好者
  为了提高整体网页打开速度,Google 在 2009 年 12 月份推出自己的 DNS 服务,今天 Google 对外 宣布他们已经是世界上最大的 DNS 服务商,每天处理 700 亿次请求,这个数字还在增加.   DNS 就像是互联网的电话本一样,如果你每天要查找无数的电话号码,你可能希望这个电话本可以让你既快有安全的查询,并且它还不要出错.