要約

  • RFC 6666は100::/64をIPv6のDiscard-Only Address Blockとして割り当てた。AS内部で動的に運び、nullインターフェースへ再帰させられるが、第三者ASとの間で広告・受信すべきではない。
  • このブロックは被害プレフィックスでもBLACKHOLEコミュニティでも、破棄済みパケットの領収書でもない。権限、RIB、再帰、FIB、破棄カウンター、外部封じ込め、復旧を接続して初めて結果になる。
  • Informational RFCはNick HilliardとDavid Freedmanの共著である。貢献は、厳密に局所的な操作へ世界共通の名前を与えたことにあり、世界的サービスや導入義務を作ったことではない。

受理された経路と、捨てられなかったパケット

IPv6サービスが大規模攻撃を受けたとする。承認を受けた担当者が対象アドレスの/128をiBGPへ投入し、100::/64内のアドレスを次ホップに指定する。全境界ルーターが経路を受理し、自動化画面は「ブラックホール有効」と表示した。

しかし三つの入口では、再帰が静的なnull経路に達してパケットが止まる。別の入口には静的経路がなく、BGP経路はFIBに使える形で入らない。さらに一台は誤ったexport policyで破棄ブロック自体を隣接ASへ漏らす。同じ制御オブジェクトが、三つのデータ面結果を生んだ。

これは実在事故ではない。RFCが整える意味と、実装側が追加で立証すべき事実を分けるための合成例である。

世界で一つ、用途はASの内側

宛先RTBHは、攻撃対象の経路の次ホップを変え、トラフィックが内部回線や装置を消耗する前に入口近くで破棄する。IPv4では、私用アドレスをnullへ向ける静的経路がしばしば利用された。動作はしても、別用途の名前空間を借りていた。文書用アドレスを本番制御に使えば、例示と運用の境界はさらに曖昧になる。

そこでRFC 6666は専用IPv6ブロックを求めた。IANAは0100::/64の通常表記である100::/64をDiscard-Only Address Blockとして掲載し、最終利用者には割り当てていない。現在のレジストリはSource、Destination、ForwardableをTrue、Globally ReachableをFalseとしている。

Forwardableは、管理された域内で通常のルーティングと再帰処理を使えるという意味だ。Globally ReachableがFalseなのは外向きの境界である。内部次ホップとしては単方向アドレスのように扱えなければならず、インターネット上の目的地になってはならない。

レジストリが担うのは意味の調整までである。IANAは静的経路を入れず、対象を承認せず、破棄を実行せず、合法トラフィックの停止責任も負わない。台帳は操作を読める形にするが、操作主体にはならない。

一語でまとめてはいけない三つの仕組み

宛先RTBHは対象アドレスの到達性を犠牲にする。送信元RTBHはuRPFと経路状態を組み合わせ、破棄方向に解決される送信元を名乗るパケットを拒否する。権限も影響も観測値も異なるため、一方の領収書で他方を証明できない。

nullとsinkholeも別物だ。nullはパケットを消す。sinkholeは解析装置へ迂回させ、設計によっては選別後のトラフィックを通常経路へ戻す。どちらも「ブラックホール」と呼べば、証拠を保存したか、合法パケットに出口があったかが見えなくなる。

100::/64とRFC 7999のBLACKHOLEコミュニティも分離する必要がある。前者はAS内部の再帰次ホップで、後者は被害プレフィックスに付ける助言的な信号である。隣接事業者が実行するには合意と明示的policyが要り、広告元がそのプレフィックスを広告できることも確認しなければならない。値を見ただけで装置が破棄すべきではない。

コミュニティ受信は意思の到着を示すだけで、経路採用、FIB、破棄、伝搬制限を証明しない。逆にASは外部へコミュニティを送らず、100::/64だけを内部で利用できる。一方は関係者間の指示、他方は局所的な再帰の材料である。

内部にはあり、外部にはない状態

RFC 6666はAS内でブロックの全部または一部を動的に運び、一部または全IPv6ルーターでnullへ向けることを認める。「一部」という余地は重要だ。入口だけで捨てるのか、内部の複数地点で同じ解決を保証するのかは、トポロジーと目的で決める。

第三者ASとの境界では逆になる。ブロックもそのサブネットも送受信せず、それを宛先とするパケットも越境させない。漏えいは、攻撃下のネットワークへ余計なトラフィックを引き寄せかねない。負荷を減らす仕組みが負荷の呼び水になる。

したがって健全性は非対称だ。内側では必要地点に存在し、外側では完全に不在である。「経路あり」という一灯式の監視では、この状態を表現できない。

六枚の領収書

権限領収書は承認者、正確な対象プレフィックス、範囲、理由、開始、失効を残す。顧客が他者の空間を落とすことや、古い警報が無期限経路になることを防ぐ。

制御領収書はtrigger route、community、次ホップ、受信ルーター、policy判定を残す。長さfilter、origin、RPKI、壊れたattributeで止まる可能性がある。受理はまだRIBの出来事にすぎない。

転送領収書は各入口で、対象が100::/64を経由して想定nullへ再帰しFIBに載ったことを示す。コントローラーやroute reflectorに見えるだけでは足りない。

パケット領収書は、場所を特定した破棄カウンターとclean canaryで得る。ゼロはトラフィック不在、入口違い、telemetry故障、FIB未実装のいずれでもあり得る。

封じ込め領収書はAdj-RIB-Out、neighbor policy、prefix filterで外部流出がないことを示す。公開collector一つに見えないことは普遍的な不在証明ではない。

復旧領収書はtriggerのwithdraw、FIBの消去、通常経路の復帰、承認の終了を別々に時刻化する。累積カウンターは過去の破棄を示すだけで、現在を示さない。

正常な利用者も失うという選択

宛先blackholeは、対象アドレスを攻撃者にも正規利用者にも届かなくして広い設備を守る。副作用ではなく、その操作の交換条件である。対象を可能な限り狭くすれば被害は減るが、破棄が可用性へ変わるわけではない。

実行後は、共有回線が回復したか、同一集約内の別サービスが生きているか、攻撃先が移ったか、送信元ルールが損失を広げなかったかを確かめる。「トラフィックが減った」だけでは、破棄装置の成功を語れない。

Hilliardの貢献は所有ではなく精密さ

IETFのNick Hilliardプロフィールには六つのRFCが載る。RFC 6666はDavid Freedmanとの共著で、IETFの審査を経たInformational文書だ。個人の標準でも万能命令でもない。

残る考えは簡潔である。本番制御は文書用や私用のアドレスを借りず、専用の名前空間を持つべきだ。そして名前は作用範囲まで示すべきだ。100::/64は誰もが意味を読め、誰も世界的サービスだと誤解しないときに価値を持つ。

出典