ARP 攻击是什么:原理、危害与机房里的典型表现
ARP 攻击是利用 ARP 协议没有认证这一点,在同一个二层网段里发送伪造的 ARP 报文,让其他主机把网关或某台服务器的 IP 记成攻击者的 MAC。后果从整段断网、IP 冲突到流量被劫持、IP 和带宽被盗用;在机房里,源头通常是同一 VLAN 内一台被入侵的托管服务器。
ARP 协议为什么能被攻击
ARP 攻击是什么,要从 ARP 本身说起。ARP(Address Resolution Protocol,地址解析协议)负责把 IPv4 地址翻译成以太网 MAC 地址。主机 103.45.12.10 要发包给网关 103.45.12.1 时,先向全网段广播一个请求:“谁是 103.45.12.1?请告诉 103.45.12.10”;网关单播回复:“103.45.12.1 在 00:aa:bb:cc:dd:ee”。主机把这条对应关系写进 ARP 缓存,之后发往网关的 IP 报文都封装成以太网帧发给这个 MAC。
这套机制在 1982 年的 RFC 826 里定下来,设计前提是同一个局域网内的主机彼此可信,因此留下了三个被利用的缺口:
| 缺口 | 协议行为 | 攻击者怎么利用 |
|---|---|---|
| 应答不验证 | 主机收到 ARP 应答时不检查自己是否发过请求,也无法核实应答者身份 | 不等请求,直接向目标发送伪造应答 |
| 后到的覆盖先到的 | 缓存里已有的表项会被新收到的报文更新 | 持续高频发送,确保自己的 MAC 始终“压”在正确表项之上 |
| 请求也能写缓存 | 许多协议栈收到 ARP 请求时,会刷新或新建请求者的 IP-MAC 表项(具体规则因系统而异) | 用广播请求同时毒化整个网段的缓存,一条报文影响所有主机 |
所以 ARP 欺骗不需要利用任何漏洞,一台普通 Linux 服务器用 arpspoof、ettercap 之类的工具,或者几行发原始报文的脚本就能做到。它需要的只是目标网段内一台能发包的机器和 root 权限,而被入侵的服务器恰好同时满足这两点。
两种形式:冒充网关与冒充主机
ARP 攻击原理相同,按伪造的目标分成两种,机房里两种都常见。
冒充网关(网关欺骗)。攻击机向网段内广播“103.45.12.1 在攻击机的 MAC 上”。所有客户机的出向流量都发到攻击机:攻击机不转发,整段断网;攻击机开启 IP 转发再交给真网关,流量照常通,但全部经过它,这就是中间人。
冒充主机(主机欺骗)。攻击机向网关单播“103.45.12.20 在攻击机的 MAC 上”,网关把发往这台客户服务器的回程流量交给攻击机,客户服务器表现为“能发不能收”。如果攻击机同时用这个 IP 对外发包,就是典型的 IP 盗用。
| 冒充网关 | 冒充主机 | |
|---|---|---|
| 被毒化的缓存 | 网段内所有主机 | 网关(有时还包括同段其他主机) |
| 伪造的报文 | 广播:网关 IP → 攻击机 MAC | 单播给网关:受害者 IP → 攻击机 MAC |
| 影响范围 | 整个 VLAN | 单台或少数几台服务器 |
| 典型目的 | 断网、嗅探、劫持 | 盗用 IP、制造冲突、绕过按 IP 做的访问控制 |
| 攻击机的负担 | 要吞下整段的出向流量,网口很容易打满 | 很小 |
两种同时做,即对受害者假装网关、对网关假装受害者,攻击机就处在双向流量中间,可以完整看到并改写这台服务器的所有明文通信。
ARP 攻击有什么危害
| 危害 | 怎么发生 | 用户看到什么 |
|---|---|---|
| 断网、时通时断 | 流量被引到攻击机后被丢弃;或者攻击机与真网关的应答交替到达,缓存来回翻转 | ping 网关大量丢包、延迟忽高忽低;攻击停止后自行恢复 |
| IP 地址冲突 | 攻击机宣告了别人正在用的 IP | Windows 弹出 IP 冲突提示;Linux 上同一 IP 对应的 MAC 反复变化 |
| 流量劫持与嗅探 | 中间人转发,HTTP、FTP、Telnet、未加密的数据库连接内容全部可见 | 几乎无感知;HTTPS 若被替换证书则浏览器告警 |
| 内容篡改 | 在转发的 HTTP 响应里插入脚本或跳转 | 网站被“挂马”,但服务器上找不到被改的文件 |
| DNS 劫持 | 改写经过的 DNS 应答 | 域名解析到错误地址 |
| IP 与带宽盗用 | 攻击机用别人的 IP 对外发包 | 被盗用方的 IP 产生陌生流量、收到滥用投诉或被封禁 |
| 设备资源耗尽 | 高速发送随机 IP-MAC 的 ARP 报文 | 交换机 CPU 飙高、网关 ARP 表被塞满,正常主机学不到表项 |
早年办公网里的“ARP 病毒”主要造成断网和网页挂马;在 IDC,危害的重点落在后三行:客户的业务流量被同机房的另一台机器看到,客户的 IP 被别人拿去发垃圾流量,以及整个网段的可用性被一台机器拖垮。
一台被入侵的托管服务器怎么拖垮整个网段
把场景放到一个典型的托管 VLAN 里:一个公网 /24,网关在三层交换机上,接入交换机下挂着几十个客户的服务器,各自配静态公网 IP,彼此之间没有做端口隔离。
- 某客户的服务器用的是弱密码,被扫到后植入了木马。木马的功能之一就是在所在网段做 ARP 欺骗,目的是嗅探其他主机的账号密码,或者给经过的网页插广告。
- 木马每秒向网段广播几十条“网关在我这里”的应答。几秒内,网段里所有主机的 ARP 缓存都被改写。
- 几十台服务器的出向流量全部涌向这台被入侵机器的千兆网口。它既要转发又要嗅探,网口和 CPU 很快满载,开始大量丢包。
- 客户感受到的是:延迟从 2 ms 跳到几百 ms,SSH 卡顿,网站打不开,但自己服务器上的进程和配置都正常。
- 工单集中到来,而且全部来自同一个网段,这是最明显的特征。
- 木马间歇性运行,或者真网关的免费 ARP 偶尔刷新了部分主机的缓存,于是故障表现为“时好时坏”,很难用单次 ping 复现。
这个链条里,被入侵的客户并没有“故意攻击”,但影响的是同一网段里所有付费客户。这也是为什么机房要把 ARP 问题当作安全事件而不是普通故障来处理:根源在一台机器,损失却是整段客户的服务质量。
另一类场景更隐蔽:某客户的服务器悄悄把网卡配上了相邻客户没在用的公网 IP,或者用脚本轮换源 IP 发包。这是主机欺骗的变体,常常是为了多拿几个 IP 不付费,或者让攻击流量的来源看起来是别人。它不会造成大面积断网,只会在被盗用方上线使用那个 IP 时表现为冲突,或者在收到滥用投诉时才被发现。
运维从哪些现象能察觉
ARP 攻击没有特定的“报错”,但下面这些信号组合出现时,基本可以判定:
| 现象 | 怎么确认 |
|---|---|
| 同一网段多个客户同时报障,其他网段正常 | 工单按 IP 段归类 |
| 客户机上记录的网关 MAC 不是网关的 MAC | 对比网关设备 VLAN 接口的真实 MAC |
| 交换机 MAC 表里,网关 MAC 出现在某个接入口上 | 网关 MAC 只应出现在上联口 |
| 交换机日志出现 MAC 漂移告警 | 同一 MAC 在上联口与某接入口之间来回 |
| 某个接入口的 ARP 报文速率异常 | 正常服务器每秒几条,攻击机每秒几十到几百条 |
| 网关 ARP 表里某客户 IP 的 MAC 变了 | 与台账登记的 MAC 比对 |
| 客户反馈 HTTPS 证书错误、网页被插广告 | 中间人篡改的典型表现 |
在受影响的客户机或任意一台同段主机上,先看它眼里的网关是谁:
# Linux:网关 IP 对应的 MAC 与状态
ip neigh show 103.45.12.1
# Windows
arp -a 103.45.12.1
然后抓 ARP 报文,看谁在宣告网关地址。-e 让 tcpdump 打印以太网帧头,arp[6:2] == 2 只保留 ARP 应答:
tcpdump -nei eth0 'arp and arp[6:2] == 2 and arp src host 103.45.12.1'
正常情况下,输出里“103.45.12.1 is-at”后面只会出现一个 MAC,且频率很低;如果短时间内出现两个不同的 MAC,或者同一个 MAC 以每秒几十条的速度不停宣告,就是欺骗。注意看帧头里的源 MAC 与 ARP 报文体里的发送方 MAC 是否一致:攻击工具可以伪造报文体,但交换机学习 MAC 看的是帧头,定位端口时以帧头为准。
拿到可疑 MAC 之后,到交换机上查它接在哪个端口:
# 华为 / H3C
display mac-address 0011-2233-4455
display arp | include 103.45.12.1
# 思科 IOS
show mac address-table address 0011.2233.4455
show ip arp 103.45.12.1
思科交换机在 MAC 漂移时会打印类似 %SW_MATM-4-MACFLAP_NOTIF: Host 0011.2233.4455 in vlan 100 is flapping between port Gi1/0/5 and port Gi1/0/48 的日志,直接给出了两个端口;华为、H3C 的交换机也有对应的 MAC 漂移检测与告警,具体日志格式以设备文档为准。查到接入口后,对照台账就知道是哪台服务器、哪个客户。
ARP 攻击、IP 冲突和网关故障怎么区分
三者的表象都可能是“整段或部分客户上不了网”,但处理路径完全不同:
| 判断点 | ARP 攻击 | 普通 IP 冲突 | 网关故障 |
|---|---|---|---|
| 受影响范围 | 整个 VLAN(冒充网关)或单台(冒充主机) | 只有冲突的那个 IP | 整个 VLAN |
| 网关 IP 对应的 MAC | 变成某台接入口设备的 MAC | 不变 | 不变,或 ARP 请求根本没有应答 |
| ARP 报文频率 | 某个 MAC 高频宣告 | 两个 MAC 偶发交替应答 | 没有网关的应答 |
| 冲突的 IP | 往往是网关,或多个客户 IP 同时异常 | 通常只有一个 | 无 |
| 停掉可疑端口后 | 几十秒内恢复 | 冲突消失 | 无变化 |
普通 IP 冲突多半是配置失误,找到配错的一方改回来即可;网关故障看三层设备;只有 ARP 攻击需要按安全事件处理:隔离端口、通知客户清理系统,再补上交换机侧的防护。
在管理系统里怎么落地
察觉 ARP 攻击的难点不在命令,而在“这个 MAC 是谁的”:几百台服务器、几千个 IP 的台账如果靠表格维护,查一次要翻好几处。Toplink DCIM 的 IP 地址管理按段登记每个 IP 的归属服务器、客户和所在 VLAN,服务器列表直接显示它接在哪台交换机的哪个端口,拿到可疑 MAC 或 IP 后对照一下就能定位到机柜和客户。定位之后,交换机管理页面可以直接关闭该端口止损;长期防护则靠同一页面的 ARP 绑定与源地址校验,把 IP、MAC 与端口锁定,伪造来源的报文在接入口就被丢弃。
常见问题
ARP 攻击会影响其他 VLAN 吗?
不会直接影响。ARP 报文是二层广播,不能跨 VLAN 传播,欺骗只在攻击机所在的 VLAN 内生效。但如果网关被冒充,其他 VLAN 发往这个 VLAN 的流量到网关后仍会被送错,表现为其他网段访问这个网段也不正常。
IPv6 有 ARP 攻击吗?
IPv6 不用 ARP,用 NDP(邻居发现协议)解析地址,但 NDP 同样默认没有认证,存在性质相同的邻居欺骗和伪造 RA 攻击。对应的防护是交换机上的 RA Guard 和 ND Snooping。
ARP 攻击一定是有人故意发起的吗?
不一定。被植入木马的服务器会自动发起欺骗,机主往往不知情;某些虚拟化、负载均衡软件的代答 ARP 配置错误,或者两台机器误配了同一个 IP,也会出现和攻击类似的表项翻转。排查时看伪造报文的频率和来源是否集中。
换了网关设备后客户机上的网关 MAC 变了,是攻击吗?
不一定。更换网关设备会让网关 MAC 变化;主备切换时如果没有使用虚拟 MAC,MAC 也会变。新网关通常会发免费 ARP 刷新大家的缓存。区别在于新 MAC 应当出现在交换机的上联口而不是接入口,并且能与变更记录对上。