第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 中继代理信息,位置感知

八、思考

  1. DHCP 饿死攻击的原理是什么?攻击成功后对网络有什么影响?
  2. DHCP 欺骗攻击如何与饿死攻击配合实现完整攻击链?
  3. DHCP Snooping 信任端口和非信任端口的区别是什么?
  4. 如何在交换机上配置 DHCP Snooping 防止饿死攻击?
  5. DHCP Snooping 绑定表如何支持 DAI(动态 ARP 检测)和 IPSG(IP 源防护)工作?

下篇预告:第235篇《VLAN Hopping 攻击与防护》——利用 VLAN 标签欺骗跳转到其他 VLAN,攻击者如何突破 VLAN 隔离以及防护策略。