11. Security Considerations (安全考虑)
邻居发现可能受到破坏网络操作或重定向流量的攻击。本节分析邻居发现的威胁并描述缓解机制。
11.1. Threat Analysis (威胁分析)
11.1.1. On-Link Threats (链路内威胁)
邻居发现的主要安全问题是同一链路上的节点可以发送伪造消息攻击其他节点。可能的攻击包括:
重定向攻击 (Redirect Attacks):
- 攻击者向受害者发送重定向消息,导致受害者通过攻击者而不是合法的第一跳路由器发送流量。
- 然后攻击者可以拦截、修改或丢弃重定向的流量。
路由器请求/通告攻击 (Router Solicitation/Advertisement Attacks):
- 攻击者通过发送以下内容的路由器通告来冒充路由器:
- 无效的前缀信息,导致主机配置错误的地址
- 短的路由器生命周期值,导致主机认为没有路由器可用
- 修改的跳数限制、MTU或可达性参数
邻居请求/通告攻击 (Neighbor Solicitation/Advertisement Attacks):
- 攻击者发送伪造的邻居通告以毒化受害节点的邻居缓存。
- 这可以将意图发送给另一个节点的流量重定向到攻击者。
- 攻击者可以声称拥有实际属于另一个节点的IP地址。
重复地址检测 (DAD) 攻击 (Duplicate Address Detection Attacks):
- 攻击者响应所有DAD邻居请求,阻止任何节点配置地址。
- 这构成对地址配置的拒绝服务攻击。
11.1.2. Denial-of-Service Attacks (拒绝服务攻击)
邻居发现的几个方面可以被利用进行拒绝服务:
缓存耗尽 (Cache Exhaustion):
- 攻击者用来自众多伪造地址的数据包淹没节点,迫使节点创建邻居缓存条目并发送邻居请求。
- 这消耗内存和网络带宽。
邻居发现消息洪泛 (Neighbor Discovery Message Flooding):
- 攻击者用邻居发现消息淹没链路,消耗带宽和处理资源。
路由器请求洪泛 (Router Solicitation Flooding):
- 多个攻击者或具有许多伪造地址的单个攻击者用路由器请求淹没路由器。
- 这可能会使路由器不堪响应负担。
11.1.3. Off-Link Threats (链路外威胁)
虽然邻居发现消息是链路本地的,不应被路由器转发,但有权访问物理介质的攻击者(例如,通过被入侵的基础设施)即使不直接连接到目标链路也可以发起攻击。
11.2. Securing Neighbor Discovery Messages (保护邻居发现消息)
11.2.1. SEcure Neighbor Discovery (SEND) (安全邻居发现)
安全邻居发现 (SEND) [RFC3971] 为邻居发现提供加密安全。SEND使用:
- 加密生成地址 (CGA - Cryptographically Generated Addresses): 将公钥加密绑定到IPv6地址的地址,允许验证发送者拥有该地址。
- RSA签名: 所有关键的邻居发现消息都用发送者的私钥签名。
- 时间戳选项 (Timestamp Options): 防止重放攻击。
- 随机数选项 (Nonce Options): 为请求/通告交换提供新鲜度。
- 授权委托 (Authorization Delegation): 允许路由器证明它们被授权为前缀充当路由器。
SEND对大多数邻居发现攻击提供强大保护,包括:
- 重定向攻击
- 邻居/路由器通告欺骗
- 前缀信息操纵
SEND的局限性:
- SEND需要公钥基础设施并且计算密集。
- 它不能防止所有拒绝服务攻击(例如,消息洪泛)。
- 由于复杂性,部署受到限制。
11.2.2. Link-Layer Security (链路层安全)
链路层安全机制可以为邻居发现提供保护:
IEEE 802.1X基于端口的认证 (Port-Based Authentication):
- 在允许网络访问之前认证设备。
- 防止未授权设备发送邻居发现消息。
MACsec (IEEE 802.1AE):
- 提供链路层加密和认证。
- 保护包括邻居发现在内的所有流量免受窃听和篡改。
无线安全 (Wireless Security - WPA2/WPA3):
- 加密和认证无线流量。
- 防止攻击者通过无线链路注入伪造的邻居发现消息。
链路层安全的优势:
- 对高层协议透明。
- 可能比SEND更高效。
- 防止更广泛的攻击。
局限性:
- 并非总是可用(例如,在共享以太网段上)。
- 不能防止来自具有合法链路访问的被入侵设备的攻击。
11.2.3. Router Advertisement Guard (RA Guard) (路由器通告保护)
RA Guard [RFC6105] 是一种基于交换机/路由器的机制,用于过滤路由器通告消息:
- 交换机被配置为识别哪些端口连接到合法路由器。
- 来自其他端口的路由器通告被丢弃。
- 防止恶意路由器攻击。
局限性:
- 仅防止恶意路由器通告。
- 可以使用IPv6扩展头绕过(由RFC 7113缓解)。
- 需要正确配置网络基础设施。
11.2.4. Source Address Validation (源地址验证)
实现源地址验证可以缓解一些攻击:
入口过滤 (Ingress Filtering):
- 路由器应实现入口过滤 (BCP 38 / RFC 2827) 以防止具有伪造源地址的数据包进入网络。
反向路径转发 (RPF) 检查 (Reverse Path Forwarding Checks):
- 可以帮助检测和防止某些形式的地址欺骗。
局限性:
- 主要防止链路外攻击。
- 对链路内欺骗效果较差。
11.3. Implementation Considerations (实现考虑)
11.3.1. Rate Limiting (速率限制)
实现应该 (SHOULD) 对以下内容实施速率限制:
- 处理邻居发现消息
- 创建新的邻居缓存条目
- 响应流量发送邻居请求
这缓解了基于资源耗尽的拒绝服务攻击。
11.3.2. Neighbor Cache Management (邻居缓存管理)
实现应该 (SHOULD):
- 实现邻居缓存条目的垃圾收集以防止耗尽。
- 当缓存空间有限时,优先考虑可达条目而不是陈旧或不完整的条目。
- 限制从不受信任的源创建邻居缓存条目的速率。
11.3.3. Router Advertisement Processing (路由器通告处理)
主机应该 (SHOULD):
- 忽略具有可疑参数的路由器通告(例如,极短的生命周期、无效的前缀长度)。
- 对从路由器通告学习的前缀、路由和其他信息的数量实施限制。
- 记录异常路由器通告模式以供管理审查。
11.3.4. Redirect Message Validation (重定向消息验证)
主机必须 (MUST):
- 验证重定向消息来自当前的第一跳路由器。
- 验证目标地址在链路内。
- 不处理试图将流量重定向到链路外的重定向消息。
11.4. Operational Considerations (运营考虑)
网络管理员应该 (SHOULD):
-
部署链路层安全: 在可能的情况下,使用802.1X、MACsec或无线安全来保护邻居发现。
-
实施RA Guard: 在交换机和路由器上防止恶意路由器通告。
-
监控异常: 使用网络监控工具检测邻居发现流量中的异常模式。
-
分段网络: 使用VLAN和其他分段技术限制潜在攻击的范围。
-
考虑SEND: 对于高安全性环境,尽管复杂,仍应评估部署SEND。
-
保持系统更新: 应用解决邻居发现漏洞的安全补丁和更新。
-
教育用户: 培训网络人员识别和响应邻居发现攻击。
11.5. Future Directions (未来方向)
IETF的持续工作继续改进邻居发现安全:
- 轻量级SEND替代方案
- 增强的RA Guard机制
- 与网络访问控制系统集成
- 改进的拒绝服务保护
网络管理员应随时了解这些发展,并在新的安全机制标准化和可用时进行部署。