首先说一下什么是ARP。如果你在命令提示符下输入 arp -a ,你的输出看起来应该是这样的:
Interface: xxx.xxx.xxx.xxx
Internet Address Physical Address Type
xxx.xxx.xxx.xxx 00-00-93-64-48-d2 dynamic
xxx.xxx.xxx.xxx 00-00-b4-52-43-10 dynamic
...... ......... ....
这里第一列显示的是ip地址,第二列显示的是和ip地址对应的网络接口卡的硬件地址(MAC),第三列是该ip和mac的对应关系类型。
可见,arp是一种将ip转化成以ip对应的网卡的物理地址的一种协议,或者说ARP协议是一种将ip地址转化成MAC地址的一种协议。它靠维持在内存中保存的一张表来使ip得以在网络上被目标机器应答。
为什么要将ip转化成mac呢?简单的说,这是因为在tcp网络环境下,一个ip包走到哪里,要怎么走是靠路由表定义。但是,当ip包到达该网络后,哪台机器响应这个ip包却是靠该ip包中所包含的mac地址来识别。也就是说,只有机器的mac地址和该ip包中的mac地址相同的机器才会应答这个ip包。因为在网络中,每一台主机都会有发送ip包的时候。所以,在每台主机的内存中,都有一个 arp--> mac 的转换表。通常是动态的转换表(注意在路由中,该arp表可以被设置成静态)。也就是说,该对应表会被主机在需要的时候刷新。这是由于以太网在子网层上的传输是靠48位的mac地址而决定的。
通常主机在发送一个ip包之前,它要到该转换表中寻找和ip包对应的mac地址。如果没有找到,该主机就发送一个ARP广播包,看起来象这样子:
"我是主机xxx.xxx.xxx.xxx , mac是xxxxxxxxxxx ,ip为xxx.xxx.xxx.xx1的主机请告之你的mac来"
ip为xxx.xxx.xxx.xx1的主机响应这个广播,应答ARP广播为:
"我是xxx.xxx.xxx.xx1,我的mac为xxxxxxxxxx2"
于是,主机刷新自己的ARP缓存,然后发出该ip包。
那么骇客如何利用ARP原理来取得他所想要的东西(比如密码)呢?
假设我的电脑IP是 59.77.71.162 网卡MAC是00-1E-68-46-EC-0A
网关的IP是 59.77.70.1 MAC是 00-E0-FC-6A-A1-D0
有一台IP为 59.77.71.254的机器对我进行arp欺骗,一起看看欺骗过程
首先 我要上网,所以要向网关发送数据包,我就要对网关的MAC进行解析
我首先向局域网发送一个ARP广播 这个广播的意思大概是 我的IP是 59.77.71.162 MAC是00-1E-68-46-EC-0A 网关59.77.70.1 请告诉我你的MAC地址
正常情况下 网关会回复给你一个报文 告诉你 我是网关,我的MAC是 00-E0-FC-6A-A1-D0
这时 你的电脑上的ARP映射表里面就会添加一条ARP记录 GateWay 59.77.70.1 MAC 00-E0-FC-6A-A1-D0
网关的ARP映射表里面也会多一条映射 Client 59.77.71.162 MAC 00-1E-68-46-EC-0A
这时你的电脑和网关之间就可以进行正常通讯,你就能上网了
但是如果有人进行arp攻击(可能是蓄意的,也可能是感染asp病毒造成的)当你广播寻找网关时,攻击源会应答你我是网关,把你的数据包发送给我吧,这时你的电脑就上“当了”,把所有的数据包都给了攻击源,当然包括了密码,骇客只要进行简单的解密就可以轻松的得到你的密码了,由于所有数据包都是经过攻击源转发的,所以网速会不正常
以上的这种情况是攻击源对Client进行欺骗,用上面说的方法可以防范,要是攻击源对网关进行欺骗,就不容易防范了
对网关欺骗的过程大概是 攻击源伪装成你的电脑,让网关把所有本应该发送给你的数据包发送给攻击源,攻击源进行存储解密之后再把原数据包转发给你,或者根本不转发 |