ARP协议解析:
ARP协议的格式:
typedef struct _ARP_HDR{ USHORT HdType; USHORT ProtType; BYTE HdSize; BYTE ProtSize; USHORT Opcode; BYTE SenderMacAddr[ 6 ]; ULONG SenderIPAddr; BYTE DstMacAddr[ 6 ]; ULONG DstIPAddr; } ARP_HDR, *PARP_HDR;
其中:
HdType 表示数据链路层的类型。(一般会是以太网协议)ProtType 表示网络层的类型,(一般会是IP协议)HdSize 表示数据链路层地址的长度。(以太网为6)ProtSize:表示网络层地址的长度。(IP协议为4)
Opcode:表示ARP包的类型,有请求(0x0001)和响应(0x0002)两种,还有gratuitous标志,在多次请求没有响应时会置位。
SenderMacAddr:表示发送者的数据链路层地址。SenderIPAddr:表示发送者的网络层地址。DstMacAddr:表示接收者的数据链路层地址。DstIPAddr:表示接收者的网络层地址。
什么时候会传输ARP包:
网络中的任何一台计算机只会接收(正常模式下)和识别数据链路层地址与自己相同的数据包,所以任何一台计算机发送数据包时,都必须要知道下一个接收计算机的数据链路层地址,但在计算机刚刚接入网络时,它只知道对端接收计算机的网络层地址,这时就需要调出ARP协议来大显身手了,它会以以上格式来回答正确的数据链路层地址是什么。
ARP攻击的原理:(只讨论以太网情况)
知道了ARP协议的工作方式,那么我们可以想到:
如果不断的发送错误MAC地址的ARP响应包,网络就会乱做一团,没有任何两台计算机之间可以进行正常的通信。
如果针对某一计算机发出的ARP请求,响应错误MAC地址的ARP包,甚至反过来,对所有其它计算机对此计算机IP的ARP请求也这样做,那么,这台计算机将无法和任何一台网络中的其它计算机通信。
这就是ARP攻击的原理,那么有一个比较流行的,搞的一些用局域网的朋友匪夷所思的上不了网的软件:网络执法官(Netrobocop)
,它是如何实现这种功能的呢?
为了侦听到以太网中的所有的数据包,也就是包括了其它计算机的数据包,网卡需要工作在混杂模式下,同时,必须做为一个网络内
核模块才能进行数据链路层级数据包的读取和写入。
如何来完成?现在,有一种很流行WINPCAP库就可以完成此功能,实际上,网络执法官也正是这么做的。那么,它的工作流程就是这样的:
1.加载NPF内核模块(WINPCAP的内核部分),使网卡工作在混杂模式下。2.抓取网络上所有的数据包,对其进行以下分析: 1.是否是ARP数据包,不是,则通过。 2.是否是受限计算机(通过IP地址识别)的请求ARP包,或其中计算机对此受限计算机的请求ARP包,不是,则通过。 3.写入由随机生成的MAC地址来拼接成的新的ARP响应包,使用NPF内核模块来发送至网络。如下图所示:
4.这时,受限计算机会接收到多个响应,保留最后接收到的那个MAC地址,而它只是一个随机数罢了,所以之后的所有通信将都不再有效。
这个就是ARP攻击原理和流行的实现方式,通常,我们可以通过固定ARP缓存中MAC地址来抵御ARP攻击,但如果一开始的MAC就是错的,此方法将无法生效。
我本人针对网络执官等这种ARP攻击程序,实现了一份软件来完成对它们攻击的抵抗,非常有效。大家可以在我的资源之中下载:名称为:ArpShield(Easy anti-arp attack from Netrobocop) ,
或在这个链接下载:
http://www.rayfile.com/zh-cn/files/3fa91d40-3983-11e0-936b-0015c55db73d/
这是它的运行界面:
这是我实现的一套系统安全工具之中的一个,我还将继续开发下去,希望得到支持,或进行合作,可以考虑开放源码,msn:shi.jijie@hotmail.com。
欢迎大家批评指正。