第234篇:DHCP 饿死攻击与防护
关键词
DHCP饿死攻击、DHCP Starvation、DHCP欺骗、DHCP Snooping、IP地址耗尽、伪造DHCP服务器
一、DHCP 协议基础回顾
1.1 DHCP 工作流程
DHCP 获取 IP 的过程(DORA):
客户端 DHCP 服务器
│ │
│── DHCP Discover ──────────►│ 广播寻找 DHCP 服务器
│ │
│◄── DHCP Offer ────────────│ 服务器提供 IP 地址
│ IP: 192.168.1.100 │
│ Lease: 86400s │
│ │
│── DHCP Request ───────────►│ 确认选择该 IP
│ Request IP: 192.168.1.100│
│ │
│◄── DHCP ACK ──────────────│ 服务器确认租约
│ IP: 192.168.1.100 │
│ Gateway: 192.168.1.1 │
│ DNS: 8.8.8.8 │
└────────────────────────────┘
安全问题:
DHCP 协议无内置认证
客户端可以发送任意 MAC 地址
任何人都可以架设 DHCP 服务器
二、DHCP 饿死攻击
2.1 攻击原理
DHCP 饿死攻击(DHCP Starvation)通过发送大量伪造的 DHCP 请求,耗尽服务器的 IP 地址池:
正常情况:
IP 地址池 192.168.1.100 - 192.168.1.200 已分配:3 个 可用:98 个
攻击开始: 攻击者发送大量 DHCP Discover 每个包使用不同的伪造 MAC 地址
攻击工具:yersinia、dhcpstarv
攻击者 (MAC: AA:BB:CC:00:00:01) → 请求 IP 攻击者 (MAC: AA:BB:CC:00:00:02) → 请求 IP 攻击者 (MAC: AA:BB:CC:00:00:03) → 请求 IP ... 攻击者 (MAC: AA:BB:CC:00:00:100) → 请求 IP
攻击结果:
IP 地址池 192.168.1.100 - 192.168.1.200 已分配:100 个(全部耗尽) 可用:0 个
影响: 新设备无法获取 IP 地址 现有设备续约可能被拒绝 网络服务中断
2.2 攻击变种
变种 1:经典饿死(耗尽地址池)
目的:让所有合法用户无法获取 IP
方法:批量发送 DHCP Discover(伪造 MAC)
速度:100 个 IP 可在 2-3 秒内耗尽
变种 2:快速续约(锁定释放)
攻击者获取 IP 后立即 Release
然后再次请求同一 IP
消耗服务器处理能力
变种 3:选择性饿死(特定 VLAN)
如果网络有多 VLAN
攻击者伪装对应 VLAN 的 DHCP 请求
耗尽特定 VLAN 的地址池
2.3 攻击工具示例
yersinia 工具演示(攻击测试用):
# 启动 yersinia DHCP 攻击模式
yersinia -I
# 在交互界面选择 DHCP 攻击
1. Launch attack
2. DHCP starvation
3. Send DHCP Discover packets with random MAC
# 命令行快速攻击
yersinia dhcp -attack 1 -interval 10
dhcpstarv(Python 工具):
# 安装
pip install dhcpstarv
# 攻击:快速耗尽 DHCP 地址池
dhcpstarv -i eth0
# 限制:每秒 10 个请求,更隐蔽
dhcpstarv -i eth0 -r 10
三、DHCP 欺骗攻击
3.1 伪造 DHCP 服务器
攻击者与饿死攻击配合,部署伪造 DHCP 服务器:
完整攻击链:
步骤 1:DHCP 饿死(先耗尽合法 DHCP)
攻击者 合法 DHCP 伪造 DHCP
│ │ │
│── 100 个伪造 Discover ────►│ │
│◄── 100 个 Offer ──────────│ │
│── 100 个 Request ────────►│ │
│◄── 100 个 ACK ───────────│ │
│ │ 地址池耗尽 │
│ │ │
步骤 2:新设备接入
新设备 合法 DHCP 伪造 DHCP
│ │ │
│── Discover ───────────────►│ 无可用 IP → 无响应 │
│ │ │
│── Discover ────────────────────────────────────►│
│ │ │
│◄── Offer ───────────────────────────────────────│
│ IP: 192.168.1.100 │ │
│ Gateway: 192.168.1.1 ← 攻击者控制 │
│ DNS: 攻击者 DNS │
│ │ │
└── 新设备使用攻击者分配的 IP ──────────────────►│
└─ 流量经过攻击者 → 中间人攻击
3.2 伪造 DHCP 的危害
伪造 DHCP 可以实现:
1. DNS 劫持
分配恶意 DNS 服务器
用户访问银行 → DNS 返回钓鱼 IP
2. 中间人攻击
分配的网关是攻击者设备
所有流量经过攻击者
可以窃听/篡改通信
3. 重复 IP 冲突
伪造 DHCP 分配与已有设备相同的 IP
导致网络冲突和故障
四、DHCP Snooping 防护
4.1 DHCP Snooping 原理
DHCP Snooping 是交换机上的安全功能,在 DHCP 客户端和服务器之间建立信任:
DHCP Snooping 架构:
┌───────────────┐
│ 合法 DHCP 服务器 │
│ (信任端口) │
└───────┬───────┘
│ Gi0/0/24 (信任)
┌───────────┴───────────┐
│ 交换机 │
│ (DHCP Snooping) │
└──┬────────┬──────────┘
Gi0/0/1 │ │ Gi0/0/2
(非信任) │ │ (非信任)
| 合法 客户端 | 攻击者 | |
|---|---|---|
DHCP Snooping 规则: 信任端口(Trust):可以发送所有 DHCP 消息 非信任端口(Untrust):只能发送 DHCP Request/Discover 非信任端口丢弃:DHCP Offer/ACK 等来自服务器的消息
4.2 DHCP Snooping 配置
# 华为交换机 DHCP Snooping 配置
# 全局使能 DHCP Snooping
dhcp enable
dhcp snooping enable
# 配置信任端口(连接合法 DHCP 服务器的端口)
interface GigabitEthernet0/0/24
dhcp snooping trusted # 信任端口
# 配置非信任端口(连接客户端,默认非信任)
interface GigabitEthernet0/0/1
dhcp snooping enable # 接口使能
dhcp snooping check dhcp-giaddr enable # 检查 giaddr 字段
dhcp snooping max-user 5 # 最大 MAC 数量限制
!
interface GigabitEthernet0/0/2
dhcp snooping enable
dhcp snooping max-user 3
# 查看 DHCP Snooping 状态
display dhcp snooping
DHCP snooping status: Enabled
Trusted port:
GigabitEthernet0/0/24
DHCP snooping database:
MAC Address IP Address Lease VLAN Interface
00e0-fc12-0001 192.168.1.100 3600 10 GE0/0/1
00e0-fc12-0002 192.168.1.101 3600 10 GE0/0/1
00e0-fc12-0003 192.168.1.102 3600 10 GE0/0/2
4.3 DHCP Snooping 的安全功能
DHCP Snooping 提供的安全能力:
1. 防伪造 DHCP 服务器
非信任端口丢弃 DHCP Offer/ACK
只有信任端口可以发送服务器消息
成功阻止假冒 DHCP
2. 防 DHCP 饿死攻击
限制端口上每秒 DHCP 请求数量
限制端口上绑定的 MAC 数量
# 防饿死配置
interface GigabitEthernet0/0/1
dhcp snooping enable
dhcp snooping check dhcp-rate enable # 速率检查
dhcp snooping dhcp-rate 10 # 每秒最多 10 个请求
dhcp snooping max-user 5 # 最多 5 个绑定
3. DHCP Snooping 绑定表
记录:MAC - IP - VLAN - 接口 - 租约
用于防 ARP 欺骗(配合 DAI)
用于防 IP 源欺骗(配合 IPSG)
display dhcp snooping binding
MAC Address IP Address VLAN Interface Lease
00e0-fc12-0001 192.168.1.100 10 GE0/0/1 3600s
00e0-fc12-0002 192.168.1.101 10 GE0/0/1 3600s
五、DAI 与 IPSG 联动防护
5.1 DAI(动态 ARP 检测)
DHCP Snooping 绑定表可以用于 DAI 防 ARP 欺骗:
DAI 工作原理:
DHCP Snooping 绑定表:
┌────────────────────────────────┐
│ MAC: 00e0-fc12-0001 │
│ IP: 192.168.1.100 │
│ Interface: GigabitEthernet0/0/1│
└────────────────────────────────┘
攻击者发送伪造 ARP:
"192.168.1.100 is at AA:BB:CC:DD:EE:FF"
(来自 Gi0/0/2)
DAI 检查:ARP 中的 MAC/IP 与绑定表不匹配
→ 丢弃 ARP 包
→ 记录告警
DAI 配置:
# 使能 DAI
arp anti-attack check user-bind enable
#
# 在 VLAN 上使能 DAI
vlan 10
arp anti-attack check user-bind enable
#
# 检查 ARP 请求/响应
interface GigabitEthernet0/0/1
arp trusted no # 非信任
arp anti-attack source-mac # 检查源 MAC
arp anti-attack source-ip # 检查源 IP
5.2 IPSG(IP 源防护)
IPSG 使用 DHCP Snooping 绑定表防止 IP 欺骗:
IPSG 原理:
只允许绑定表中记录的 IP 从对应接口发送数据
其他 IP 的流量被丢弃
配置:
# 使能 IPSG
interface GigabitEthernet0/0/1
ip source check user-bind enable # 检查源 IP
# 只允许 192.168.1.100 从 Gi0/0/1 发送数据
#
# VLAN 级配置
vlan 10
ip source check user-bind enable
效果:
攻击者 Gi0/0/2 发送 192.168.1.100 的数据 → 丢弃
攻击者无法冒充他人 IP
六、DHCP 的其他安全措施
6.1 DHCP 选项 82(中继代理信息)
DHCP Option 82 在中继场景下增加位置信息:
交换机添加 Option 82:
交换机(中继) Option 82: Circuit ID: VLAN 10 Remote ID: Switch-MAC
服务器根据 Option 82 分配 IP: 可以基于接入位置分配不同网段 防止跨接口 DHCP 请求欺骗
配置: interface Vlanif10 dhcp relay option82 insert enable # 插入 Option 82 dhcp relay option82 rebuild enable # 重建 Option 82
6.2 DHCP 信用度检查
# 华为交换机 DHCP 安全增强
# 基于 MAC 的 DHCP 请求检查
dhcp snooping check mac-address # 检查 CHADDR 与源 MAC
# 防止客户端使用不同 MAC 请求 DHCP
# DHCP 租约限制
dhcp snooping max-user-number 100 # 全局 MAC 绑定限制
# 绑定表写盘保存(重启不丢失)
dhcp snooping user-bind file dhcp-snooping.txt
dhcp snooping user-bind auto-save interval 3600 # 每 1 小时自动保存
# 查看 DHCP Snooping 统计
display dhcp snooping statistics
DHCP Packets received:
Total: 1000
DHCP Discover: 500
DHCP Request: 400
DHCP Release: 100
DHCP Decline: 0
Dropped packets:
Fake server: 50 # 阻止 50 个伪造服务器包
Rate limit: 10 # 限制 10 个速率超限包
MAC check: 5 # 5 个 MAC 检查失败
七、总结
| 知识点 | 核心要点 |
|---|---|
| DHCP 饿死攻击 | 伪造 MAC 批量请求 IP,耗尽地址池 |
| DHCP 欺骗攻击 | 部署伪造 DHCP,分配恶意网关/DNS |
| 攻击链 | 饿死→耗尽→伪服务器→中间人 |
| DHCP Snooping | 信任端口/非信任端口隔离 DHCP 消息 |
| 防饿死措施 | 限速 + 最大绑定数 |
| DAI 和 IPSG | 利用绑定表防 ARP 欺骗和 IP 源欺骗 |
| Option 82 | 中继代理信息,位置感知 |
八、思考
- DHCP 饿死攻击的原理是什么?攻击成功后对网络有什么影响?
- DHCP 欺骗攻击如何与饿死攻击配合实现完整攻击链?
- DHCP Snooping 信任端口和非信任端口的区别是什么?
- 如何在交换机上配置 DHCP Snooping 防止饿死攻击?
- DHCP Snooping 绑定表如何支持 DAI(动态 ARP 检测)和 IPSG(IP 源防护)工作?
下篇预告:第235篇《VLAN Hopping 攻击与防护》——利用 VLAN 标签欺骗跳转到其他 VLAN,攻击者如何突破 VLAN 隔离以及防护策略。