Lns防火墙防ARP攻击设置解析
为了便于说明Lns防火墙防ARP攻击设置,我们先假设一个子网环境:
网关 : IP = IP-1, MAC = 11:11:11:11:11:11
本机 : IP = IP-2, MAC = 22:22:22:22:22:22
主机A: IP = IP-A, MAC = AA:AA:AA:AA:AA:AA
主机B: IP = IP-B, MAC = BB:BB:BB:BB:BB:BB
主机C: IP = IP-C, MAC = CC:CC:CC:CC:CC:CC
……
子网内的任意两台主机(网关也可看作一台主机)要正常通讯,需要互相知道对方的网卡地址MAC。如果一方不知道对方的MAC,就要进行ARP查询。
ARP 查询过程
在一个正常的子网内,一次完整的 ARP 查询需要一次查询广播和一次点对点的应答。查询广播中包含了要查询主机的IP,此广播可以被子网内的每一台主机的网卡收到,网卡会检查要查询的IP是否与自己的IP相等,不等则直接丢弃,相等则将此数据包提交给系统内核(一个中断),内核调用网卡驱动解析收到的数据包,然后构建一个应答数据包回送到查询的主机,查询主机收到应答后更新自己的ARP缓存表。
对应 LnS 的设置,此通讯过程需要两条规则,以本机查询主机B的MAC为例
① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF (允许本机广播出站)
② 22:22:22:22:22:22 表示传出, FF:FF:FF:FF:FF:FF (允许本机广播出站)
② 22:22:22:22:22:22 BB:BB:BB:BB:BB:BB (允许本机应答主机B出站)
显然规则②④在LnS中是可以合并的,则两台机器完整通讯只须 3 条规则:
① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF (允许本机广播出站)
② FF:FF:FF:FF:FF:FF
简单的 ARP 欺骗
前面说了,一次查询过程需要一次广播和一次应答,但 ARP 协议中并不要求广播与应答成对出现,也就是可以没有广播,任何一台主机都可以主动发送应答数据包,如果目标主机没有使用静态MAC,则只要收到应答广播就会更新自己的ARP缓存表。因此,我们可以人为的构建一个错误的应答数据包让目标主机更新自己的ARP缓存。
比如从本机控制,不让主机A与主机B通讯:
本机向主机A发送应答数据包,告诉它 IP-B 的 MAC 是 XX:XX:XX:XX:XX:XX
本机向主机B发送应答数据包,告诉它 IP-A 的 MAC 是 YY:YY:YY:YY:YY:YY
此时主机A和主机B的 ARP 缓存中关于对方的MAC都错误的,他们互发数据时就会发到一个错误或都根本不存在(取决于伪造的MAC)的网卡,A、B 间的通讯自然失败。(其实只要其中一台的ARP缓存错误,A、B 间的通讯就会表现不正常)
想想,如果伪造的应答数据包是告诉主机B:IP-1 的 MAC 是 ZZ:ZZ:ZZ:ZZ:ZZ:ZZ 会怎么样?则主机B与网关通讯会不正常,就会表现为断网。如果同时对网关欺骗,告诉它主机B的MAC为一个错误值,且这种欺骗一直持续,则主机B无法上网了。
大家常说的网络执法官就是利用ARP欺骗来踢人的。执法官运行时首先会大量发送广播,获得所有主机的MAC地址,然后,想欺骗谁,就向谁发送伪造的应答数据包。
当然,ARP欺骗决不仅止于此,比如还可以使目标主机断线后将自己的MAC伪造成被欺骗主机的MAC达到特殊目的,或者同时欺骗网关与目标主机,但是用自己的MAC代替伪造应答数据包中的随机MAC并开启本机的数据转发功能,插入到网关与目标主机通讯中充当代理,达到监听目标主机的目的。但本文的目是要说明LnS中的ARP规则如何设置,ARP欺骗不是重点。