原文发表于《网络安全和信息化》2017年第5期,转发于博客。
更多相关资料可参看视频教程“局域网安全实战”,http://edu.51cto.com/course/10348.html
在高职“信息安全管理与评估”技能大赛2016年的比赛试题中,有一道题目是要求在交换机上配置Gratuitous ARP(免费ARP),来抵御针对网关的ARP欺骗攻击。通常情况下,免费ARP主要用于检测IP地址冲突,囿于知识面,本人对免费ARP还可以防范ARP欺骗攻击这部分内容不甚了解,所以就查阅了相关资料,并搭建了实验环境进行验证,本文就将相关心得与大家分享和探讨。
1. 免费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地址缓存表中的原有记录。下面分别予以说明。
2. IP地址冲突检测
免费ARP的主要作用就是用于判断当前主机所设置的IP地址是否已被别的主机所使用,当免费ARP报文以广播的方式发送到网络中之后,如果有某台主机使用了当前主机的IP地址,那么它就会发回一个ARP响应,这样当前主机就会发出IP地址冲突的警告,我们也可以得知冲突主机的MAC地址。
所以对于一台使用静态IP地址的主机,如果重新设置IP地址,那么就必然要先发送一个免费ARP的广播,这点可以通过Wireshark抓包确认,在Wireshark的显示过滤器中设置过滤条件为arp,抓取到的免费ARP报文如图2所示。
图 2免费ARP报文
3. 更新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.77 00-0C-29-81-BA-30 dynamic
然后在A主机上利用科来数据包生成器构造一个免费ARP报文,故意将源MAC地址修改为另一个不同的地址00:0C:29:81:BA:88,然后将报文以广播的形式发送出去,如图3所示。
图 3 构造的免费ARP报文
此时B主机的ARP缓存表将据此更新:
192.168.80.77 00-0C-29-81-BA-88 dynamic
而C主机由于一直没有与A主机通信,缓存表中没有相应条目,因而也就不会产生新的条目。其实这种设计的目的也很好理解,如果C主机要与A主机通信,那么它自然会通过正常的ARP请求解析出主机A目前的MAC地址,因而主机A也就没有必要利用免费ARP通知主机C来更新ARP地址缓存表。
4. 利用免费ARP来防范ARP攻击
在交换机上通过设置免费ARP来防御ARP攻击,应该是利用了免费ARP的第二点特性。一般情况下,交换机上VLAN的IP地址也就是该网段内主机的默认网关,因而交换机可以定期的在网络中广播免费ARP,使得网络中的所有主机都根据免费ARP来更新自己的ARP地址缓存表,将网关IP地址对应到正确的MAC地址,从而防止针对网关的ARP欺骗。
但是这种防御方式的思维很奇特,它并非要从根源上去阻止ARP欺骗攻击,而是通过免费ARP报文去跟ARP欺骗报文展开竞争,所有这种防御方式的效果如何就要打上个大大的问号了。在网上查找了一些相关资料,很少有提到用免费ARP去防范ARP攻击的,反倒是有不少资料提到如何利用免费ARP去进行ARP欺骗攻击,其实这倒是一种很好的思路。
整体来看,高职2016年度“信息安全管理与评估”技能大赛中的很多试题出的并不高明,本人也仅是从技术的角度提出一些个人的观点,希望能与大家共同探讨。当然单纯从参加比赛的角度,这道题目的答案是很简单的,只需要在比赛所使用的神州数码DCRS交换机上执行下面这两条命令,就可以在交换机上配置免费ARP:
DCRS_A(config)#interface vlan1
DCRS_A(config-if-vlan1)#ip gratuitous-arp
但是配置之后,不清楚交换机多长时间广播一次免费ARP,这点也没能在交换机的配置手册中查找到相关说
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1971012