一、ARP协议工作原理
在TCP/IP协议中, 每一个网络结点是用IP地址标识的, IP地址是一个逻辑地址。 而在以太网中数据包是靠48位MAC地址(物理地址)寻址的。 因此, 必须建立IP地址与MAC地址之间的对应(映射)关系, ARP协议就是为完成这个工作而设计的。
TCP/IP协议栈维护着一个ARP cache表, 在构造网络数据包时, 首先从ARP表中找目标IP对应的MAC地址, 如果找不到, 就发一个ARP request广播包, 请求具有该IP地址的主机报告它的MAC地址, 当收到目标IP所有者的ARP reply后, 更新ARP cache.ARP cache有老化机制。
二、ARP协议的缺陷
ARP协议是建立在信任局域网内所有结点的基础上的, 它很高效, 但却不安全。 它是无状态的协议, 不会检查自己是否发过请求包, 也不管(其实也不知道)是否是合法的应答, 只要收到目标MAC是自己的ARP reply包或arp广播包(包括ARP request和ARP reply), 都会接受并缓存。 这就为ARP欺骗提供了可能, 恶意节点可以发布虚假的ARP报文从而影响网内结点的通信, 甚至可以做“中间人”。
三、常见ARP欺骗形式
1、假冒ARP reply包(单播)
XXX, I have IP YYY and my MAC is ZZZ!
2、假冒ARP reply包(广播)
Hello everyone! I have IP YYY and my MAC is ZZZ!
向所有人散布虚假的IP/MAC
3、假冒ARP request(广播)
I have IP XXX and my MAC is YYY.
Who has IP ZZZ? tell me please!
表面为找IP ZZZ的MAC, 实际是广播虚假的IP、MAC映射(XXX, YYY)
4、假冒ARP request(单播)
已知IP ZZZ的MAC
Hello IP ZZZ! I have IP XXX and my MAC is YYY.
5、假冒中间人
欺骗主机(MAC为MMM)上启用包转发
向主机AAA发假冒ARP Reply:
AAA, I have IP BBB and my MAC is MMM,
向主机BBB发假冒ARP Reply:
BBB, I have IP AAA and my MAC is MMM
由于ARP Cache的老化机制, 有时还需要做周期性连续欺骗。
四、ARP欺骗的防范
1、运营商可采用Super VLAN或PVLAN技术
所谓Super VLAN也叫VLAN聚合, 这种技术在同一个子网中化出多个Sub VLAN, 而将整个IP子网指定为一个VLAN聚合(Super VLAN), 所有的Sub VLAN都使用Super VLAN的默认网关IP地址, 不同的Sub VLAN仍保留各自独立的广播域。 子网中的所有主机只能与自己的默认网关通信。 如果将交换机或IP DSLAM设备的每个端口化为一个Sub VLAN, 则实现了所有端口的隔离, 也就避免了ARP欺骗。
PVLAN即私有VLAN(Private VLAN) , PVLAN采用两层VLAN隔离技术, 只有上层VLAN全局可见, 下层VLAN相互隔离。 如果将交换机或IP DSLAM设备的每个端口化为一个(下层)VLAN, 则实现了所有端口的隔离。
PVLAN和SuperVLAN技术都可以实现端口隔离, 但实现方式、出发点不同。 PVLAN是为了节省VLAN, 而SuperVlan的初衷是节省IP地址。
2、单位局域网可采用IP与MAC绑定
在PC上IP+MAC绑, 网络设备上IP+MAC+端口绑。 但不幸的是Win 98/me、未打arp补丁的win 2000/xp sp1(现在大多都已经打过了)等系统 使用arp -s所设置的静态ARP项还是会被ARP欺骗所改变。
如果网络设备上只做IP+MAC绑定, 其实也是不安全的, 假如同一二层下的某台机器发伪造的arp reply(源ip和源mac都填欲攻击的那台机子的)给网关, 还是会造成网关把流量送到欺骗者所连的那个(物理)端口从而造成网络不通。
对于采用了大量傻瓜交换机的局域网, 用户自己可以采取支持arp过滤的防火墙等方法。 推荐Look ‘n’Stop防火墙, 支持arp协议规则自定义。
最后就是使用ARPGuard啦(才拉到正题上), 但它只是保护主机和网关间的通讯。
五、ARPGuard的原理
ARPGuard可以保护主机和网关的通讯不受ARP欺骗的影响。
1、第一次运行(或检测到网关IP改变)时获取网关对应的MAC地址, 将网卡信息、网关IP、网关MAC等信息保存到配置文件中, 其他时候直接使用配置文件。
2、移去原默认路由(当前网卡的)
3、产生一个随机IP, 将它添加成默认网关。
4、默认网关IP 和网关的MAC绑定(使用DeleteIpNetEntry和CreateIpNetEntry修改ARP Cache表项)
5、周期性检测ARP Cache中原默认网关(不是随机IP那个) 网关的MAC在ARP Cache的值是否被改写, 若被改写就报警。
6、针对有些攻击程序只给网关设备(如路由器或三层交换机)发欺骗包的情况。 由于此时本机ARP Cache中网关MAC并未被改变, 因此只有主动防护, 即默认每秒发10个ARP reply包来维持网关设备的ARP Cache(可选)
7、程序结束时恢复默认网关和路由。
值得说明的是程序中限定了发包间隔不低于100ms, 主要是怕过量的包对网络设备造成负担。 如果你遭受的攻击太猛烈, 你也可以去掉这个限制, 设定一个更小的数值, 保证你的通讯正常。
……