01 · 错误分类框架
为兼顾"可操作检出"与"风险可排序",本课题采用二维分类:横轴为成因维度(决定用什么方法检出),纵轴为严重程度(决定处置优先级)。
1.1 成因维度(四类)
| 维度 | 含义 | 主要检出手段 |
|---|---|---|
| 配置型 | ROA字段本身与真实意图不符(asID、前缀、maxLength) | 静态规则校验 + BGP/RDAP比对 |
| 生命周期型 | 证书/Manifest/CRL过期、陈旧、未续签 | 时间戳与新鲜度闸门检查 |
| 越界型 | 授权超出资源证书范围(over-claim)、僵尸(已回收仍授权) | 资源范围校验 + RDAP状态核验 |
| 一致性型 | ROA与BGP/IRR/真实宣告脱节(无宣告、无ROA、双轨矛盾) | 多源比对与时间序列 |
1.2 严重程度(四级)
| 等级 | 判定标准 | 典型动作 |
|---|---|---|
| 致命(P0) | 已造成或即将造成合法路由Invalid、批量失效 | 立即告警 + 优先修复建议 |
| 严重(P1) | 削弱防护(maxLength过松)或越界授权 | 高优先级整改 |
| 一般(P2) | 数据噪声/僵尸、轻微不一致 | 纳入周期性清理 |
| 提示(P3) | 可接受的宽松策略、待观察 | 记录与观察 |
02 · 九类错误模式详述
下表汇总九类可在数据底座上程序化检出的ROA质量缺陷,含机理、检测信号、后果与严重度。
| 错误模式 | 机理 / 检测信号 | 后果 | 严重度 |
|---|---|---|---|
| ① maxLength过严 | ROA maxLength < 该前缀真实最具体BGP宣告长度(如宣告/24而maxLength=23) | 更具体合法宣告被判Invalid→自伤中断 | P0 致命 |
| ② maxLength过松 | maxLength ≫ 真实需要(如对/24设到/32),开放sub-prefix空间 | sub-prefix劫持仍可Valid,防护失效 | P1 严重 |
| ③ 错误asID | ROA的asID与真实起源AS不一致(填错/上游/邻居) | 真实宣告Invalid;错误AS反而可Valid | P0 致命 |
| ④ 资源越界(over-claim) | ROA授权范围超出签发证书RFC 3779资源扩展;或与RDAP持有范围冲突 | 验证器可能拒收;无效授权 | P1 严重 |
| ⑤ 僵尸ROA | ROA存在但对应地址长期(如≥90天)无任何BGP宣告,或地址已被回收/转让 | 数据噪声、越界风险、覆盖度虚高 | P2 一般 |
| ⑥ 证书/EE过期 | ROA绑定的EE或上级CA证书已越过notAfter,未自动重签 | ROA瞬间失效,连带合法路由Invalid | P0 致命 |
| ⑦ Manifest/CRL陈旧 | Manifest序列/thisUpdate滞后,或CRL未包含最新撤销 | 部分RP拒绝该子树ROA | P1 严重 |
| ⑧ 矛盾ROA(双轨) | 同一前缀存在多asID ROA,其中一个疑似填错;或与IRR route对象起源矛盾 | 判定混乱、可被利用 | P1 严重 |
| ⑨ 缺失ROA(未保护) | 重要前缀在BGP中广泛宣告但无任何覆盖ROA(质量缺口,非ROA错误) | 劫持时ROV无法拦截(防护缺失) | P1 严重 |
2.0 各错误模式的建议检测参数(初始值,需在实测集上校准)
| 错误模式 | 判定参数(建议初始值) | 备注 |
|---|---|---|
| ① maxLength过严 | 观测窗口内存在 length > maxLength 的合法起源宣告 | 需区分"真实起源AS"与劫持,避免把劫持误判为自伤 |
| ② maxLength过松 | maxLength − 观测最具体宣告长度 ≥ 4(IPv4)/ ≥ 16(IPv6) | 阈值为启发式初始值,应结合前缀用途(任播/多归属)调整 |
| ③ 错误asID | ROA asID ∉ 该前缀观测到的起源AS集合(窗口≥30天) | 多归属需纳入全部合法asID后再判定 |
| ⑤ 僵尸ROA | 连续 ≥90 天无任何BGP宣告 | 剔除签发未满7天的"预热期"对象 |
| ⑥ 证书过期 | now > EE notAfter,或 now > 上级CA notAfter | notBefore未生效同样计入(时钟偏差±5分钟容差) |
| ⑦ Manifest陈旧 | now > Manifest thisUpdate + 24h(nextUpdate缺失时) | 各RP对陈旧的处理策略不同,需标注实现差异 |
说明:上述阈值为方法论文档级初始值,非业界统一标准;本课题将在实测数据集上以"误报率≤1%且P0漏报率为0"为约束校准。
2.0.1 判定参数规范锚点
错误①②的判定原则并非本课题自创:RFC 9319(2022)从防护有效性角度论证了maxLength应与真实宣告需求匹配;RFC 7454(BCP 194,2015)从运维角度给出同源建议。本课题的贡献在于把规范建议转化为可计算的偏差指标(maxLength − 真实最具体宣告长度),并给出误报抑制机制(§04)。
2.1 重点模式深挖:maxLength过严为何是"首痛"
大量运营实践表明,组织在首次启用ROV(或首次创建ROA)时,最常踩的坑正是maxLength过严:出于"照着前缀填"的习惯,把maxLength设为与address等长,却忘了自身为流量工程而对前缀做了deaggregation。一旦启用ROV的对等方按ROV丢弃"更具体但length超界"的路由,该组织会突然发现"我自己的路由被人丢掉了"——而罪魁正是自己签的ROA。因此本课题将maxLength过严列为最高优先级(P0)质量缺陷。
2.2 重点模式深挖:over-claim的隐蔽性
over-claim(越界授权)在"字段看起来完全合法"时也能发生:ROA的asID与前缀都正确,只是该前缀已不在签发者的资源证书范围内(可能因为地址转让、证书范围更新滞后)。这类错误不会让路由Invalid(对真实宣告者而言可能仍是Valid,因为它由正确持有者另签),但却制造了"一张本不应存在的授权",在地址治理与责任认定上是隐患。它必须用"资源证书范围 + RDAP持有状态"双重核验才能发现,是越界型缺陷的代表。
03 · 组合检测方法
单一方法必然漏检或误报。本课题采用"四法组合",各法覆盖不同维度:
| 方法 | 做什么 | 擅长检出 |
|---|---|---|
| 静态规则校验 | 对ROA字段做语法/语义规则检查(maxLength≥address长度、maxLength≤32/128、前缀在资源范围内) | 配置型、越界型(字段级) |
| BGP RIB比对 | 将每个ROA与当前BGP宣告做前缀包含/长度比对,统计有ROA无宣告、有宣告无ROA、maxLength vs 真实长度 | 一致性型、maxLength过严/过松 |
| RDAP/WHOIS核验 | 用注册数据确认地址/AS持有状态,识别已回收地址上的僵尸ROA与越界授权 | 越界型、僵尸型 |
| IRR交叉 | 对比IRR route对象的origin与ROA asID,识别"双轨"矛盾 | 矛盾ROA、配置型 |
| 生命周期检查 | 扫描EE/CA notAfter、Manifest thisUpdate/nextUpdate、CRL | 生命周期型(过期/陈旧) |
04 · 误报抑制与置信度分级
质量分析的最大风险是"把合法配置判成错误",进而给出错误的修复建议。本课题通过三类机制抑制误报:
- 白名单/已知合法模式:任播(同一前缀多asID)、多归属、已知迁移窗口、故意宽松授权(已标注策略意图)纳入白名单,不作为错误。
- 多源一致才定论:关键判定(如越界、僵尸)需rsync+RRDP一致且RDAP交叉确认,单源异常降级为"待观察"。
- 置信度三级标注:每条错误结论附高/中/低置信度与证据链(哪些数据源指向该结论),供人工复核。
原则:本课题宁可"漏报一条边界可疑、标为待观察",也不"高置信地误判一条合法ROA为错误"——因为错误的修复建议若被执行,可能反而制造自伤型中断。这是质量分析与攻击检测的根本区别:前者面向"自己/友邻的配置",误判的代价是真实业务中断。
05 · 自动化检测流水线
5.1 错误档案(结构化输出规范)
每条错误结论以如下结构产出,作为后续修复建议(第8页)与态势感知输出(子课题06)的统一输入,字段对齐STIX风格的可扩展结构:
{
"finding_id": "ROAQ-2025-000001",
"pattern": "MAXLENGTH_TOO_STRICT", // 对应本页九类错误模式
"severity": "P0",
"confidence": "high", // high/medium/low
"roa": {
"prefix": "198.51.100.0/23",
"as_id": 64500,
"max_length": 23,
"rir": "EXAMPLE", // 对象所在RIR存储库
"ee_not_after": "2026-03-01T00:00:00Z",
"validation_profile": "RFC6487" // RFC6487 / RFC8360交集模式
},
"evidence": { // 证据链,多源一致才给high
"bgp": "该前缀存在 length=24 的合法起源宣告(AS64500),持续≥72h",
"rdap": null,
"irr": null
},
"false_positive_checks": [
"多归属白名单: 未命中", "迁移窗口: 未命中", "任播: 未命中"
],
"suggestion_draft": "将 maxLength 调整为 24(依据真实最具体宣告长度)",
"disclaimer": "仅供资源持有者审核执行;本课题不代修改任何生产对象"
}本节参考来源(第4页)
以下为真实可查权威来源,支撑本页分类与方法论表述。
RFC 6482(ROA对象)、RFC 6483(ROV状态)、RFC 3779(资源扩展)、RFC 6486(Manifest):rfc-editor.org/rfc/rfc6482 等。分类学的规范基础。
RFC 7454《BGP Operations and Security》(2015年2月,BCP 194):rfc-editor.org/rfc/rfc7454。maxLength配置建议与路由起源验证常见错误。
RDAP(RFC 7480-7484)与 IRR 路由注册库:用于资源归属与路由策略交叉核验的公开注册数据标准。
NLnet Labs Routinator / rpki-client / Cloudflare OctoRPKI:均输出经验证的VRP列表,是本课题"四道闸门验证"环节的可用实现参考。
Snijders, J.《RPKI's 2025 Year in Review》(RPKIViews.org数据,2026年1月,NANOG/SIDROPS邮件列表与APNIC Blog同步刊载):lists.nanog.org。全球ROA/VRP规模、各RIR打包效率差异(每ROA前缀数:APNIC 8.2、RIPE NCC 6.6、LACNIC 1.3、ARIN 1.1)等年度统计。
RIPE NCC RPKI / Routing Statistics 与 APNIC Labs RPKI测量:公开披露ROA覆盖率与Invalid路由占比,为本课题"质量缺口(缺失ROA)"维度提供背景基准。
关于"RPKI fragility / ROA misconfiguration"的公开研究与运营报告(如各RIR与运营商工程博客中关于maxLength导致Invalid的讨论):用于错误类型相对频次的示意性排序(见本页示意环图,非精确实测)。