简单点儿说:之所以有ARP攻击是因为ARP协议本身设计的缺陷。网络设备在动态更新系统的ARP表时,会被恶意欺骗。ARP协议是在2层设备(数
据链路层:交换机)之间传递的协议,ARP包可以在整个“冲突域”中传递。而一般而言,一个冲突域就是一个子网。VLAN就是设计用来隔离“冲突域”的,
所以VLAN可以隔离ARP攻击。简单点说,就是不要和攻击者在一个子网。可惜不是所有的IDC都提供单独的子网(VLAN)给用户,因为划分子网会浪费
IP地址。
解决ARP攻击,有几种方法:
第一:使用独立的VLAN(子网)。VLAN(子网)实际上划分了一个ARP安全域,在这个VLAN里的机器之间逻辑上是互相信任的,VLAN将其 他不信任、不安全的设备隔离在ARP协议发挥作用的区域之外,这样便可以不用担心“邻居”中毒而受到连累。这是最保险的做法。但是,假如自家VLAN(网 段)里有机器中毒进行攻击,则网络仍然会乱作一团。
第二:网关与服务器双双使用静态ARP记录。简单的点儿说就是在网关(路由器)上设定服务器网卡的MAC,在服务器上设定网关的MAC为静态。这样,路由器和服务器就不会再更新对应的ARP 记录,就不会被欺骗。这个方法可以隔离每一台设备,而不用划VLAN(划子网浪费IP),比较适合单设备托管的用户。然而,绝大多数ISP都不会为用户做 MAC绑定。而对于设备比多的用户,网关绑定MAC后,每次设备换IP都需要ISP重新设定MAC绑定,比较麻烦;而使用了某些用到ARP机制的应用,在 绑定的环境下,则可能会运行不起来,比如HA集群中的failover切换。
第三,被动侦测,以毒攻毒。就是使用send_arp程序,纠正错误的ARP记录。之所以说是以毒攻毒,是因为send_arp程序本身就是一个利用ARP协议缺陷的程序。
另外,需要说明的是。有些ISP以端口保护为技术手段,认为可以阻止ARP攻击,实际上,这种技术是不能完全阻止ARP攻击的。
端口保护(有的称为PVLAN,不知道是不是相同的技术)之后,交换机上的端口下连接的设备只能和网关通信,不可以和“邻居”通信。这样可以起到一 定的保护作用。但是,你的“邻居”,仍然是可以访问你的网关的(你们是同一个网关)。它只要欺骗网关,告诉网关你的MAC地址为一个错误的地址,或者干脆 改成自己的MAC,那么,你的服务器就会断网,因为网关发给你的服务器的包,发到了错误的MAC地址上。
解决办法,就以毒攻毒。使用send_arp,强制让网关更新关于你的ARP(MAC)记录:send_arp 你的IP地址 你绑定该IP网络接口的MAC 你网关的IP 你网关的MAC
这个命令十分有用。管理员可能都会有这么一种经历,将一个IP地址调整到另一台服务器上的时候,会有一段时间这个IP是不通的。这个时候,这个工具又可以发挥作用了:使用相同的命令格式。
需要说明的是,send_arp命令是不需要必须在本地运行的,在网一网段(VLAN)内的任意主机上执行即可。
解决问题的基本思想是在同网段的机器上,执行两个send_arp,一个是发给网关的,一个是发给被攻击的主机的。
实际上,可以写一个角本,放在本地,使用crontab每两分钟运行一次,假如被ARP攻击,则自行通知网关更新相应的ARP记录。
首先将网关MAC绑定成静态:将下面的命令添加到/etc/rc.local
arp -s 网关IP 网关MAC
cat /opt/cron/moniter_gw.sh
#!/bin/bash
# gw_ip=网关地址
# gw_hw=网关MAC
gw_ip=192.168.0.1
local_ip=192.168.0.45
local_hw= 00:14:78:07:23:00
if ping -c1 -w5 ${gw_ip} ; do
:
else
/usr/local/bin/send_arp ${local_ip} ${local_hw} ${gw_ip} ${gw_hw}
done
crontab :
*/2 * * * * /bin/bash /opt/cron/moniter_gw.sh
-------------------------------------------------------------------
直接进入主题,在底层禁止arp通信是解决arp欺骗的根本方法。为了不使设备对某个地址进尽arp广播查询,需要将ip->mac这个对应 关系的记录以“静态”的属性写进“arp table”里。在Windows/Linux系统里,可以使用以下命令进行静态arp table记录的添加:
arp -s 网关ip地址 网关mac地址
应该有不少系统管理员已经知道通过绑定静太MAC地址,可以防止arp欺骗,但是这种绑定必须是双方的,需要进行二层通信的双方都进行mac绑定, 一般为:在服务器上绑定网关的ip->mac为静态,在网关上绑定服务器的ip->mac为静态。通过绑定网关地址的mac为静态,只可以保 证从服务器到网关(路由器)之间不会被欺骗、被插入,从网关(路由器)到服务器仍然是可以被插入或者被欺骗的,要做到in和out两路都受到保护,就需要 在网关上同样地绑定服务器的mac地址为静态(这个对于大多数服务器的ISP来说,可能都不愿意做——因为合同上并没有要求要做这些,多一事不如少一事, 更有管理员认为做这些配置会增加路由器的负载——貌似没有什么根据)。
现在的问题是,第一,如何让ISP给我们的服务器ip地址的mac绑定成静态,貌似有点难度,在管理不是很严格的机房,跟管理人员搞好关系应该就可 以做到。或者直接找业务部门,要求他们提供这样的服务。第二,对于Windows系统,每次重启系统都要手动绑定一次,真的很不方便。有人把这些操作写成 批处理加到autorun.bat里,但是似乎起不了作用。加到“开始/程序/启动”里,貌似也不行,这些都是需要管理员登录进系统才能运行的,况且将 arp登录写入批处理,不知道为什么总是返回不了。我的做法是,把这个绑定操作设置成计划任务,设备成开机运行。计划任务是做为后台服务在运行的,所以用 户不登录系统,这个操作依然可以完成。这个操作已经经过测试,可以正常运行:大致上,任务的命令行为:C:\windows\system32 \arp.exe -s 网关ip地址 网关mac
解决ARP攻击,有几种方法:
第一:使用独立的VLAN(子网)。VLAN(子网)实际上划分了一个ARP安全域,在这个VLAN里的机器之间逻辑上是互相信任的,VLAN将其 他不信任、不安全的设备隔离在ARP协议发挥作用的区域之外,这样便可以不用担心“邻居”中毒而受到连累。这是最保险的做法。但是,假如自家VLAN(网 段)里有机器中毒进行攻击,则网络仍然会乱作一团。
第二:网关与服务器双双使用静态ARP记录。简单的点儿说就是在网关(路由器)上设定服务器网卡的MAC,在服务器上设定网关的MAC为静态。这样,路由器和服务器就不会再更新对应的ARP 记录,就不会被欺骗。这个方法可以隔离每一台设备,而不用划VLAN(划子网浪费IP),比较适合单设备托管的用户。然而,绝大多数ISP都不会为用户做 MAC绑定。而对于设备比多的用户,网关绑定MAC后,每次设备换IP都需要ISP重新设定MAC绑定,比较麻烦;而使用了某些用到ARP机制的应用,在 绑定的环境下,则可能会运行不起来,比如HA集群中的failover切换。
第三,被动侦测,以毒攻毒。就是使用send_arp程序,纠正错误的ARP记录。之所以说是以毒攻毒,是因为send_arp程序本身就是一个利用ARP协议缺陷的程序。
另外,需要说明的是。有些ISP以端口保护为技术手段,认为可以阻止ARP攻击,实际上,这种技术是不能完全阻止ARP攻击的。
端口保护(有的称为PVLAN,不知道是不是相同的技术)之后,交换机上的端口下连接的设备只能和网关通信,不可以和“邻居”通信。这样可以起到一 定的保护作用。但是,你的“邻居”,仍然是可以访问你的网关的(你们是同一个网关)。它只要欺骗网关,告诉网关你的MAC地址为一个错误的地址,或者干脆 改成自己的MAC,那么,你的服务器就会断网,因为网关发给你的服务器的包,发到了错误的MAC地址上。
解决办法,就以毒攻毒。使用send_arp,强制让网关更新关于你的ARP(MAC)记录:send_arp 你的IP地址 你绑定该IP网络接口的MAC 你网关的IP 你网关的MAC
这个命令十分有用。管理员可能都会有这么一种经历,将一个IP地址调整到另一台服务器上的时候,会有一段时间这个IP是不通的。这个时候,这个工具又可以发挥作用了:使用相同的命令格式。
需要说明的是,send_arp命令是不需要必须在本地运行的,在网一网段(VLAN)内的任意主机上执行即可。
解决问题的基本思想是在同网段的机器上,执行两个send_arp,一个是发给网关的,一个是发给被攻击的主机的。
实际上,可以写一个角本,放在本地,使用crontab每两分钟运行一次,假如被ARP攻击,则自行通知网关更新相应的ARP记录。
首先将网关MAC绑定成静态:将下面的命令添加到/etc/rc.local
arp -s 网关IP 网关MAC
cat /opt/cron/moniter_gw.sh
#!/bin/bash
# gw_ip=网关地址
# gw_hw=网关MAC
gw_ip=192.168.0.1
local_ip=192.168.0.45
local_hw= 00:14:78:07:23:00
if ping -c1 -w5 ${gw_ip} ; do
:
else
/usr/local/bin/send_arp ${local_ip} ${local_hw} ${gw_ip} ${gw_hw}
done
crontab :
*/2 * * * * /bin/bash /opt/cron/moniter_gw.sh
-------------------------------------------------------------------
防止ARP“中间人”攻击的一个技巧
相信“arp欺骗”让不少管理员疲于奔命。下面讲一个自己偶然得到启示得到的一个方法——其实最重要的启示是如何让Windows上的arp绑定操作开机自动运行。直接进入主题,在底层禁止arp通信是解决arp欺骗的根本方法。为了不使设备对某个地址进尽arp广播查询,需要将ip->mac这个对应 关系的记录以“静态”的属性写进“arp table”里。在Windows/Linux系统里,可以使用以下命令进行静态arp table记录的添加:
arp -s 网关ip地址 网关mac地址
应该有不少系统管理员已经知道通过绑定静太MAC地址,可以防止arp欺骗,但是这种绑定必须是双方的,需要进行二层通信的双方都进行mac绑定, 一般为:在服务器上绑定网关的ip->mac为静态,在网关上绑定服务器的ip->mac为静态。通过绑定网关地址的mac为静态,只可以保 证从服务器到网关(路由器)之间不会被欺骗、被插入,从网关(路由器)到服务器仍然是可以被插入或者被欺骗的,要做到in和out两路都受到保护,就需要 在网关上同样地绑定服务器的mac地址为静态(这个对于大多数服务器的ISP来说,可能都不愿意做——因为合同上并没有要求要做这些,多一事不如少一事, 更有管理员认为做这些配置会增加路由器的负载——貌似没有什么根据)。
现在的问题是,第一,如何让ISP给我们的服务器ip地址的mac绑定成静态,貌似有点难度,在管理不是很严格的机房,跟管理人员搞好关系应该就可 以做到。或者直接找业务部门,要求他们提供这样的服务。第二,对于Windows系统,每次重启系统都要手动绑定一次,真的很不方便。有人把这些操作写成 批处理加到autorun.bat里,但是似乎起不了作用。加到“开始/程序/启动”里,貌似也不行,这些都是需要管理员登录进系统才能运行的,况且将 arp登录写入批处理,不知道为什么总是返回不了。我的做法是,把这个绑定操作设置成计划任务,设备成开机运行。计划任务是做为后台服务在运行的,所以用 户不登录系统,这个操作依然可以完成。这个操作已经经过测试,可以正常运行:大致上,任务的命令行为:C:\windows\system32 \arp.exe -s 网关ip地址 网关mac