第234篇:DHCP 饿死攻击与防护
关键词:DHCP耗尽、DHCP Starvation、DHCP欺骗、DHCP Snooping、DAI、IP Source Guard
一、引言
DHCP(Dynamic Host Configuration Protocol)是局域网中最基础也最重要的服务之一,负责自动分配IP地址。然而,DHCP协议在设计时几乎没有考虑安全性:所有消息以广播形式传输,客户端和服务器均不对报文来源做任何身份验证。
DHCP饿死攻击(DHCP Starvation Attack)通过耗尽DHCP服务器的地址池资源,使合法用户无法获取IP地址,导致网络不可用。攻击者通常还会结合DHCP欺骗(Rogue DHCP Server),在耗尽地址池后提供虚假配置,将用户流量引流到攻击者控制的网关上。
二、核心概念
2.1 DHCP协议基础
| 步骤 | 报文类型 | 方向 | 目的 |
|---|---|---|---|
| 1 | DHCP Discover | 客户端→服务器(广播) | 寻找可用的DHCP服务器 |
| 2 | DHCP Offer | 服务器→客户端(广播/单播) | 提供IP地址配置 |
| 3 | DHCP Request | 客户端→服务器(广播) | 请求使用服务器提供的IP |
| 4 | DHCP ACK | 服务器→客户端(广播/单播) | 确认IP地址分配 |
2.2 DHCP饿死攻击原理
攻击者构造大量伪造MAC地址的DHCP Discover报文,以极高频率发送给DHCP服务器。由于每个Discover报文携带不同的伪造MAC地址,DHCP服务器认为都是不同的客户端请求,逐一分配IP地址。

2.3 DHCP攻击组合拳
| 攻击阶段 | 攻击方式 | 效果 |
|---|---|---|
| 第一阶段 | DHCP饿死(耗尽地址池) | 合法用户无法获取IP |
| 第二阶段 | rogue DHCP服务器(DHCP欺骗) | 提供虚假IP/网关/DNS |
| 第三阶段 | DNS劫持 | 将用户请求重定向到恶意网站 |
| 第四阶段 | 中间人攻击 | 截获和篡改用户通信内容 |
2.4 DHCP Snooping工作原理
DHCP Snooping是交换机层面的防护技术,通过在交换机上建立DHCP Snooping绑定表,区分信任端口和非信任端口。
| 端口类型 | 行为 |
|---|---|
| 信任端口 | 允许所有DHCP报文通过(连接合法DHCP服务器) |
| 非信任端口 | 只允许DHCP Discover和DHCP Request(客户端报文)通过 |
三、技术细节
3.1 DHCP Snooping绑定表
DHCP Snooping绑定表记录了每个合法IP地址与MAC地址、VLAN、端口和租期的映射关系:
| 字段 | 说明 | 示例 |
|---|---|---|
| MAC地址 | 客户端MAC | 00:11:22:33:44:55 |
| IP地址 | 分配的IP | 10.0.0.100 |
| 租期 | 剩余租期(秒) | 3500 |
| VLAN ID | 所属VLAN | 10 |
| 接口 | 连接端口 | GE0/0/1 |
| 绑定类型 | 动态/静态 | Dynamic |
3.2 DAI(动态ARP检测)
DAI利用DHCP Snooping绑定表验证ARP报文:
| 验证项 | 说明 |
|---|---|
| IP-MAC绑定 | ARP报文中的IP和MAC必须匹配绑定表记录 |
| 端口验证 | ARP报文必须从绑定表中记录的端口发出 |
| VLAN验证 | ARP报文必须属于绑定表中记录的VLAN |
DAI有效防止ARP欺骗攻击,是DHCP Snooping的延伸安全能力。
3.3 IP Source Guard
IP Source Guard基于DHCP Snooping绑定表,仅允许绑定表中记录的IP-MAC组合通过指定端口:
| 模式 | 说明 |
|---|---|
| IP验证 | 仅验证源IP地址是否在绑定表中 |
| IP+MAC验证 | 同时验证源IP和源MAC是否匹配绑定表 |
3.4 防护技术对比
| 技术 | 部署位置 | 防护目标 | 性能影响 |
|---|---|---|---|
| DHCP Snooping | 接入交换机 | DHCP欺骗、饿死攻击 | 低 |
| DAI | 接入交换机 | ARP欺骗 | 低 |
| IP Source Guard | 接入交换机 | IP地址欺骗 | 低 |
| 端口安全 | 接入交换机 | MAC地址伪造 | 极低 |
| DHCP Rate Limit | 接入交换机 | DHCP报文频率限制 | 极低 |
四、实战配置/案例分析
4.1 华为交换机DHCP防护配置
# =============================
# 接入层交换机配置
# =============================
# 1. 全局启用DHCP Snooping
dhcp snooping enable
# 2. 在VLAN中启用DHCP Snooping
dhcp snooping vlan 10 20 30
# 3. 配置DHCP Snooping信任端口(连接合法DHCP服务器)
interface GigabitEthernet0/0/24
# 连接上行链路/DHCP服务器的端口
dhcp snooping trusted
quit
# 4. 非信任端口(接入用户端口)自动为非信任状态
# 验证非信任端口配置
display dhcp snooping interface GigabitEthernet0/0/1
# 5. 配置DHCP报文速率限制(防止饿死攻击)
interface GigabitEthernet0/0/1
# 限制每秒DHCP报文数
dhcp snooping limit rate 5
quit
# 批量配置所有接入端口
port-range GigabitEthernet 0/0/1 to 0/0/23
dhcp snooping limit rate 5
quit
# 6. 启用IP Source Guard(基于DHCP Snooping绑定表)
interface GigabitEthernet0/0/1
ip source check user-bind enable
# 验证IP+MAC
ip source check source-ip mac enable
quit
# 7. 启用DAI(动态ARP检测)
# 注:DAI命令因VRP版本而异,以下为通用语法
arp anti-attack check user-bind enable
interface GigabitEthernet0/0/1
arp check user-bind enable
quit
# 8. 配置端口安全(限制MAC数量)
interface GigabitEthernet0/0/1
port-security enable
port-security max-mac-count 2
port-security protect-action restrict
quit
# =============================
# 核心层交换机配置
# =============================
# 9. 核心交换机上行端口设为信任
interface 100GE1/0/1
dhcp snooping trusted
quit
# 10. 查看DHCP Snooping绑定表
display dhcp snooping binding
display dhcp snooping statistics
4.2 故障排查案例:接入层大面积终端无法获取IP
故障现象:某办公楼层接入交换机下,约80%的终端无法通过DHCP获取IP地址,显示"IP地址冲突"或"网络无Internet访问权限"。
排查步骤:
- 检查DHCP服务器地址池状态
# 在DHCP服务器上检查地址池利用率
display ip pool office-vlan
地址池利用率99%,仅剩几个空闲地址。
- 检查DHCP Snooping绑定表
# 在接入交换机上查看绑定表
display dhcp snooping binding | exclude VLAN-ID 10
发现大量异常MAC地址(如AA:AA:AA:xx:xx:xx格式),集中在一个接入端口。
- 定位攻击端口
display dhcp snooping statistics interface
# 端口GE0/0/15的DHCP Discover报文计数远超其他端口
-
根因分析 端口GE0/0/15下接入了一台恶意设备(可能是攻击者接入的笔记本),正在以每秒数百次的速率发送伪造MAC的DHCP Discover报文,耗尽地址池。
-
解决方案
# 步骤1:临时关闭攻击端口
interface GigabitEthernet0/0/15
shutdown
quit
# 步骤2:清理DHCP Snooping绑定表中的异常记录
reset dhcp snooping binding
# 步骤3:配置更严格的速率限制
interface GigabitEthernet0/0/15
dhcp snooping limit rate 2
port-security enable
port-security max-mac-count 2
port-security protect-action shutdown
quit
# 步骤4:在所有接入端口部署速率限制
port-range GigabitEthernet 0/0/1 to 0/0/48
dhcp snooping limit rate 3
quit
# 步骤5:端口恢复(确认设备合法后)
interface GigabitEthernet0/0/15
undo shutdown
quit
4.3 故障排查案例:Rogue DHCP服务器导致DNS劫持
故障现象:某咖啡厅的无线用户上网时,输入www.baidu.com却跳转到广告页面。
排查步骤:
- 检查终端DHCP获取的配置
# 在终端上查看DHCP获取的信息
ipconfig /all
发现DNS服务器指向192.168.1.200,而不是正常的运营商DNS(114.114.114.114)。
- 排查 rogue DHCP服务器
# 在交换机上查看DHCP报文来源
display dhcp snooping statistics
发现大量DHCP Offer报文从GE0/0/12端口发出(非信任端口),该端口不应有DHCP服务器报文。
- 解决方案
# 确认GE0/0/12只有信任端口(DHCP服务器)才能发送Offer
interface GigabitEthernet0/0/12
# 此端口未配置为信任端口,自动丢弃Offer/ACK报文
# 确认dhcp snooping配置
dhcp snooping trusted # 仅真正的DHCP服务器端口配置此命令
quit
# 对攻击端口进行处置
interface GigabitEthernet0/0/12
shutdown
quit
# 启用IP Source Guard进一步防护
dhcp snooping enable
dhcp snooping vlan 100
interface GigabitEthernet0/0/1
ip source check user-bind enable
quit
五、DHCP安全防护扩展指南
5.1 DHCP Snooping 绑定表结构
| 字段 | 说明 | 示例 |
|---|---|---|
| MAC地址 | 客户端MAC地址 | 00:1A:2B:3C:4D:5E |
| IP地址 | 分配的IP地址 | 10.0.1.100 |
| 租约时间(秒) | DHCP租约剩余时间 | 3500 |
| 类型 | Dynamic(动态)/Static(静态) | Dynamic |
| 接口 | 客户端所连接端口 | GigabitEthernet0/0/5 |
| VLAN | 客户端所在VLAN | 10 |
# 查看DHCP Snooping绑定表
display dhcp snooping binding
# 输出示例:
# MAC Address Ip Address Lease Time Type Interface
# 001A-2B3C-4D5E 10.0.1.100 3500s Dynamic GE0/0/5
# 001A-2B3C-4D5F 10.0.1.101 2800s Dynamic GE0/0/6
5.1 DHCP攻击链全景与分层防护

5.2 DHCPv6 安全防护对比
| 安全机制 | DHCPv4 | DHCPv6 | 说明 |
|---|---|---|---|
| DHCP Snooping | 支持 | 支持 | 华为设备支持DHCPv6 Snooping |
| DAI | 支持 | 支持(SAAD) | IPv6使用邻居发现替代ARP |
| IP Source Guard | 支持 | 支持 | IPv6基于DHCPv6绑定表 |
| RA Guard | 不适用 | 支持 | 防护Rogue路由器通告 |
| ND Inspection | 不适用 | 支持 | IPv6邻居发现检查 |
# DHCPv6 Snooping配置
dhcpv6 snooping enable
dhcpv6 snooping vlan 10
# 配置信任端口
interface GigabitEthernet0/0/48
dhcpv6 snooping trust
quit
# RA Guard配置(防Rogue RA)
interface GigabitEthernet0/0/1
nd-inspection ra-filter enable
quit
5.3 DHCP安全防护最佳实践检查清单
| 序号 | 加固项 | 优先级 | 配置命令 | 验证命令 |
|---|---|---|---|---|
| 1 | 全局启用DHCP Snooping | 必配 | dhcp snooping enable | display dhcp snooping |
| 2 | VLAN级启用DHCP Snooping | 必配 | dhcp snooping vlan 10 | display dhcp snooping vlan 10 |
| 3 | 上行端口设为信任端口 | 必配 | dhcp snooping trust | display dhcp snooping interface |
| 4 | 启用DHCP速率限制 | 必配 | dhcp snooping limit rate 10 | display dhcp snooping interface |
| 5 | 启用DAI动态ARP检测 | 推荐 | arp-detect enable | display arp-detect |
| 6 | 启用IP Source Guard | 推荐 | ip source check | display ip source check |
| 7 | 端口安全MAC限制 | 推荐 | port-security enable | display port-security |
| 8 | DHCP Snooping信息选项 | 推荐 | dhcp snooping information option | display dhcp snooping binding |
5.4 故障排查:DHCP Snooping导致合法用户无法获取IP
故障现象:启用DHCP Snooping后,某些端口下的终端无法获取IP地址。
排查步骤:
# 1. 检查端口信任状态
display dhcp snooping interface GigabitEthernet0/0/10
# 发现端口为非信任端口
# 2. 检查DHCP Snooping绑定表
display dhcp snooping binding interface GigabitEthernet0/0/10
# 绑定表为空,说明DHCP报文被丢弃
# 3. 根因分析
# 该端口下接了一台小型交换机,DHCP请求经过该交换机
# 交换机未配置为信任端口,DHCP Server的响应被丢弃
# 4. 修复方案
# 方案A:如果GE0/0/10下接的是终端,保持非信任即可
# 方案B:如果GE0/0/10下接的是交换机,需要启用中继信任
interface GigabitEthernet0/0/10
dhcp snooping trust
# 同时配置DHCP中继(如果需要)
ip dhcp relay select dhcp-group-1
quit
六、总结
| 知识点 | 要点 |
|---|---|
| DHCP饿死攻击 | 伪造大量MAC地址的Discover报文耗尽地址池 |
| DHCP欺骗 | rogue DHCP服务器提供虚假网络配置 |
| DHCP Snooping | 区分信任/非信任端口,建立绑定表 |
| DAI | 基于DHCP Snooping绑定表验证ARP报文 |
| IP Source Guard | 基于绑定表限制源IP和MAC |
| 速率限制 | 限制每个端口的DHCP报文发送速率 |
| 端口安全 | 限制端口最大MAC地址数 |
| 攻击链 | 饿死→欺骗→DNS劫持→中间人攻击 |
思考
- DHCP Snooping绑定表记录了所有合法IP-MAC映射,攻击者能否通过某种方式污染绑定表?
- 如果网络中没有部署DHCP Snooping,还有什么方法可以检测rogue DHCP服务器?
- DHCPv6是否存在与DHCPv4相同的安全问题?防护方案有何不同?
下篇预告:第235篇:VLAN Hopping 攻击与防护