DHCP 耗尽:地址池里的"抢号大战"

在一个典型的办公网络或校园网里,每当一台新设备连入 WiFi 或插上网线,它做的第一件事不是上网,而是发出一个请求:“谁能给我分配一个 IP 地址?”——这就是 DHCP(动态主机配置协议) 的工作。它像一个自动化的"号码管理员",从地址池里拿出一条空闲的"号码"分配给新来的设备,并在设备离开后回收复用。

DHCP 耗尽攻击(DHCP Starvation Attack) 的思路极其简单:攻击者伪造大量"假设备"的 MAC 地址,向 DHCP 服务器疯狂申请 IP 地址,直到把整个地址池全部占满。此后任何真正的新设备接入网络,都再也拿不到 IP 地址——直接被"拒之门外"。

从"租号码"到"一个不留":DHCP 的工作流程

DHCP 的运作基于一个简单的"租约"模型,包含四个步骤:

  1. 发现(DHCP Discover):新设备在网络上广播:“我是新来的,谁能给我一个 IP?”
  2. 提供(DHCP Offer):DHCP 服务器回应:“我可以给你 192.168.1.100,你要不要?”
  3. 请求(DHCP Request):设备说:“好的,我要 192.168.1.100。”
  4. 确认(DHCP Acknowledgment):服务器确认:“好的,这个 IP 租给你了,有效期 24 小时。”

这个流程高效且自动化。但它的前提是:每一个请求都来自一个真实的、需要联网的设备。

DHCP 耗尽攻击要打破的,就是这个"诚实假设"。

攻击原理:一人扮千军

攻击者通过软件生成海量的伪造 MAC 地址,让操作系统以为这些"虚拟网卡"都是真实存在的,然后让每一个伪造的网卡都发出 DHCP 请求。

攻击工具每秒钟可以发起几十到几百个 DHCP 请求。在一个/24子网(254个可用IP)的小型网络中,几分钟内地址池就会完全耗尽。即使是在有数千个可用地址的大型网络中,只要攻击工具持续运行,地址池也终会被填满。

正常的 DHCP 租约通常有 24 小时甚至更长的有效期。攻击者并不需要持续高强度地发请求——只要一次性占满地址池,在租约到期之前,新用户都无法获得 IP 地址。

大多数 DHCP 服务器在地址池耗尽后,会在系统日志中记录 No free leases 或类似信息。但这只是"症状日志",无法直接定位攻击源。

攻击的两种模式

根据攻击者的目标,DHCP 耗尽有两种不同的用法。

模式一:纯粹的拒绝服务(断网攻击)

这是最直接的用法。攻击者占满所有 IP 地址后,任何新设备接入网络都无法获得 IP,无法上网。

核心效果是"阻止新设备入网",但已经拿到 IP 的现有设备不受影响。所以这种攻击最适合发生在新设备密集接入的场景——比如大型会议室、阶梯教室、公共 WiFi 热点区域。想象一下:100 人的培训教室,攻击者在课程开始前 5 分钟启动攻击,结果 100 个学员的设备全都连不上网。

对于已有的网络会话,只要租约未到期,通信不受影响。攻击者可以在不中断自身网络访问的前提下,"卡死"所有新接入者。

模式二:配合恶意 DHCP 服务器(中间人劫持)

这是更危险的一种用法。攻击者不是简单地占满地址池,而是同时在自己的机器上搭建一个伪造的 DHCP 服务器

当真正的 DHCP 服务器因为地址池耗尽而无法响应新请求时,攻击者的恶意 DHCP 服务器就会趁机"接盘"——为真正的新设备分配 IP 地址。关键是,恶意服务器还会同时下发其他网络配置:

  • 默认网关:指向攻击者的机器。
  • DNS 服务器:指向攻击者控制的 DNS。
  • WPAD 代理:让设备自动使用攻击者设置的代理。

从这一刻起,受害设备的所有网络流量都会经过攻击者——攻击者可以监听、篡改、甚至重定向到钓鱼网站。

为什么 DHCP 耗尽难以防范?

DHCP 耗尽攻击的门槛极低,防御起来却很棘手:

  1. 流量看起来完全"合法":攻击者发出的每一个 DHCP Discover 包,格式和内容都与正常设备无异。防火墙无法区分"这是真设备"还是"假设备"。
  2. MAC 地址可以随意伪造:攻击工具可以生成任意 MAC 地址,即使交换机配置了端口安全(限制一个端口只允许 1 个 MAC 地址),攻击者也可以不停地变换伪造的 MAC,让交换机在"学习了新 MAC→发现超限→关闭端口"的循环中疲于应对。
  3. 攻击成本极低:只需要一台连接内网的普通电脑,运行开源工具(如 Yersinia、dhcpstarv)即可发起攻击。
  4. 物联网设备的泛滥加剧了问题:大量智能设备(摄像头、智能音箱、打印机)的 MAC 地址固定且难以管理,网络管理员往往无法准确预知网络里"应该有多少设备"。

防御之道:认证是唯一的出路

防御 DHCP 耗尽攻击的核心思路是:让 DHCP 服务器只给"认证过的设备"分配 IP 地址。

第一层:DHCP Snooping(最根本的方案)

DHCP Snooping 是交换机上的一项安全功能,它把 DHCP 流量分为两类:

  • 可信端口(Trusted):连接合法 DHCP 服务器的端口。来自这里的 DHCP Offer/ACK 才被允许通过。
  • 不可信端口(Untrusted):连接普通终端的端口。来自这里的 DHCP Offer 或 ACK 会被直接丢弃,从而防止恶意 DHCP 服务器"抢答"。

更重要的是:启用 DHCP Snooping 后,交换机会自动建立一份 DHCP 绑定表(DHCP Binding Table),记录每个端口上真正成功的 DHCP 租约信息(IP + MAC + 端口 + VLAN)。这份绑定表,就是防御 DHCP 耗尽的关键数据。

第二层:端口安全(Port Security)——物理层面的限制

在每个接入端口上限制允许通过的 MAC 地址数量:

  • 设置最大 MAC 数:一般来说,一个端口连接一台终端,设置为 1-3 个 MAC 地址(考虑虚拟机或 VoIP 话机的情况)。
  • 违规处理:当攻击者试图从一个端口发出大量不同 MAC 的 DHCP 请求时,超出限制的帧会被丢弃或导致端口关闭。

但要注意:MAC 泛洪攻击和 DHCP 耗尽攻击经常组合使用。攻击者先 MAC 泛洪攻破 CAM 表、再 DHCP 耗尽占满地址池——因此这两道防线必须同时部署,而非二选一。

第三层:IP Source Guard(IP 源地址验证)

IP Source Guard 基于 DHCP Snooping 生成的绑定表,在交换机的每个端口上做三层过滤

  • 只有绑定表中记录的 IP 地址和 MAC 地址组合,才允许通过该端口发送流量。
  • 任何"不在绑定表中"的 IP 包(包括伪造 IP 的攻击包)都会被直接丢弃。

IP Source Guard 的作用不止是防 DHCP 耗尽——它还能防御 IP 地址欺骗(IP Spoofing)攻击,让攻击者无法伪装成合法设备。

第四层:DHCP 租约优化

  • 缩短租约时间:如果地址池有限的办公网中,将默认的 24 小时缩短为 2-4 小时。即使攻击者占满地址池,租约到期后地址会被自动回收,攻击者需要持续攻击才能维持"占位"效果,增加了攻击难度。
  • 启用租约记录:通过日志分析频繁的 DHCP 请求,识别异常流量(如单个端口在短时间内请求了数百个地址)。

第五层:802.1X 网络准入控制(终极方案)

这是防御级别最高的方案。设备在接入网络之前,必须先通过身份认证(用户名/密码或数字证书),认证通过后才被允许访问网络——包括发送 DHCP 请求。

  • 未认证的设备甚至连 DHCP Discover 都发不出去。
  • 802.1X 结合 VLAN 动态分配,可以让认证通过的设备进入正确的子网。

802.1X 能够从连接的那一刻就堵死 DHCP 耗尽攻击的入口。但它对网络基础设施要求较高,需要支持 802.1X 的交换机、RADIUS 服务器和客户端配置,适合高安全等级的企业或政府网络。

攻击者的视角:一条命令打瘫全网

在 Kali Linux 系统中,使用 Yersinia 工具发起 DHCP 耗尽攻击,只需要:

1
2
yersinia -I
# 进入交互界面后选择 DHCP → 选择攻击模式 → 开始发送 Discover

或者在命令行模式下直接攻击:

1
yersinia -attack 1  # DHCP 耗尽攻击模式

这个工具会以极高的频率发送伪造的 DHCP Discover 包,每个包使用不同的随机 MAC 地址。

攻击者还可以结合 DHCP 续租攻击:在占满地址池后,持续对已分配的 IP 发送 DHCP Request 进行续租,让服务器以为这些"假设备"一直在使用 IP,从而阻止地址回收。

DHCP 耗尽 vs. MAC 泛洪

维度 DHCP 耗尽 MAC 泛洪
攻击目标 DHCP 服务器的地址池 交换机的 CAM 表
攻击后果 新设备无法获取 IP 交换机退化为广播模式
影响范围 新接入设备 同一 VLAN 内所有通信
防御手段 DHCP Snooping + 端口安全 端口安全 + MAC 绑定
可组合性 可先耗尽地址池,再搭建恶意 DHCP 劫持流量 可先泛洪 CAM 表,再监听所有广播流量

在实际攻击中,两种攻击经常被组合使用:先用 MAC 泛洪让交换机进入广播模式实现窃听,再用 DHCP 耗尽阻止新设备接入,形成"断网 + 窃听"的双重打击。

总结

DHCP 耗尽攻击的本质,是利用 DHCP 协议"来者不拒"的特性,用海量伪造的请求把地址池撑爆,让合法的"后来者"无号可领。

它的破坏路径是:伪造 MAC → 海量 Discover → 填满地址池 → 新设备无法入网 → 网络准入瘫痪

防御的核心是让服务器有能力识别"谁是真的,谁是假的"——DHCP Snooping 实现可信/不可信端口的隔离,端口安全限制每个物理端口能发出的请求数量,而 802.1X 则从接入的第一步就完成了身份验证。

一个网络最脆弱的时候,往往是它"最方便"的时候。DHCP 让设备即插即用,NAT 让多设备共享一个公网 IP,UPnP 让应用自动开端口——每一种便利背后,都暗藏着一个"信任谁"的选择。当管理员选择信任"所有请求都是善意的",攻击者就已经拿到了入场券。