4、DHCP饿死攻击:从工作原理到防御实战

各位同行,今天我们来聊一个在网络运维中特别常见、但又容易被忽视的问题——DHCP饿死攻击。说实话,我入行头两年根本没把这当回事,直到有一次在某大型园区网项目中,整个办公区突然大面积断网,排查了整整一个下午,最后才发现罪魁祸首就是DHCP饿死攻击。从那以后,我对DHCP安全再也不敢掉以轻心。

4.1 DHCP工作原理——先搞清楚正常流程

要理解攻击,得先知道正常情况是什么样的。DHCP说白了就是给设备自动分配IP地址的协议。你想想看,如果没有DHCP,每台电脑都得手动配IP,几百台设备那不得配到崩溃?

标准的DHCP交互过程分为四个步骤,业内常称为DORA流程:

步骤 报文类型 方向 说明
1 DHCP Discover 客户端 → 服务器 客户端广播寻找DHCP服务器
2 DHCP Offer 服务器 → 客户端 服务器回应可分配的IP地址
3 DHCP Request 客户端 → 服务器 客户端确认选择某个IP
4 DHCP ACK 服务器 → 客户端 服务器确认分配,租约生效

这里有个关键点——DHCP服务器维护着一个IP地址池,每个分配的IP都有租约时间。租约到期前客户端可以续租,到期未续租则IP回收。嗯,这个机制本身没问题,但攻击者恰恰就盯上了这个「租约」机制。

核心要点:DHCP服务器能分配的IP总数是有限的。一旦地址池耗尽,新设备就无法获取IP,这就是饿死攻击的根源。

4.2 DHCP饿死攻击原理——地址池是怎么被掏空的

说白了,饿死攻击的原理非常简单:攻击者伪造大量MAC地址,疯狂向DHCP服务器发送Discover报文,申请IP地址。服务器一看,来活了,一个个分配。很快地址池就被掏空了。

我记得有一次在金融客户现场做安全评估,我用一个简单的Python脚本,不到3分钟就把一台能分配254个IP的Cisco路由器地址池耗光了。客户当时脸都绿了。

攻击的典型特征:

  • MAC地址洪泛:攻击者每发一个Discover报文就换一个MAC地址,服务器无法区分真假
  • 租约占而不用的:攻击者拿到IP后从不使用,也不续租,但租约期内IP就是被占着的
  • 合法用户被拒:正常设备发Discover时,服务器回复「No Free Addresses」

避坑指南:我曾经见过一个案例,某公司员工用手机开热点,笔记本自动连了热点获取了192.168.137.x的IP,结果这台笔记本同时连着公司内网,两个网卡疯狂发DHCP请求,直接把公司核心交换机的地址池打爆了。所以,饿死攻击不一定是恶意的,有时候误配置也能造成同样效果。

攻击流程可以用下面这张图来理解:

DHCP饿死攻击流程 攻击者 伪造大量MAC地址 交换机 透传DHCP报文 DHCP服务器 地址池逐渐耗尽 大量Discover 转发Discover 合法用户 无法获取IP Discover 无可用地址 地址池状态变化 初始:192.168.1.2 - 192.168.1.254(253个可用) 攻击后:全部被占用,新设备无法获取IP

4.3 DHCP Snooping配置——实战防御方案

好了,问题清楚了,怎么解决?业界最成熟的做法就是DHCP Snooping。说白了,就是在交换机上建立一个信任机制——只允许信任的端口接收DHCP Offer和ACK报文,其他端口只能发Discover和Request。

我个人习惯把DHCP Snooping的核心功能总结为三点:

  • 端口信任划分:连接DHCP服务器的端口设为信任口,其他端口都是非信任口
  • 报文合法性检查:非信任口收到的Offer/ACK直接丢弃,防止伪造服务器
  • 速率限制:限制非信任口每秒能通过的DHCP报文数量,防止洪泛

小技巧:我建议在配置DHCP Snooping时,同时开启DHCP Option 82功能。这个选项会在报文中插入接入端口信息,方便后续溯源。有一次客户投诉IP冲突,我就是靠Option 82里的端口信息,5分钟就定位到了具体是哪台交换机哪个端口。

4.3.1 华为交换机配置示例

以华为S系列交换机为例,配置其实不复杂:

# 全局启用DHCP Snooping
system-view
dhcp snooping enable

# 创建VLAN并启用DHCP Snooping
vlan 100
dhcp snooping enable

# 配置信任端口(连接DHCP服务器的端口)
interface GigabitEthernet0/0/1
dhcp snooping trusted

# 配置非信任端口的速率限制(每秒最多10个报文)
interface GigabitEthernet0/0/2
dhcp snooping check dhcp-request
dhcp snooping rate-limit 10

# 查看DHCP Snooping绑定表
display dhcp snooping binding

4.3.2 Cisco交换机配置示例

Cisco的配置思路类似,但命令稍有不同:

# 全局启用DHCP Snooping
ip dhcp snooping

# 指定DHCP Snooping作用的VLAN
ip dhcp snooping vlan 100

# 配置信任端口
interface GigabitEthernet0/1
ip dhcp snooping trust

# 配置非信任端口速率限制
interface GigabitEthernet0/2
ip dhcp snooping limit rate 10

# 查看绑定表
show ip dhcp snooping binding

4.3.3 配置后的效果对比

对比项 未配置DHCP Snooping 配置DHCP Snooping后
攻击者伪造MAC 可以无限发送Discover 速率限制,超阈值端口被err-disable
伪造DHCP服务器 任意端口可发Offer 仅信任端口可发Offer
地址池耗尽 几分钟内可能被耗尽 攻击报文被限速,地址池安全
合法用户影响 无法获取IP 正常获取IP不受影响

注意:配置速率限制时,阈值别设得太低。我曾经在一个视频会议系统上线时,把速率限制设成了每秒5个,结果会议终端批量上线时触发了限制,端口直接被err-disable了。建议根据实际环境调整,一般每秒10-20个是比较合理的范围。

4.4 进阶建议——组合拳效果更好

说实话,单靠DHCP Snooping还不够完美。我个人习惯打一套组合拳:

  • DHCP Snooping + DAI:动态ARP检测,防止ARP欺骗
  • DHCP Snooping + IP Source Guard:源地址校验,防止IP欺骗
  • 端口安全:限制端口最大MAC地址学习数量

这三者配合起来,基本能把二层网络的安全防护做到位。我在多个大型园区网项目中都是这么部署的,效果相当稳定。

好了,DHCP饿死攻击的原理和防御就讲到这里。记住一句话:信任是安全的最大敌人。在网络上,永远不要相信未经验证的DHCP报文。