01 · 防护体系总览:四层纵深模型
没有任何单一控制能覆盖NDP攻击全谱系——有效防护必须是分层组合。本课题采用四层纵深模型:
| 层次 | 控制项 | 阻断的攻击面 | 残余缺口(第7页详析) |
|---|---|---|---|
| L1 接入控制层 | 802.1X认证接入、端口安全(MAC数量限制)、访客/IoT隔离VLAN | AT全部的前提条件(A1链路接入)——未认证设备不得进入受信链路 | 认证后的恶意终端、被控合法终端仍可发起全部攻击——L1是减面而非消除 |
| L2 链路防护层 | RA-Guard(RFC 6105/7113)、ND检测(ND Inspection/Snooping)、SAVI(RFC 7039)、DHCPv6-Shield(RFC 7610)、端口级RA限速 | AT-1(RA伪造)、AT-5(RA洪泛)、AT-3(部分,SAVI)、AT-4(部分,速率限制+SAVI)、M标志翻转 | 受信任端口上的RA、同VLAN内合法地址NA应答(AT-2的"无伪造"形态) |
| L3 主机加固层 | RA接收策略收敛(如仅接受受信接口RA)、关闭6to4/Teredo等自动隧道、禁用WPAD、关键服务器静态邻居条目 | 隧道延伸链(A1的跨段延伸)、Toxic Proxies链的WPAD环节、主机解析面暴露 | 配置管理成本、BYOD设备不可控 |
| L4 监测验证层 | NDP异常检测规则库、SIEM关联、授权演练验证(第5、8页) | 全部攻击的"发现与响应"——防护失效后的兜底 | 检测本身的覆盖与误报平衡(KQ-1) |
分层原则:L1决定"谁能进链路",L2决定"链路里能说什么",L3决定"主机相信什么",L4决定"出错多快知道"。四层缺一不可:只做L2不做L1,攻击者换用被控合法终端即穿透;只做L1不做L2,内部威胁全敞口;不做L4,任何控制静默失效都无法察觉。
02 · RA-Guard(RFC 6105)与RFC 7113加固
2.1 基本原理
RA-Guard在接入交换机上实施端口角色模型:连接合法路由器的端口标记为受信任(可收发RA),连接主机/其他设备的端口默认为非受信任——非受信任端口上收到RA即丢弃(可记录)。Cisco实现中以RA-Guard Policy绑定接口(ipv6 nd raguard policy),Juniper、华为、H3C等均有等效特性(命名各异,见第8页分厂商表)。RA-Guard同时支持对RA的频率与内容策略(如限制RDNSS、限定宣告的前缀白名单)。
2.2 RFC 7113:两种历史绕过与闭合条件
2014年RFC 7113揭示首代RA-Guard的两个结构性弱点:
| 绕过路径 | 机理(概念级) | RFC 7113闭合要求 |
|---|---|---|
| 分片绕过 | 将RA报文分片传输:首分片不含完整ICMPv6报头或RA载荷跨越分片边界,简单匹配"ICMPv6 Type 134"的过滤逻辑无法识别重组后的完整RA | 接入设备必须在过滤决策前完成分片重组,或依据RFC 7112直接丢弃"首个分片未含完整IPv6头链+上层头"的报文——后者以弃代验,成本更低 |
| 隧道绕过 | 将RA封装于IPv6-in-IPv6隧道(外层目的为受害主机地址),隧道解封装发生在受害主机而非接入交换机——交换机看到的只是普通隧道报文 | 非受信任端口应丢弃目的为本链路主机的IPv6-in-IPv6隧道报文;实现必须基于硬件转发面的深度检查(RFC 7113明确要求"硬件级实施"以避免性能回退导致的配置关闭) |
2.3 评估要点
- 硬件化是生死线:软件实施的RA-Guard在千兆/万兆接入面对分片重组开销常被迫关闭——采购与验收必须验证转发面实现(以厂商文档与实测为准)。
- 覆盖所有接入面:有线端口、无线AP上联、虚拟交换机端口(vSwitch的RA-Guard/等效特性)、服务器带外管理口——任何未覆盖面都是绕过通道。
- RA限速叠加:RA-Guard之上应叠加端口级RA速率限制(pps阈值),为洪泛型攻击(AT-5)提供独立于内容过滤的缓冲。
03 · SAVI(RFC 7039):源地址验证改进
3.1 绑定锚定机制
SAVI的核心思想:接入设备通过监听链路上的地址配置过程(DAD的NS/NA交互、RS/RA交互、DHCPv6交互),为每个端口建立"IPv6地址—端口—MAC(可选)"绑定表;此后该端口发出的数据包若源地址不在绑定表内即丢弃。由此,伪造源地址的报文(无论ND消息还是数据流量)在接入侧被阻断——直接封死"伪造他人地址"这一机制基础。
3.2 三种锚定模式
| 模式 | 依据的锚定事件 | 适用场景 | 局限 |
|---|---|---|---|
| FCFS(RFC 6620) | First-Come-First-Served:监听DAD过程,第一个成功声明地址者获得绑定 | 纯SLAAC环境、BYOD | 与DAD攻击存在竞态窗口;地址迁移/多端口场景复杂 |
| DHCP模式(RFC 7513) | 监听DHCPv6 Solicit/Reply,以服务器分配结果为准 | DHCPv6为主的环境 | 对SLAAC地址无效;需覆盖M标志翻转的混杂环境 |
| SLAAC模式(RFC 7039框架内定义) | 监听RS/RA+完整DAD链,综合确认地址合法性 | SLAAC为主的现代网络 | 实现复杂度高,状态维护成本最大 |
3.3 与RA-Guard的关系
二者互补不替代:RA-Guard管"RA内容来源",SAVI管"一切流量的源地址真实性"。SAVI可阻断伪造源地址的NS/NA/RA,但对"使用自身合法地址"的应答型攻击(合法地址NA投毒、合法地址RA——如被控IoT设备)无效;RA-Guard可阻断非信任端口RA,但不校验数据面源地址。RFC 9098将两者并列为接入层防护基线。
04 · DHCPv6-Shield(RFC 7610)
应对AT-1的M标志翻转变体:当伪造RA将M标志置1,主机会发起DHCPv6 Solicit——若链路上存在攻击者架设的伪造DHCPv6服务器,地址与DNS配置即被接管。DHCPv6-Shield在接入设备上实施与RA-Guard同构的端口角色模型:仅受信任端口允许发送DHCPv6服务器侧报文(Advertise/Reply),非受信任端口收到即丢弃。部署要点:DHCPv6-Shield必须与RA-Guard联合部署——只防其一,M标志翻转即可绕过;同时Relay部署场景(DHCPv6中继)需正确标记中继端口为受信任,避免误伤合法中继。
05 · SeND/CGA的历史教训(RFC 3971/3972)
SeND是NDP安全"理想路线"的完整标本,其失败为所有协议安全设计留下三重教训:
| 教训 | 说明 |
|---|---|
| 密码学成本必须匹配部署单元 | CGA地址生成与RSA签名验证的CPU开销在嵌入式设备与高速链路上难以承受;方案按"全网所有节点"设计成本,而非按"边际部署节点"设计——成本结构注定了部署率无法过临界点 |
| 不能改变地址体系的成功机制 | SeND要求使用CGA特殊格式的地址,与SLAAC、DHCPv6、隐私地址(RFC 4941/8981)的演进路径全部冲突——用户与厂商没有动力为单一安全特性放弃地址灵活性 |
| 无生态支点则标准空转 | 截至今日无主流操作系统内核生产级支持SeND接收验证,无主流交换芯片支持CGA加速——协议作者自己也转向RA-Guard等"设备侧务实方案"(Fernando Gont同时是RFC 3971引用者与RFC 6104/6583/7113作者) |
正面启示:SeND的失败不等于密码学路线失败——RPKI/BGPsec/ASPA(RPKI专题子课题05)在"集中式信任锚+验证器 offload"的架构下绕开了SeND的两个死穴(逐端计算成本、地址格式绑定)。第一跳安全若未来引入密码学机制,大概率也沿"验证器集中验证+设备执行结果"的ASPA式架构,而非SeND式逐端签名。
06 · 主机与终端侧加固
- RA接收策略收敛:服务器与网络设备接口应关闭RA接收(路由器/交换机自身不应作为SLAAC客户端);普通主机按角色限定接受RA的接口与配置项(如Linux的accept_ra/accept_ra_defrtr/accept_ra_rtr_pref/accept_ra_pinfo等参数族,Windows网卡"路由器发现"设置)。
- 关闭自动隧道:禁用6to4/Teredo/ISATAP主机侧启用——IETF已通过RFC 7526正式废弃6to4中继任播机制(2015);Teredo虽无专门废弃RFC,但现代Windows与主流操作系统已默认禁用Teredo客户端——消除链路信任域的跨段延伸(子课题03详述)。
- 禁用WPAD:关闭Web Proxy Auto-Discovery(PAC自动发现),拆除Toxic Proxies攻击链的关键环节(第6页);优先以显式代理配置替代自动发现。
- 静态邻居条目:对网关、核心服务器等固定对等,在关键主机配置静态邻居条目(neighbor cache静态绑定),消除解析层动态欺骗面——注意运维成本与主备切换场景的条目更新。
- DNS层防护:强制DoT/DoH或受控DNS出口,降低RDNSS投毒的落点价值(纵深补偿,非替代链路防护)。
07 · 网络架构层缓解
- 分区分级:按信任等级划分VLAN/网段(办公、服务器、IoT、访客、OT),默认 deny 跨段第一跳信任——缩小单点沦陷的链路半径。访客/IoT网段视为不可信链路,RA-Guard+SAVI+DHCPv6-Shield强制全量。
- 广播域收敛:控制单VLAN规模(建议/24—/22量级),降低洪泛型攻击的放大系数与中间人的潜在受害者集合。
- uRPFv6:在三层边界实施IPv6单播反向路径校验(BCP 38精神),阻断伪造源地址跨段流动——与SAVI形成接入-边界两级源地址防线。
- 关键链路静态化:数据中心带内管理段、存储段等高敏链路,可考虑关闭SLAAC、采用静态配置+静态邻居条目,将NDP动态信任面压至零。
- 虚拟化接入面:vSwitch/hypervisor虚拟端口启用等效RA-Guard与源地址检查,纳入与物理接入同级的基线核查。
08 · 配置基线示例(概念级)与覆盖矩阵
以下为防护侧配置的概念级示例(用于说明基线要素,具体命令以各厂商当期文档为准):
ipv6 nd raguard policy HOST-POLICY device-role host ! 本端口角色=主机:拒绝RA/Redirect发送 hop-limit maximum 1 ! 校验HL(防链外注入兜底) managed-config-flag off ! 不允许M标志置位(防M标志翻转诱导) other-config-flag off ! 不允许O标志置位 router-preference maximum medium validate source-mac ! 校验SLLA与MAC一致性 ! 下行:受信任上联口 interface Gi1/0/1 ipv6 nd raguard attach-policy ROUTER-POLICY ! ROUTER-POLICY: device-role router + 前缀/RDNSS白名单
net.ipv6.conf.all.accept_ra = 1 ! 仅受信接口开启 net.ipv6.conf.all.accept_ra_defrtr = 1 ! 仅接受默认路由 net.ipv6.conf.all.accept_ra_rtr_pref = 1 net.ipv6.conf.all.accept_ra_pinfo = 1 ! 服务器场景:对应接口 accept_ra=0,网关静态配置 ! 关闭自动隧道(如 net.ipv6.conf.all.disable_ipv6=0 场景下的协议收敛)
8.1 控制×攻击覆盖矩阵
| 攻击 \ 控制 | 802.1X/隔离 | RA-Guard(7113) | SAVI | DHCPv6-Shield | 主机加固 | 监测(KQ-1) |
|---|---|---|---|---|---|---|
| AT-1 Rogue RA(网关劫持/RDNSS/RIO) | 减面 | 阻断(核心) | 部分(源伪造场景) | — | 部分(DNS补偿) | 兜底发现 |
| AT-1 M标志翻转 | 减面 | 内容策略可拦 | — | 阻断(核心) | — | 兜底发现 |
| AT-2 NA投毒(伪造源) | 减面 | — | 阻断(核心) | — | 静态条目 | 兜底发现 |
| AT-2 NA应答(合法地址形态) | 减面 | — | ✗(固有缺口) | — | 静态条目 | 主手段 |
| AT-3 DAD攻击 | 减面 | — | 部分(绑定前置) | — | — | 主手段 |
| AT-4 NDP耗尽(RFC 6583) | 减面 | — | 部分 | — | OS参数 | 主手段 |
| AT-5 RA洪泛/网关移除 | 减面 | 阻断+限速 | 部分 | — | — | 兜底发现 |
| AT-6 重定向滥用 | 减面 | 角色策略可拦 | 部分 | — | — | 主手段 |
注:✗=该控制无法覆盖;减面=缩小攻击前提而非阻断;矩阵为概念级评估,实际覆盖以授权环境实测为准(第5页验证方法)。
09 · 本节参考来源(第4页)
IETF RFC 6105《IPv6 Router Advertisement Guard》(2011):rfc-editor.org/rfc/rfc6105;RFC 7113(2014):rfc-editor.org/rfc/rfc7113;RFC 7112(首分片完整性要求,2013):rfc-editor.org/rfc/rfc7112。
IETF RFC 7039《SAVI Framework》(2013):rfc-editor.org/rfc/rfc7039;RFC 6620(FCFS SAVI,2012):rfc-editor.org/rfc/rfc6620;RFC 7513(SAVI for DHCP,2015):rfc-editor.org/rfc/rfc7513。
IETF RFC 7610《DHCPv6-Shield》(2015):rfc-editor.org/rfc/rfc7610;RFC 8415(DHCPv6,2018年11月):rfc-editor.org/rfc/rfc8415。
IETF RFC 3971/3972(SeND/CGA,2005):rfc-editor.org/rfc/rfc3971;RFC 9098(IPv6运营安全考虑,2021)接入层防护章节:rfc-editor.org/rfc/rfc9098。
IETF RFC 7526(废弃6to4中继任播机制,2015):rfc-editor.org/rfc/rfc7526。另注:Teredo无专门废弃RFC,本课题依据主流操作系统默认禁用Teredo客户端的事实进行定性表述。