免费ARP应用探讨
2017-11-23
通常情况下,免费ARP主要用于检测IP地址冲突。笔者对免费ARP还可以防范ARP欺骗攻击这部分内容,在交换机上配置Gratuitous ARP(免费ARP),来抵御针对网关的ARP欺骗攻击,搭建了实验环境进行验证,本文就将相关心得与大家分享和探讨。
免费ARP的作用
ARP报文有两种类型:一种是由发送方发出的ARP Request广播报文;另一种是由接收方返回的ARP Reply单播报文。免费ARP(Gratuitous ARP)采用的是ARP Request广播报文,但它的目的并不是要解析某个IP地址所对应的MAC地址,在这种ARP报文中,目的IP地址和源IP地址都是同一个,也就是发出免费ARP报文的主机IP地址。如图1所示就是用Wireshark抓取的免费ARP报文内容。
图1 免费ARP报文内容
免费ARP的作用主要有两个:一是用于IP地址冲突检测,二是用于更新ARP地址缓存表中的原有记录。下面分别予以说明。
IP地址冲突检测
免费ARP的主要作用就是用于判断当前主机所设置的IP地址是否已被别的主机所使用,当免费ARP报文以广播的方式发送到网络中之后,如果有某台主机使用了当前主机的IP地址,那么它就会发回一个ARP响应,这样当前主机就会发出IP地址冲突的警告,我们也可以得知冲突主机的MAC地址。
所以对于一台使用静态IP地址的主机,如果重新设置IP地址,那么就必然要先发送一个免费ARP的广播,这点可以通过Wireshark抓包确认,在Wireshark的显示过滤器中设置过滤条件为ARP,抓取到的免费ARP报文如图2所示。
图2 免费ARP报文
更新ARP地址缓存表中的原有记录
当某台主机的MAC地址发生变化时,即IP地址不变,MAC地址改变,比如主机更换了网卡,这时这台主机也会发送免费ARP广播。网络中所有ARP缓存表中具有所对应条目的主机(注意并非是所有主机),将会根据免费ARP报文来更新自己的缓存表。
这点可以通过实验验证,网络中有三台主机,A主机的IP地 址 为 192.168.80.77,MAC 为 00:0C:29:81:BA:30,在B主机中与A主机通信,使得B主机的ARP地址缓存表中产生相应记录:
192.168.80.7700-0C-29-81-BA-30 dynamic
然后在A主机上利用科来数据包生成器构造一个免费ARP报文,故意将源MAC地址修改为另一个不同的地址 00:0C:29:81:BA:88,然后将报文以广播的形式发送出去,如图3所示。
图3 构造的免费ARP报文
此时B主机的ARP缓存表将据此更新:
192.168.80.7700-0C-29-81-BA-88 dynamic
而C主机由于一直没有与A主机通信,缓存表中没有相应条目,因而不会产生新的条目。其实这种设计的目的也很好理解,如果C主机要与A主机通信,那么它自然会通过正常的ARP请求解析出主机A目前的MAC地址,因而主机A也就没有必要利用免费ARP通知主机C来更新ARP地址缓存表。
利用免费ARP来防范ARP攻击
在交换机上通过设置免费ARP来防御ARP攻击,应该是利用了免费ARP的第二点特性。一般情况下,交换机上VLAN的IP地址也就是该网段内主机的默认网关,因而交换机可以定期的在网络中广播免费ARP,使得网络中的所有主机都根据免费ARP来更新自己的ARP地址缓存表,将网关IP地址对应到正确的MAC地址,从而防止针对网关的ARP欺骗。
但是这种防御方式的思维很奇特,它并非要从根源上去阻止ARP欺骗攻击,而是通过免费ARP报文去跟ARP欺骗报文展开竞争,所有这种防御方式的效果如何就要打上个大大的问号了。在网上查找了一些相关资料,很少有提到用免费ARP去防范ARP攻击的,反倒是有不少资料提到如何利用免费ARP去进行ARP欺骗攻击,其实这倒是一种很好的思路。
笔者也仅是从技术的角度提出一些个人的观点,希望能与大家共同探讨。