浅析局域网ARP欺骗导致的信息泄露

生活中大家一块上网,局域网中总会有抢带宽的,还有故意限制别人带宽的,可能很多人都是受害者,被P2P终结者、聚生网管之类的软件限制过,或许还有人用这个限制过别人。ARP欺骗攻击,貌似很陌生的一个名词,却是与使用局域网的我们密切相关的。

提醒:文章作者先免责一下,本篇文章只用于技术交流,包含部分黑客攻防内容,请不要用在非法途径,务必遵守相应法律法规,如需验证实验请在对方知情的条件下操作,否则你懂得……

一、ARP协议概述
局域网中最重要的协议莫过于ARP了,全称是Address Resolution Protocol(地址解析协议),和DNS有点相似,这是局域网中用于把IP地址通信转换成MAC地址通信的。在Internet互联网中,访问一个网站要先进行DNS解析,把域名转换成IP,然后通过IP在网络中寻找目标服务器,这个寻找的工作一般是路由器来完成,数据包到达在目标服务器所在的一个局域网内,网络数据的传输不再是依靠IP地址来寻找路径,而是依靠MAC地址。这个MAC地址就是物理网卡的编号地址,12位16进制数,理论上是全球唯一的,无重复。

ARP协议就好比去隔壁班级找人,如果不认识的话,在门口喊一声:请问王小二是哪位?正常情况下大家都听到了但只有王小二会应声,这样就建立起来联系,第二次就不用喊了,直接找到王小二就行。

局域网通信时,源主机先查找本地的ARP缓存表,如果不存在目标主机IP对应的MAC地址,则源主机先广播一个ARP询问数据包,局域网中所有的机器都会收到这个ARP询问数据包,但只有目标主机接到后会反馈一个包含目标主机MAC地址的ARP数据包,源主机接到反馈数据包后更新自己的ARP缓存表,局域网通信时都要先从缓存表中找到MAC才能发送数据。

查看本机的ARP缓存表可以使用命令arp –a,如下图所示,机器最初只有网关的记录,用ping命令测试另外一台主机网络是否通畅之后,再去查看ARP缓存表发现添加了新的记录。

二、ARP欺骗原理
这种简单的喊人机制存在一个问题,如果有人冒充王小二怎么办,所以欺骗就出现了。有时,某台机器会主动向网络中广播自己的MAC地址,其他机器接收到之后也会更新ARP缓存表,这时就有了可以利用的漏洞。

局域网中每台机器包括网关都会有一个ARP缓存表,正常情况下,每台机器都记录着除自己之外的所有其他主机ARP记录,如果有机器恶意发送ARP数据包,就会导致ARP记录的更改,下图就是ARP欺骗的图示,主机B告诉网关:我就是主机A,然后告诉主机A:我就是网关。欺骗完成,网关和主机A都产生了一个错误的ARP缓存表(红色部分)。

三、ARP欺骗的危害
如二中图片所示,欺骗成功后,主机A如果和网关通信,先找网关IP192.168.1.1对应的MAC地址,自然而然的把发给网关的数据包丢给了主机B,相应的网关发给主机A的数据包也到了主机B。网络正常时数据的流向如下图

(图中把家庭级的路由器拆分成了交换机和路由器,因为真正的路由器每个端口都可以设置一个IP,每个端口可以连接一个网络,而家庭级的路由器中四个局域网口都是同一个IP的,所以可以单独作为交换机使用,其中交换机和路由器之间的连接在家庭级路由器内部实现)

欺骗成功后,受骗主机所有收发的数据包都会经过攻击者,攻击者就可以选择性的丢弃某些数据包,从而导致受骗主机的流量带宽降低,这就是著名的聚生网管、网络执法官、P2P终结者等一类的网络管理软件的手段。更进一步的,就可以分析受骗主机的收发数据包,从而获得一些个人资料,至于隐私泄漏的程度,要看攻击者分析的能力。

四、ARP欺骗实战

1.实验环境

实验的局域网很简单,就两台电脑直接连在家庭级路由器上。我的机器IP是192.168.1.188,MAC地址是00-0C-88-88-88-88(MAC地址修改过,否则也不会有这么吉利的数字,查看MAC地址可以用命令 ipconfig /all),另一台受骗机器的IP是192.168.1.105,MAC地址是C8-3A-35-CC-33-E4,路由器网关的IP是192.168.1.1,MAC地址是94-0C-6D-28-FD-70。

2.工具软件
Arpspoof工具,Wireshark软件,WinPcap 3.1
ARP欺骗无非就是构造两个欺骗数据包,会编程的朋友可以用C语言构造简单的发包程序,不会编程的同学就可以下载这个Arpspoof工具,顾名思义是ARP欺骗工具,基于C语言的,用Google搜索的第一个网址http://arpspoof.sourceforge.net/去下载就行,网站是英文的,真的去做这个实验的人估计很容易就可以下载到,包括源码,方便二次开发。

Wireshark就不说了,抓包软件,伪技术宅系列二中有介绍,这个也是开源的,可以二次开发。WinPcap是windows平台下一个免费,公共的网络访问系统。软件接收和发送数据包都需要这个平台的支持。安装Wireshark是会提醒安装WinPcap 4.X版本,由于Arpspoof对高版本WinPcap支持可能不太好,安装过4.X版本请先卸载掉并重启机器,然后搜索WinPcap 3.1版本下载安装,因为我是用这个版本实验没问题,其他的版本未知。

3.调整命令提示符中的当前目录
把下载到的Arpspoof压缩数据包中两个文件arpspoof和Libnet.dll解压到同一个文件夹中,此处解压到了D:\arpspoof,可以像我一样在Arpspoof所在的文件夹下建立一个cmd.bat文件:
在文件夹内空白右击--“新建”--“文本文档”,打开“新建 文本文档.txt”,输入“cmd.exe” 保存并关闭,重命名“新建 文本文档.txt”为“cmd.bat”(一定要把后缀txt修改为bat,看不到扩展名的请到控制面板中修改文件夹选项,查看中的“隐藏已知文件类型的扩展名”取消掉勾选)。

双击打开“cmd.bat”文件,其界面如下:

说了这么多其主要目的就是把命令提示符的当前目录设置为Arpspoof的所在目录(和使用CD命令调整当前目录效果一样,高手勿视)。

4. Arpspoof构造欺骗数据包方法
Arpspoof的使用方式可以用arpspoof命令得到提示,如下图所示:

在ipv4的环境下,构造欺骗数据包的命令格式为:
arpspoof -t 源主机 目标主机

其效果是把源主机发往目标主机的数据包欺骗了过来,属于单向欺骗,即构造了一个ARP数据包欺骗了源主机。

所以要把网关和受骗主机之间的收发数据包都欺骗过来就需要两条命令:
arpspoof -t 192.168.1.1 192.168.1.105
arpspoof -t 192.168.1.105 192.168.1.1

5.构造数据包欺骗网关
开始操作,运行第一条命令arpspoof -t 192.168.1.1 192.168.1.105后,会出现选择网卡接口的提示,此处选择2号网卡(根据机器的实际情况选择)

回车之后,出现packet size 42字样,说明正在发送伪造的ARP数据包

网关欺骗成功,下面是辅助验证,可以不跟着操作,看懂就行。在Wireshark中看到正在发送的数据包,每隔一秒告诉网关一次受骗主机IP192.168.1.105的MAC对应00-0C-88-88-88-88

是否欺骗了网关可以再验证一下(只为了欺骗攻击的话这些都不需要操作),网关路由器被骗之前的ARP缓存表如下:

欺骗之后的ARP缓存表如下:

验证网关欺骗成功。

6.构造数据包欺骗受骗主机
再次双击打开“cmd.bat”文件,因为刚才的命令提示符窗口还在向网关发送数据包,这就需要重新打开一个命令提示符窗口,运行第二条欺骗受骗主机的命令,如下图所示

受骗主机欺骗成功,以下是辅助验证,抓包软件Wireshark中获得数据包除了发往网关的的ARP数据包外,还多了一个发往受骗主机的数据包,同样是每隔一秒告诉受骗主机,网关192.168.1.1所对应的MAC是00-0C-88-88-88-88。

受骗主机处被欺骗前和被欺骗后的两次查看ARP缓存表如下图所示:

经过验证主机欺骗同样成功。

7.结束欺骗攻击
命令提示符窗口状态下按键盘上的Ctrl+C停止命令运行,会看到cleanup: restore to the normal字样,此时Arpspoof会发送正确的ARP数据包给网关和受骗主机,让其恢复正常状态。

五、打开Windows系统的数据包转发功能
网关和受骗主机都欺骗成功后,你会发现受骗主机无法上网,其原因在于默认情况下,Windows XP 中不启用 TCP/IP 转发,网关把发送给受骗主机的数据包给了攻击者之后,攻击者的计算机网卡接收到数据包之后发现不是发送给自己的就丢弃了,同样受骗主机发给网关的到了攻击者处也没有转发。

打开Windows XP系统的数据包转发功能,牵扯到系统注册表操作,请提前备份防止误操作。
要启用 TCP/IP 转发,请按照下列步骤操作:

l         启动注册表编辑器 (开始—运行--regedit)。

l         在注册表编辑器中,找到以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

l         设置以下注册表值:
数值名称:IPEnableRouter
数值类型:REG_DWORD
数值数据:1
数值 1 启用此计算机上安装和使用的网络连接的 TCP/IP 转发。

l         退出“注册表编辑器”。

l         如果依然不能转发的请重新启动计算机。


请参考微软的技术支持页面http://support.microsoft.com/kb/315236
Win7系统类似,如果修改注册表不成功的话请去Google“Win7 IP forwarding”的英文资料,英文资料全面,还是看英文的吧,当初我找XP的中文资料就不多,但是英文的能搜出很多。

六、分析受骗主机的网络数据包
欺骗之后并开启数据转发功能,此时攻击者机器在网关和受骗主机之间充当代理作用,他们之间的通信都要通过攻击者转发。所以,用抓包软件可以从本地抓取到受骗主机和网关之间的交互数据包。在伪技术宅系列二中已经验证过普通的HTTP密码问题。

1.获取受骗主机在人人网的活动
如何获取人人网登录帐号以及发送的状态已经在系列二中说过,此处略过,唯独站内信没说,下面说下截获站内信。
在受骗主机上发送一封站内信,主题为“test the safety of the DM测试站内信安全”,内容为“this is a test message, 这是一条测试信息”,在攻击者计算机上抓包,找到下图红色方框所示数据包并单击选取,依次选择单击File—Export—Selected Packet Bytes:

保存到任意位置后用记事本打开,可以看到发送人,主题和内容

2.抓取受骗主机的邮件
受骗主机登录新浪邮箱,为了减少抓包数量,攻击者计算机重新开始抓取数据包,受骗主机打开一个邮件(天涯网络社区的验证邮件),打开之后攻击者停止抓包,依次单击选择File—Export—Objects—HTTP菜单按钮,如下图所示:

找到Filename一栏为rdmail.php……的文件save as保存成后缀为html的文件,然后打开后可以看到如下图的邮件内容:

受骗主机的邮件发送和人人网的站内信类似,不再重复描述。

3.获得受骗主机的浏览网页
受骗主机浏览中文维基百科中的“维基百科”词条,攻击者计算机上按照上面导出HTTP项目步骤(依次单击选择File—Export—Objects—HTTP菜单按钮),选择Filename为load.php的save as另存为html文件,打开之后会看到如下图页面:

由此获得了文字部分,那么受骗主机的浏览网络上的多媒体文件,同样是在导出HTTP项目步骤(依次单击选择File—Export—Objects—HTTP菜单按钮)中,寻找Content Type为图像(JPEG\PNG\GIF\BMP)、声音(MP3\WMA\WAV)、视频(FLV\WMV)另存为就行了。

4.即时通信的信息获取
即时通信软件常用的有腾讯QQ、微软MSN、Google的Gtalk、微软的Skype。其中QQ可以获得正在登录的号码,密码无法获取,QQ聊天信息是加密过的,无法获得明文,其安全性尚可。MSN是完全明文传输,可以看到帐号。Gtakl的英文版是加密版,中文版是明文未加密。Skype是加密版。未加密的明文信息获取不再详述,有兴趣研究的可以自己试试。

七、ARP欺骗攻击的防护
有攻击就必须有防护,本系列文章最重要的部分就是告诉大家怎么保护自己的信息和隐私安全。还有那些滥用技术或者管理软件限制别人流量和带宽的,也需要用这些办法防护。
1.使用360ARP防火墙
相信现在还有很多人在使用360安全卫士,虽然我是不用的,但是还要推荐给不喜欢折腾的人使用,360确实功能丰富,傻瓜式操作容易上手,虽然各方面并不专业,但用来应付一般的问题还是勉强可以的。360自带ARP防火墙,默认是关闭的,需要手动开启并重新启动计算机。普通应用无需改动设置,默认即可。

工作机制:防火墙开始工作时向局域网广播一次询问网关的MAC,然后记录进行保护,每当检测到有局域网机器冒充网关的时候会有警告,保护机器不去相信这个数据包,并且默认每秒钟向网关发送5个ARP数据包(最高50个每秒),告诉网关我才是真正的IP为多少的机器。这样360所安装的机器没有被欺骗,由于360又辛勤地去告诉网关我是谁,网关处会保存最新的数据,这样也不会出错。ARP欺骗失败。

360的不专业之处:如果机器已经被欺骗了之后再去打开360的ARP防火墙,有时他会反应不过来,尤其是修改了网卡的网关地址之后,360基本假死状态,一直检测不到要保护的网关。

2.使用专业的ARP防火墙
360ARP防火墙属于比较不专业的,其他著名防火墙有金山ARP防火墙、彩影ARP防火墙,下面用彩影ARP防火墙做攻击防护,到官方网站安装下载,步骤就不说了,普通应用无需改动设置,默认即可。

工作机制:同样是开启时询问一次网关并保护,检测到欺骗攻击后,会先ARP广播询问网关MAC,网关答复之后再告诉网关我是某某IP机器,对攻击者的数据包置之不理,既保护了自己又让网关记住了自己。

不足之处:因为防火墙都是检测到攻击之后才采取这种向外发送数据包的,这种模式导致攻击者可以只去欺骗网关,而不去招惹受骗主机,这样从受骗主机到网关的数据是没有泄漏,但是网关发给受骗主机的依然被攻击者截获。

解决办法:防火墙中都可以设置没有检测到攻击也会一直向网关发送本机正确的ARP数据包。

3.手动双向绑定MAC地址
上面防火墙的办法倒是可取,不过到底被骗还是不被骗,还要看防火墙和攻击者那个机器发送的ARP数据包够快,因为网关只接受最新的记录,拿360来说,最高每秒发送50个数据包,如果我再二次开发ArpSpoof源代码修改为一秒发送100个数据包,这样也能欺骗网关成功。道高一尺魔高一丈的互相竞争,只会会导致局域网里充斥了大量的ARP数据包,正常的数据拥塞严重,最后就是谁也没办法利用网络资源。

最彻底的解决办法就是双向绑定MAC地址,双向绑定,顾名思义,本地绑定网关的MAC地址,在网关上也要绑定本地机器的MAC地址。绑定之后,机器接收到ARP数据包不再去处理ARP缓存表。

网关绑定步骤:打开路由器管理页面,如下图所示操作:

打开的页面填写要绑定的本地机器MAC和IP保存即可。

本地绑定步骤:本地绑定MAC可以使用防火墙带的功能,也可以在命令提示符中用arp –s IP MAC来手动绑定。只是每次重启机器的时候都要再绑定一次,可以把这条命令写成bat批处理放到启动中,这样每次开机就自动绑定了网关的MAC。

不足之处:绑定MAC只适用于网络环境一般没有变化的。如果有DHCP欺骗的话也没办法防护,或者有攻击者直接把受骗主机的默认网关地址修改成了攻击者的IP,哈哈,这里有点较真。

八、总结
在局域网中,人们总是忽视了ARP欺骗带来的危害,没有开启ARP防护措施的大有人在,虽然在局域网中,遭受ARP欺骗攻击的可能性不大,但是如果真有人用P2P终结者、聚生网管之类的软件为所欲为的限制别人,或者真有网络骇客这样的人用来使坏,这样的损失无法估计。同一个宿舍,同一个机房,同一个网吧,同一个园区,同一个公司,小到一个MM的QQ号泄漏给别人导致的穷追不舍,大到一个公司的机密邮件的外泄导致的公司灾难,ARP欺骗可大可小,所以,大家在不受信赖的网络中一定要注意保护好自己的数据安全。至于网络流量占用的问题,还是大家聚到一块商议对策,以暴易暴不是好的解决办法。

你可能感兴趣的:(浅析局域网ARP欺骗导致的信息泄露)