课题研究 IPv6演进安全 子课题02 · 第2页 / 共8页
02子课题 · 邻居发现协议(NDP)安全与防护

NDP安全与防护第2页:NDP协议机制与安全信任模型深度解析

理解攻击的前提是理解协议。本页对RFC 4861/4862进行机制级拆解:五种ND消息的字段语义与选项承载能力,路由器发现与SLAAC的完整时序,主机的邻居缓存状态机(INCOMPLETE/REACHABLE/STALE/DELAY/PROBE),以及协议内置的四项脆弱性缓解机制(Hop Limit 255检查、DAD、NUD、被请求节点组播)——逐一说明其防护逻辑与可被绕过的边界。在此基础上,本页还解析RFC 4191路由选项与RFC 8106 RDNSS/DNSSL选项如何将RA从"网关宣告"扩展为"全栈配置下发",以及SLAAC与DHCPv6在M/O标志四种组合下的安全语义差异,最终给出形式化的威胁模型:攻击者能力集、攻击目标集与协议假设的缺口对照。

ICMPv6 Type 133-137SLAAC / RFC 4862DADNUD状态机被请求节点组播Hop Limit 255PIO / M-O标志RDNSS / DNSSLRFC 4191路由偏好研究状态:研究中
所属专题互联网基础设施安全 › IPv6演进安全
目标受众网络与安全运维工程师、SOC与态势感知团队、安全研究人员、攻防演练组织者
全文结构8页:总览 → 协议机制 → 攻击分类 → 防护体系 → 检测监测 → 案例实证 → 风险治理 → 实践路线

01 · ND消息体系与报文结构

1.1 五种核心消息

消息类型码发起方 → 接收方功能与安全权重
RS
Router Solicitation
133主机 → 所有路由器(ff02::2)主动请求RA,加速配置。安全权重低——攻击价值在于诱发RA洪泛的放大入口。
RA
Router Advertisement
134路由器 → 所有节点(ff02::1)链路权力最大的消息:宣告默认网关(Router Lifetime)、前缀(PIO→SLAAC)、M/O标志(配置策略)、MTU、RDNSS/DNSSL(DNS配置)、路由信息(RFC 4191)。全部NDP攻击中最具杠杆性。
NS
Neighbor Solicitation
135任一节点 → 被请求节点组播地址解析(替代ARP请求)与DAD探测。攻击者伪造NS可发起DAD拒绝服务(持续应答使新主机无法完成配置)或定向探测。
NA
Neighbor Advertisement
136任一节点 → 请求方(单播或全节点组播)地址解析应答与主动宣告(gratuitous)。伪造NA=邻居缓存投毒=链路中间人,对应ARP欺骗的IPv6形态。
Redirect
重定向
137路由器 → 主机(单播)修正次优路径。伪造重定向可将主机流量导向同链路恶意节点——但仅能重定向到"同一链路上的节点",利用面相对受限。

1.2 RA承载的选项(Options)——攻击面的载荷结构

ND消息通过TLV选项扩展能力。RA可携带的选项决定了伪造RA的影响半径:

选项(Type)功能被滥用方式(概念级)
源链路层地址 SLLA(1)宣告发送方MAC,加速地址解析伪造RA同时宣告攻击者MAC——网关劫持即刻完成双向流量截获,无需后续NA投毒
MTU(5)建议链路MTU压低MTU制造PMTUD低效(与PMTUD滥用联动,见子课题05)
前缀信息 PIO(3)宣告前缀+生命周期(valid/preferred),驱动SLAAC生成全球地址宣告伪造前缀使主机配置无效地址(DoS);宣告与合法前缀冲突的前缀制造地址混乱
路由信息 RIO(24,RFC 4191)宣告更具体路由与路由偏好(low/medium/high)注入高优先级更具体路由——比默认网关劫持更精细的流量牵引
RDNSS(25,RFC 8106)递归DNS服务器列表DNS投毒的标准链路通道:伪造RA+RDNSS即可在无恶意软件、无漏洞利用的条件下劫持主机DNS解析——CVE-2020-16898即源于其解析实现
DNSSL(31,RFC 8106)DNS默认搜索域列表配合RDNSS构造同源"伪内网域名"(如 fandiao.org.cn.example),引导凭据投递型钓鱼

字段级要点:RA头中的Router Lifetime决定主机的默认路由器列表条目存活时间(0=立即移除该默认路由,是RA DoS的机理);M标志/O标志翻转可迫使DHCPv6环境主机转而依赖伪造配置源;Cur Hop Limit字段为主机提供默认TTL建议值,可被操纵影响traceroute等诊断可见性;Reachable Time / Retrans Timer影响NUD节奏,篡改可放大缓存欺骗的维持成本差异。

1.3 NA标志位与ND报文的完整性约束

NA消息头部的三个标志位决定了缓存更新语义,也是检测规则(第5页R-06)的判定依据:

标志位语义(RFC 4861)安全相关性
R(Router)发送方是路由器——置位时接收方将该条目同时纳入默认路由器列表伪造NA置R位=在主机上凭空注册假默认网关,比单纯NA投毒杠杆更高
S(Solicited)本NA响应某个NS——置位的NA不能被静默丢弃非请求NA(S=0)即"主动宣告/免费NA",伪造成本最低,是缓存投毒的主要形态
O(Override)请求接收方覆盖既有缓存条目O=1的伪造NA强制改写合法映射,O=0则仅刷新非REACHABLE状态条目——检测规则需按标志位区分告警级别

ND报文还受两条底层完整性约束,它们是"NDP消息不会被链外注入"这一信任假设的全部技术来源:

约束机制残余问题
ICMPv6校验和(伪首部)ND消息作为ICMPv6报文,校验和覆盖IPv6伪首部(源/目的地址、报文长度、下一个首部字段)——未携带正确链路层/网络层上下文者无法生成有效报文约束的是"报文不被篡改",不是"报文内容真实"——链内伪造者天然满足该约束
Hop Limit必须=255(RFC 4861 §7.1.2)接收方必须丢弃HL≠255的ND消息——从协议上排除"经路由器转发"的链外注入仅约束单跳可达性;与分片重组、隧道封装叠加时可被绕过(RFC 7113详述),且对部分非合规实现不生效

1.4 ND使用的主要组播地址速查

NDP的高频组播地址是链路监测规则(第5页)的匹配基础:

地址用途
ff02::1所有节点组播(all-nodes)——RA的目标地址,伪造RA的投递目标
ff02::2所有路由器组播(all-routers)——RS的目标地址
ff02::1:ffXX:XXXX被请求节点组播(solicited-node,取IPv6地址低24位映射)——NS与DAD的投递地址;DAD应答者天然"知道"被探测地址,是DAD攻击(第3页AT-4)的协议机理

02 · 协议工作流程:从链路上线到全球可达

2.1 路由器发现与SLAAC完整时序

  1. 生成链路本地地址:主机为接口生成fe80::地址(现代OS采用RFC 7217稳定随机IID),立即进入DAD流程。
  2. DAD:向该地址对应的被请求节点组播(ff02::1:ffXX:XXXX)发送NS(目标=待确认地址,源=未指定地址::),若收到NA则应答冲突;RFC 4862默认DAD Transmits=1——单轮探测的设计决定了DAD竞态攻击的可行性窗口。
  3. RS:主机发送RS到ff02::2请求路由器宣告(可省略,等待周期RA)。
  4. RA:路由器响应(或周期发送)。主机提取:默认路由器(Router Lifetime>0时)、PIO→生成全球单播地址(再次DAD)、M/O标志决定是否发起DHCPv6、RDNSS/DNSSL更新DNS配置。
  5. 全球地址DAD:SLAAC地址正式使用前再次DAD——第二个可攻击窗口。

时序中的攻击窗口:上述五步中至少三个环节可被链路上任意节点干扰——第2步(DAD应答伪造)、第4步(RA伪造/RDNSS投毒)、第5步(全球地址DAD阻断)。且每一步的攻击均不需要"赢得任何竞态"之外的特权:SLAAC的设计哲学是"链路即配置源",攻击者正是这个"配置源"的伪造者。

2.2 被请求节点组播:效率机制的双面性

NDP将ARP的广播替换为基于地址低24位派生的被请求节点组播(ff02::1:ff00:0/104)。优势:无关主机不再被地址解析打扰;NDP消息天然带IP层结构,便于扩展头与过滤策略实施。代价:组播组地址可由目标单播地址直接推导,攻击者可精确计算"哪台主机在解析哪个地址",为定向NA投递(只对受害主机组播NA,其他主机不感知)提供了协议级便利——这也是NDP欺骗比ARP欺骗更难被旁路观测的原因之一。

2.3 重定向的合法语义与滥用边界

RFC 4861规定主机仅接受来自"当前默认路由器"的Redirect,且重定向目标必须为"同一链路上的节点"(需同时宣告其链路层地址)。伪造重定向的攻击面因此收敛为:将受害主机发往网关的特定目的地流量牵引到同链路另一台被控节点。在服务器汇聚段或高价值终端网段,这一收敛后的攻击面依然不可忽视。

03 · 主机NDP状态数据结构

3.1 邻居缓存状态机(RFC 4861 §7.3.2)

状态进入条件含义与攻击相关性
INCOMPLETE首次发送NS等待NA解析中。伪造NA(带SLLA)可直接注入缓存——缓存投毒的入口状态
REACHABLE收到有效NA确认可达,无需再探测(Reachable Time内)。攻击者伪造NA后 victim 流量即被牵引
STALEReachable Time超时记录仍被使用但下次发送前将重新确认——欺骗条目的"保鲜期"结束信号
DELAYSTALE状态下有发送需求等待DELAY_FIRST_PROBE_TIME,给上层可达性确认机会
PROBEDELAY超时无确认主动发送单播NS探测——真实主机的NA应答与攻击者的伪造NA在此竞速

攻防启示:NA欺骗不是"一投永逸"——缓存条目会老化,真实主机在PROBE态会应答。因此实用的NDP中间人需要周期性NA刷新(对抗NUD老化),这使攻击在链路上呈现可检测的"周期性NA宣告"特征:源MAC与宣告地址不符、宣告频率高于正常NUD节奏、NA目的地址异常(如非请求式NA以组播发送)——这些正是第5页检测规则库的核心信号。

3.2 其他关键数据结构

  • 默认路由器列表:由RA的Router Lifetime维护。伪造RA可将攻击者插入列表首位(或设置更高Router Preference,RFC 4191),甚至以Lifetime=0的RA删除合法路由器——网关级DoS。
  • 前缀列表:PIO驱动。伪造前缀使主机配置无效全球地址,或使流量按错误前缀策略路由。
  • 目的缓存:记录"到某目的地下一跳是谁"。伪造Redirect/RIO可精细操纵单条目的地的下一跳。
  • DNS配置状态:RDNSS/DNSSL选项注入的解析器列表——链路信任域向应用信任域(DNS)的直接跨越点,也是Toxic Proxies攻击链(第6页)的关键一环。

04 · 协议内置脆弱性缓解机制及其边界

RFC 4861并非完全没有考虑安全——它内置了若干缓解机制。但逐一分析可见,每项机制都建立在"攻击者不会主动配合"的假设上:

内置机制设计意图与工作原理攻击者绕过路径(概念级)
Hop Limit = 255 强制检查接收方必须丢弃HL≠255的ND消息(RFC 4861 §7.1.2)——由于路由器转发必然递减HL,此检查可阻断"链外注入"的ND消息仅防链外,不防链内。攻击者位于同链路时天然满足HL=255。这是协议唯一的硬防伪检查,覆盖范围恰是攻击者所在范围
DAD重复地址检测地址正式使用前探测冲突攻击者持续应答DAD的NS(声称地址已被占用),新主机永远无法完成配置——DAD从"防冲突"机制反转为"阻断配置"的DoS杠杆;RFC 7527(Enhanced DAD,2015)提出增强方案但部署有限
NUD邻居不可达检测周期探测邻居可达性,老化不可达条目攻击者周期性发送伪造NA维持欺骗条目,对抗老化——将一次性欺骗转为需持续流量的中间人,给了检测侧一个稳定观测信号(见§3.1)
被请求节点组播寻址替代广播,降低无关主机暴露组播组可由目标地址推导,攻击者可精准定向投递伪造NA/NS,降低被第三方观测概率
Redirect来源校验仅接受来自默认路由器的Redirect,目标必须同链路来源校验在"伪造RA已建立假默认路由器"的前提下形同虚设——攻击链式失效
地址生命周期(valid/preferred)过期地址自动废弃伪造RA宣告极短preferred lifetime可诱发频繁地址轮换(配置抖动DoS);宣告极长lifetime则延长伪造前缀影响

小结:NDP内置机制的整体思路是"防意外、不防恶意"。它们对配置错误和地址冲突有效,但在"同链路存在主动 adversary"的威胁模型下全部失效或反转。这正是RFC 6104要单独发布"问题陈述"的根本原因——协议内置能力不足以构成防护,必须由链路设备(RA-Guard/SAVI)与监测体系补齐,详见第4、5页。

05 · RDNSS/DNSSL与RFC 4191:被扩张的RA攻击面

5.1 RFC 8106的便利与代价

RFC 8106(2017)允许RA直接携带RDNSS(递归DNS服务器,Type 25)与DNSSL(默认搜索域,Type 31)。此前SLAAC主机获取DNS必须依赖DHCPv6(O标志),存在"地址已自动配置、DNS却无源"的部署断点;RFC 8106解决了这个断点,也将RA的权力从"三层配置"延伸到应用层信任根基(DNS)。主流操作系统在近年版本中陆续增加了对RDNSS选项的接收支持——这意味着伪造RA+RDNSS的组合在当代网络中对绝大多数主机有效。

5.2 实现安全:CVE-2020-16898的警示

2020年10月,微软修复CVE-2020-16898(安全社区称"Bad Neighbor"):Windows TCP/IP栈在解析ICMPv6 RDNSS选项时存在缓冲区溢出——攻击者经发送特制RA报文即可在未打补丁的主机上触发拒绝服务乃至远程代码执行。该事件具有三重警示意义:①协议信任面(无认证的RA)与实现解析面(选项解析代码)叠加,使"协议设计安全"与"实现安全"同等重要;②RDNSS作为相对"新"的选项,其解析路径属于测试覆盖薄弱区;③对防御方的启示——RA-Guard的价值不仅是防"配置被改写",更是拦下针对协议栈解析缺陷的畸形报文载体。

5.3 RFC 4191路由信息选项的精细操纵

RFC 4191引入的RIO允许RA宣告比默认路由更具体的前缀路由,并附带偏好级别(low/medium/high)。合法用途是让出口路由器引导特定目的网段走优选路径;滥用面在于:伪造RA宣告针对特定受害者网段(如企业核心系统所在前缀)的高优先级RIO,即可实现"默认网关不变、特定流量被精细牵引"——比全局默认网关劫持更难被通用基线检测察觉,因为大多数监测只关注"RA来源是否合法",不关注RA内容的路由表差异。

监测设计启示:对RA的检测不能停留在"端口是否受信任"的报文级,必须升级为内容级基线:合法RA的{RDNSS集合、DNSSL、PIO集、RIO集、Router Preference}应形成受控基线,任何基线外内容(新出现的DNS服务器、新搜索域、新高优先级路由)即触发告警——这是第5页检测规则库的核心设计原则。

06 · SLAAC与DHCPv6的关系模型及安全语义

6.1 M/O标志的四种组合

M标志O标志主机行为安全语义
00纯SLAAC:RA前缀生成地址,无DNS来源(依赖手工或其他机制)DNS配置缺失在现网少见;RDNSS选项此时成为唯一DNS来源,投毒面无竞争
01SLAAC地址 + DHCPv6获取DNS等"其他配置"伪造RA只需置O=1+RDNSS即可覆盖DNS——即使网络规划了合法DHCPv6,多数主机的解析器优先级仍会接受RA下发的RDNSS
10/1DHCPv6有状态分配地址(+其他配置)伪造RA置M=1可诱导主机向攻击者架设的伪造DHCPv6服务器请求地址——DHCPv6-Shield(RFC 7610)正是为此而设;但注意:默认网关仍来自RA,SLAAC相关攻击(网关劫持/RDNSS)对DHCPv6主机依然有效

6.2 "改用DHCPv6"路线的安全边界

业界曾有一种治理思路:以DHCPv6集中管控替代SLAAC,从而"消除"RA欺骗面。该思路忽略了三点:①默认路由器发现永远走NDP(RA),伪造RA的网关劫持对任何IPv6主机都有效,与地址获取方式无关;②DHCPv6本身需要防护(伪造服务器、伪造Relay,见RFC 7610与RFC 8415安全考虑);③RA与DHCPv6的配置竞争状态(主机同时持有RA与DHCPv6下发的不同DNS配置)本身制造新的混乱面。本课题结论:SLAAC/DHCPv6是配置管理的选择题,不是安全方案的选择题——第一跳安全必须独立建设。

07 · 威胁模型形式化

7.1 攻击者能力集(Adversary Capabilities)

  • A1 链路接入:物理(接入空闲端口、会议室网线)或逻辑(同VLAN无线接入、被控同网段IoT设备、虚拟机逃逸至同链路)接入目标链路——这是全部攻击的唯一定性前提。
  • A2 标准协议栈发送能力:可构造并发送任意合法格式的ICMPv6 ND消息(THC-IPv6、Scapy、SI6工具包均可,无任何0day依赖)。
  • A3 监听能力:可接收链路本地多播(ff02::1等)——获知在线主机、DAD时序、现有网关与DNS配置。
  • A4(可选)流量转发:被控设备可转发截获流量(实现中间人而非纯DoS)——手机/PC/IoT设备普遍具备。

7.2 攻击目标集

目标对应攻击影响
流量截获(中间人)伪造RA(默认网关指向攻击者)+ SLLA宣告MAC;或NA缓存投毒明文协议凭据/数据泄露、流量注入;结合WPAD可扩展至HTTPS场景(第6页Toxic Proxies)
DNS解析劫持伪造RA+RDNSS/DNSSL投毒钓鱼站点引流、恶意软件分发、凭据收割;无需任何主机入侵
拒绝服务Router Lifetime=0的RA;DAD阻断;NDP缓存耗尽(RFC 6583);RA/NS洪泛主机断网、配置失败、网关/解析异常
配置操纵M标志翻转+RDNSS;RIO精细路由注入;PIO伪造前缀隐蔽持久化流量牵引、地址空间污染

7.3 协议假设缺口对照

RFC 4861的隐含假设是"链路上的节点不会恶意伪造ND消息"。对照A1—A4能力集,该假设在现代网络(BYOD、IoT、访客接入、虚拟化)中不成立。协议社区以RFC 6104正式承认此缺口,并以RFC 6105/7113(防护)、RFC 6583(DoS缓解)、RFC 7039(源地址验证)逐点补齐——但所有补丁均位于"链路设备实施"层面而非"协议自证"层面,这决定了NDP安全的最终形态是架构与运营问题,而非单点技术问题。

08 · 本节参考来源(第2页)

本页机制性表述均可于下列原文中逐条查证。

[1]

IETF RFC 4861《Neighbor Discovery for IP version 6 (IPv6)》(2007):rfc-editor.org/rfc/rfc4861——消息格式见§4,选项格式见§4.6,接收者处理规则见§7.1.2(Hop Limit检查),邻居缓存状态机见§7.3.2。

[2]

IETF RFC 4862《IPv6 Stateless Address Autoconfiguration》(2007):rfc-editor.org/rfc/rfc4862——SLAAC时序与DAD流程(§5.4)。

[3]

IETF RFC 4191《Default Router Preferences and More-Specific Routes》(2005):rfc-editor.org/rfc/rfc4191;RFC 8106(2017):rfc-editor.org/rfc/rfc8106。

[4]

IETF RFC 7527《Enhanced Duplicate Address Detection》(2015):rfc-editor.org/rfc/rfc7527;RFC 7217《A Method for Generating Semantically Opaque Interface Identifiers》(2014):rfc-editor.org/rfc/rfc7217。

[5]

IETF RFC 7610《DHCPv6-Shield: Protecting against Rogue DHCPv6 Servers》(2015):rfc-editor.org/rfc/rfc7610;RFC 8415《Dynamic Host Configuration Protocol for IPv6》安全考虑章节:rfc-editor.org/rfc/rfc8415。

[6]

Microsoft MSRC,CVE-2020-16898官方条目:msrc.microsoft.com。

[7]

IETF RFC 6104《Rogue IPv6 Router Advertisement Problem Statement》(2011):rfc-editor.org/rfc/rfc6104——NDP信任模型缺口的官方问题陈述。