NDP 安全:防御 IPv6 网络攻击
保护 IPv6 网络免受基于 NDP 的攻击。了解 RA Guard、SEND、DHCPv6 Shield,以及如何防止恶意路由器通告。
为什么 NDP 安全很重要#
邻居发现协议(NDP)取代了 IPv6 中的 ARP,处理地址解析、路由器发现和网络配置。与 ARP 的简单请求-响应模型不同,NDP 管理前缀通告、重复地址检测和路由器通告——所有关键网络功能。
问题是:NDP 是为受信任的本地网络设计的。它没有身份验证。LAN 上的任何设备都可以发送路由器通告,声称自己是默认网关,通告任意前缀,或毒害邻居缓存。在具有访客访问、BYOD 策略和潜在内部威胁的现代网络中,这种信任模型会崩溃。
攻击影响范围从拒绝服务(破坏连接)到中间人攻击(拦截流量)。随着 IPv6 部署的增长,攻击者越来越多地针对网络团队尚未保护的 NDP 漏洞。
TL;DR - 快速摘要
要点:
- NDP 没有身份验证:任何设备都可以发送路由器通告或毒害邻居缓存
- RA Guard 是必不可少的:在所有接入交换机上部署以阻止恶意路由器通告
- 分层安全功能:同时使用 RA Guard、DHCPv6 Guard 和 ND Inspection 进行纵深防御
- SEND 存在但不实用:加密身份验证需要 PKI,设备支持有限
- 监控攻击:跟踪 RA 频率、邻居缓存变动和安全违规
跳转至: RA Guard 配置 | 攻击模拟 | 部署指南
为什么 NDP 安全很重要#
NDP 是为受信任的本地网络设计的,但具有访客访问、BYOD 策略和潜在内部威胁的现代网络打破了这种信任模型。
NDP 攻击向量#
了解威胁有助于确定防御优先级。以下是主要攻击模式:
恶意路由器通告#
最常见和最危险的攻击。恶意设备发送具有以下内容的路由器通告(RA):
- 不同的默认网关(中间人攻击)
- 更短的路由器生命周期(通过强制不断重新配置进行 DoS)
- 恶意 DNS 服务器
- 无效前缀
- 过多的 RA 泛洪网络
影响:客户端自动重新配置,通过攻击者的系统发送流量或完全失去连接。
**真实场景:**员工将家用路由器带到办公室并插入。路由器在企业网络上发送 RA。数百个系统重新配置,失去互联网访问,或者更糟,通过未管理的设备路由。
邻居缓存投毒#
攻击者发送伪造的邻居通告,声称拥有另一个设备的 IPv6 地址。网络使用攻击者的 MAC 地址更新其邻居缓存。
合法:2001:db8::100 → MAC aa:bb:cc:dd:ee:ff
攻击: 2001:db8::100 → MAC 11:22:33:44:55:66(攻击者)结果:发往合法主机的流量改为发送给攻击者。
这是 IPv6 版本的 ARP 投毒。相同的攻击概念,不同的协议。
重复地址检测(DAD)攻击#
当节点通过 SLAAC 配置 IPv6 地址时,它执行 DAD——发送邻居请求以验证没有其他设备使用该地址。如果它收到声称该地址的邻居通告,节点将拒绝配置它。
攻击者响应所有 DAD 尝试,阻止合法节点获取地址。你的网络充满"IPv6: DAD 失败"日志,设备无法获取地址。
重定向消息攻击#
路由器发送 ICMPv6 重定向消息,告诉主机有关更好的下一跳选项。在没有身份验证的情况下,攻击者伪造重定向以劫持流量流。
不如 RA 攻击常见,但在针对特定通信时同样危险。
路由器请求泛洪#
虽然影响较小,攻击者可以用路由器请求淹没网络,导致合法路由器浪费资源生成响应。与其他攻击结合使用,这会放大中断。
防御机制#
存在多种安全技术,从简单的交换机功能到密码身份验证。分层这些防御以实现全面保护。
RA Guard:第一道防线#
RA Guard(RFC 6105)是一个交换机功能,用于过滤路由器通告消息。将其视为 RA 的端口安全——只有授权端口可以发送它们。
RA Guard 的工作原理#
交换机检查 ICMPv6 数据包以查找路由器通告并应用策略:
┌─────────────────────────────────────────┐
│ 交换机端口类型 │
├─────────────────────────────────────────┤
│ 主机端口:阻止所有 RA │
│ 路由器端口:允许来自受信任 IP 的 RA │
└─────────────────────────────────────────┘配置定义:
- **面向主机的端口:**完全阻止 RA(终端用户连接)
- **面向路由器的端口:**允许 RA(到合法路由器的上行链路)
- **设备角色验证:**将源地址与授权路由器匹配
Cisco RA Guard 配置#
! 为受信任的路由器定义 IPv6 访问列表
ipv6 access-list TRUSTED-ROUTERS
permit ipv6 host 2001:db8::1 any
permit ipv6 host 2001:db8::2 any
! 创建 RA Guard 策略
ipv6 nd raguard policy HOST-POLICY
device-role host
ipv6 nd raguard policy ROUTER-POLICY
device-role router
match ipv6 access-list TRUSTED-ROUTERS
! 应用于 VLAN
interface range GigabitEthernet1/0/1-48
description Access ports
ipv6 nd raguard attach-policy HOST-POLICY
interface GigabitEthernet1/0/49
description Uplink to router
ipv6 nd raguard attach-policy ROUTER-POLICYJuniper RA Guard 配置#
# 在访问端口上定义 RA Guard
set protocols router-advertisement interface ge-0/0/0.0 no-advertise
# 在上行链路上允许 RA
set protocols router-advertisement interface ge-0/0/23.0Linux 网桥 RA Guard#
对于基于 Linux 的交换机或 KVM 虚拟化:
# 在网桥端口上启用 RA Guard
echo 1 > /sys/class/net/vnet0/brport/protect_ra
# 或使用 ebtables
ebtables -A FORWARD -p IPv6 --ip6-proto ipv6-icmp \
--ip6-icmp-type router-advertisement -i vnet0 -j DROPRA Guard 限制#
RA Guard 在第 2 层检查数据包。攻击者可以通过以下方式绕过它:
- **分片:**跨 IPv6 片段拆分 RA(第一个片段不显示 ICMPv6 类型)
- **隧道:**将 RA 封装在其他协议中
- **扩展头:**添加逐跳或目标选项头
现代交换机包括"深度检查"模式,可重新组装片段并解析扩展头。验证硬件是否支持此功能,或接受剩余风险。
分片绕过
传统的 RA Guard 实现仅检查第一个片段。攻击者对 RA 进行分片以绕过过滤。确保交换机支持 RFC 7113 增强的 RA Guard,具有片段处理功能。
DHCPv6 Guard#
类似于 RA Guard,DHCPv6 Guard 阻止来自未授权端口的 DHCPv6 服务器消息。这可以防止恶意 DHCPv6 服务器发出地址或 DNS 配置。
Cisco DHCPv6 Guard#
ipv6 dhcp guard policy CLIENT-POLICY
device-role client
ipv6 dhcp guard policy SERVER-POLICY
device-role server
interface range GigabitEthernet1/0/1-48
ipv6 dhcp guard attach-policy CLIENT-POLICY
interface GigabitEthernet1/0/49
ipv6 dhcp guard attach-policy SERVER-POLICYDHCPv6 Guard 在这些消息类型上运行:
- ADVERTISE(服务器 → 客户端)
- REPLY(服务器 → 客户端)
- RECONFIGURE(服务器 → 客户端)
阻止来自主机端口的这些消息可以防止恶意 DHCPv6 服务器,同时允许合法的客户端请求。
SEND:密码身份验证#
安全邻居发现(SEND,RFC 3971)为 NDP 消息添加密码签名。它提供强身份验证,但需要 PKI 基础设施,并未广泛部署。
SEND 的工作原理#
SEND 使用 CGA(密码生成的地址),其中 IPv6 地址密码绑定到公钥:
- 节点生成公钥/私钥对
- 使用接口 ID 中公钥的哈希创建 IPv6 地址
- 使用私钥签署 NDP 消息
- 接收者验证签名是否与地址匹配
┌─────────────────────────────────────────────────┐
│ 路由器通告(带 SEND) │
├─────────────────────────────────────────────────┤
│ 标准 RA 字段 │
│ + CGA 参数(公钥、修饰符) │
│ + RSA 签名 │
│ + 时间戳 │
│ + Nonce(用于重放保护) │
└─────────────────────────────────────────────────┘为什么 SEND 不广泛#
尽管自 2005 年以来已标准化,但 SEND 采用率仍然很低:
优点:
- 密码安全(没有私钥无法伪造)
- 不需要交换机支持(端到端安全)
- 保护所有 NDP 消息类型
缺点:
- 复杂的 PKI 基础设施要求
- 有限的操作系统支持(存在一些实现,很少默认启用)
- 签名验证的性能开销
- 向后兼容性问题(SEND 和非 SEND 节点互操作性不佳)
- 地址管理复杂性(CGA 地址不是人类友好的)
大多数组织发现 RA Guard 和 DHCPv6 Guard 具有更好的成本效益比。
何时考虑 SEND#
高度安全的环境,其中:
- 你控制所有端点(可以在任何地方强制执行 SEND)
- PKI 基础设施已经存在
- 性能影响是可以接受的
- 监管合规要求密码 NDP 保护
IPv6 第一跳安全套件#
现代交换机将 NDP 安全功能捆绑到全面的第一跳安全中:
IPv6 源防护#
验证源 IPv6 地址和 MAC 地址是否与通过以下方式学习的绑定匹配:
- NDP 窥探(跟踪合法的邻居通告)
- DHCPv6 窥探(跟踪地址分配)
- 手动绑定
阻止具有伪造源地址的数据包。
IPv6 前缀防护#
根据配置的前缀策略验证路由器通告和 DHCPv6 前缀委派消息。防止攻击者通告未授权的前缀。
IPv6 目标防护#
强制数据包中的目标地址与邻居发现绑定表匹配。防止流量到不存在的地址(在某些 DoS 攻击中使用)。
ND 检查#
窥探所有 NDP 消息并构建映射 IPv6 地址 → MAC 地址 → 端口的绑定表。其他安全功能引用这些绑定进行验证。
Cisco 完整 FHS 配置#
! 在交换机上启用 IPv6
ipv6 unicast-routing
! 创建 FHS 策略
ipv6 access-list ipv6-acl-fhs
permit ipv6 any any
ipv6 nd inspection policy FHS-POLICY
device-role switch
drop-unsecure
limit address-count 1000
tracking enable
ipv6 snooping policy FHS-SNOOPING
device-role switch
! 应用于 VLAN
vlan configuration 10
ipv6 nd inspection attach-policy FHS-POLICY
ipv6 snooping attach-policy FHS-SNOOPING
! 配置受信任的端口
interface GigabitEthernet1/0/49
ipv6 nd inspection trust
ipv6 snooping trust监控和检测#
预防还不够。监控攻击尝试和异常。
要跟踪的关键指标#
路由器通告活动:
# 监控 RA 频率
rdisc6 eth0
# 预期:每 200-600 秒来自已知路由器的 RA
# 警报:每秒多个 RA,来自未知来源的 RA邻居发现消息速率:
# Linux 数据包计数
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j LOG --log-prefix "RA: "
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j LOG --log-prefix "NA: "
# 观察日志
journalctl -f | grep -E "RA:|NA:"邻居缓存流失:
# 监控邻居表更改
watch -n 1 "ip -6 neigh show | wc -l"
# 高流失表示可能的投毒交换机安全违规#
监控 RA Guard 和 DHCPv6 Guard 违规:
# Cisco
show ipv6 nd raguard policy
show ipv6 dhcp guard policy
# 查找丢弃计数器递增
show platform hardware fed switch active qos queue stats internal cpu policerSIEM 集成#
将安全事件转发到 SIEM:
检测规则:
- 短时间内来自不同来源的多个路由器通告
- 具有异常生命周期的 RA(非常短或非常长)
- 高速率的邻居请求(潜在的 DAD 攻击)
- 来自意外源地址的 RA
- 来自主机端口的 DHCPv6 服务器消息
示例 Splunk 查询:
index=network sourcetype=cisco:ios ipv6 "RA Guard" action=dropped
| stats count by src_ip, interface
| where count > 10专用安全工具#
**ndpmon:**开源 NDP 监控守护程序
# 安装
apt-get install ndpmon
# 在 /etc/ndpmon/config_ndpmon.xml 中配置允许的路由器
<router>
<mac>aa:bb:cc:dd:ee:ff</mac>
<lla>fe80::1</lla>
</router>
# 开始监控
ndpmon -c /etc/ndpmon/config_ndpmon.xml警报:
- 恶意 RA
- 意外的前缀更改
- MAC/IPv6 绑定更改
- DAD 攻击
实际部署指南#
系统地实施 NDP 安全以避免中断合法流量。
第 1 阶段:可见性(第 1 周)#
**目标:**了解当前的 NDP 行为
- 在交换机上启用 NDP 日志记录
- 在每个 VLAN 上部署 ndpmon 或类似工具
- 记录所有合法路由器(MAC、IPv6 地址)
- 捕获一周的基线 RA/NA 流量
- 识别任何意外来源
第 2 阶段:被动保护(第 2 周)#
**目标:**在不强制执行的情况下启用检测
- 在监控模式下配置 RA Guard(如果支持)
- 设置违规警报
- 验证没有来自合法基础设施的误报
- 根据警报调整策略
第 3 阶段:主动保护(第 3-4 周)#
**目标:**强制执行安全策略
- 在测试 VLAN 上以阻止模式启用 RA Guard
- 验证客户端连接和地址分配
- 逐步扩展到生产 VLAN
- 添加 DHCPv6 Guard 和其他 FHS 功能
- 记录异常和受信任的端口
第 4 阶段:持续管理#
**目标:**维护安全态势
- 每周查看违规日志
- 基础设施更改时更新受信任的路由器列表
- 在漏洞评估期间测试安全性
- 培训团队 NDP 安全概念
配置最佳实践#
对于接入交换机#
! 默认立场:所有端口都是面向主机的
ipv6 nd raguard policy DEFAULT-HOST
device-role host
! 默认应用于所有端口
interface range GigabitEthernet1/0/1-48
ipv6 nd raguard attach-policy DEFAULT-HOST
ipv6 dhcp guard attach-policy CLIENT-POLICY
ipv6 snooping
! 明确信任上行链路(使用手动覆盖)
interface GigabitEthernet1/0/49
description Uplink to distribution
ipv6 nd raguard attach-policy ROUTER-POLICY
ipv6 dhcp guard attach-policy SERVER-POLICY
ipv6 snooping trust**原则:**默认拒绝,显式允许。
对于分发/核心#
! 限制性较低,因为基础设施受控
! 但仍然验证来源
ipv6 nd raguard policy INFRA-POLICY
device-role router
match ipv6 access-list KNOWN-ROUTERS对于无线控制器#
访客网络特别容易受到攻击:
! 访客 SSID 上的严格 RA 阻止
ipv6 nd raguard policy GUEST-POLICY
device-role host
no-ra对于数据中心#
虚拟化环境需要在虚拟交换机上使用 RA Guard:
VMware:
- vSphere 6.5+ 支持 IPv6 安全策略
- 在分布式虚拟交换机上配置 RA Guard
- 应用于所有访客 VLAN
KVM/Linux 网桥:
# 在所有 VM 接口上启用 RA 保护
for interface in /sys/class/net/vnet*/brport/protect_ra; do
echo 1 > "$interface"
done攻击模拟测试#
在攻击者为你测试之前验证防御是否有效。
测试 RA Guard#
使用 radvd 从主机端口发送测试路由器通告:
# 安装 radvd
apt-get install radvd
# 配置测试 RA (/etc/radvd.conf)
interface eth0 {
AdvSendAdvert on;
prefix 2001:db8:bad::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
# 启动 radvd
systemctl start radvd
# 预期:RA Guard 阻止这些消息
# 验证:检查交换机日志以查看违规测试 ND 检查#
尝试邻居缓存投毒:
# 发送伪造的邻居通告
ndsend eth0 2001:db8::victim -a aa:bb:cc:dd:ee:ff --na-override
# 预期:源防护或 ND 检查阻止
# 验证:目标上的邻居缓存未更改专业测试工具#
THC IPv6 攻击工具包:
# 安装
apt-get install thc-ipv6
# 测试 RA 泛洪
flood_router6 eth0
# 测试 DAD 攻击
dos-new-ip6 eth0
# 预期:所有攻击都被 FHS 功能阻止用于自定义测试的 Scapy:
from scapy.all import *
# 制作恶意 RA
ra = IPv6(dst="ff02::1")/ICMPv6ND_RA()/ICMPv6NDOptPrefixInfo(prefix="2001:db8:bad::")
send(ra, iface="eth0")仅在隔离的测试网络上或经过明确授权后执行攻击测试。
常见错误#
1. 忘记上行链路信任#
在所有端口上配置 RA Guard 而不显式信任上行链路会阻止合法的 RA。整个网络失去 IPv6 连接。
**症状:**启用 RA Guard 后客户端停止接收地址。
**修复:**识别并信任连接到合法路由器的端口。
2. VLAN 覆盖不一致#
将安全应用于某些 VLAN 但不应用于其他 VLAN。攻击者连接到未受保护的 VLAN 并进行透视。
**修复:**将第一跳安全策略应用于所有 VLAN,包括管理网络。
3. 生产前不测试#
启用阻止模式而不进行测试会在合法流量被过滤时导致中断。
**修复:**始终先在实验室环境或监控模式下测试。
4. 忽略无线网络#
如果未正确配置,无线控制器和接入点通常会绕过 RA Guard。
**修复:**验证安全策略适用于无线 VLAN。从 WiFi 客户端测试。
5. 忽视虚拟环境#
VM 可以在虚拟交换机内发送 RA,攻击同一主机上的其他 VM。
**修复:**在虚拟交换机和虚拟机管理程序网络上启用 RA 保护。
当安全破坏合法用例时#
某些场景需要来自主机端口的 RA:
桥接模式路由器#
桥接/直通模式下的小型路由器从上游中继 RA。
**解决方案:**显式信任这些端口或使用不同的网络设计。
路由器实验室环境#
测试 OSPF、BGP 或路由器配置需要发送 RA。
**解决方案:**为允许来自任何来源的 RA 的实验室 VLAN 专用安全策略。
移动热点网络共享#
提供热点功能的智能手机发送 RA。
**解决方案:**访客网络可以允许这样做,但企业网络应阻止它。
记录所有异常并定期审查。
未来:正在进行的工作#
NDP 安全不断发展,但挑战仍然存在:
积极的发展:
- 更广泛的 RA Guard 部署
- 改进的交换机对深度检查的支持
- 更好地与 SIEM/SOC 工作流程集成
持续挑战:
- SEND 采用仍然很少
- 许多物联网设备缺乏安全意识
- 与 IPv4 的简单 ARP 相比,操作复杂性
新兴技术:
- 软件定义网络(SDN)启用更灵活的安全策略
- NDP 流量异常检测的机器学习
- 对检测到的攻击的自动响应
立即开始保护 NDP#
NDP 攻击是真实的且不断增加。安全机制存在并且有效——它们只需要部署。
最小可行的 NDP 安全:
- 在所有接入交换机上启用 RA Guard
- 仅信任上行链路端口
- 监控违规
- 响应警报
这可以以最小的努力阻止 95% 的 NDP 攻击。添加 DHCPv6 Guard、源防护和全面监控以实现深度防御。
不要等待攻击才开始认真对待 NDP 安全。你的 IPv4 网络有防火墙规则、端口安全和 DHCP 窥探。IPv6 值得同样的关注。
相关文章#
- IPv6 邻居发现协议 - NDP 的工作原理及其重要性
- IPv6 安全最佳实践 - 全面的 IPv6 安全指南
- IPv6 防火墙配置 - 在网络边缘保护 IPv6
常见问题#
RA Guard 是否足够,还是需要 SEND?
RA Guard 为大多数网络提供了足够的保护。SEND 提供更强的密码安全性,但需要大量的基础设施投资和有限的设备支持。从 RA Guard 和其他第一跳安全功能开始。仅在你控制所有端点的高度敏感环境中考虑 SEND。
攻击者可以通过分片绕过 RA Guard 吗?
较旧的 RA Guard 实现可以用分片的 RA 绕过。现代交换机支持 RFC 7113,它添加了片段重组和扩展头解析。验证交换机固件是否支持增强的 RA Guard。如果没有,请接受这一点作为剩余风险或升级硬件。
我应该阻止所有 ICMPv6 以防止 NDP 攻击吗?
不。ICMPv6 是 IPv6 操作的基础——它处理 NDP、路径 MTU 发现和错误报告。阻止所有 ICMPv6 会完全破坏 IPv6。使用有针对性的安全功能(RA Guard、DHCPv6 Guard),这些功能过滤特定端口上的特定消息类型,而不是完全阻止 ICMPv6。
如何在没有托管交换机的网络上保护 IPv6?
没有交换机级 RA Guard,你的选择有限:
- 如果端点支持,则部署 SEND(罕见)
- 使用基于主机的防火墙限制客户端接受的 RA
- 实施网络分段以限制攻击范围
- 使用 ndpmon 等工具监控以检测攻击
- 考虑升级到具有 IPv6 安全功能的托管交换机
基于主机的安全性不太可靠,因为每个端点都必须正确配置,但它比什么都没有好。