要約

  • 2018年2月28日、GitHub は memcached を悪用した反射増幅型 DDoS 攻撃を受けた。GitHub の報告によれば、攻撃は毎秒1.35テラビット、毎秒1億2,690万パケットに達し、17時21分(UTC)に受信量と送信量の異常な比率が検知された。[1]
  • GitHub は最初のおよそ5分間、利用不能になり、その後も数分間にわたって断続的な利用不能状態を経験した。17時26分には通常のトランジット経路から AS36459 の経路広告を取り下げ、Akamai への接続を通じて対象プレフィックスを広告する緩和措置を開始した。BGP の再収束と Akamai 境界でのフィルタリングを経て、17時30分までに通常サービスが回復したと報告されている。[1]
  • BGP の経路変更そのものが攻撃パケットを除去したわけではない。経路操作は、GitHub 宛てトラフィックを、攻撃を吸収・選別できる緩和ネットワークへ移した。悪性パケットの識別と廃棄は、Akamai 側のフィルタリングという別の制御である。
  • 攻撃は、インターネットから到達可能で UDP 要求を受け付ける memcached サーバーを反射器として利用した。被害者のアドレスを送信元に偽装した小さな要求に対し、サーバーがはるかに大きな応答を被害者へ送る構造である。Cloudflare が示した約5万1,200倍という値は、プロトコル上の増幅可能性であり、GitHub が観測した平均倍率ではない。[3]
  • 反射を成立させるには送信元アドレスの詐称が必要になる。BCP 38と BCP 84は、そのようなパケットをネットワーク境界で制限するための実務的な指針を示す。ただし、これらは公開 memcached サーバーを閉じるものでも、緩和容量を提供するものでも、世界中での導入を保証するものでもない。[9][10]
  • 実際の制御は複数の主体に分かれていた。GitHub は異常検知、直接接続容量、ピアリング、経路変更の指令を管理した。Akamai はスクラビング容量と境界フィルタリングを担った。memcached の開発者は既定値と運用ガイダンスを変更でき、各サーバー運用者は待受インターフェースやファイアウォールを管理できた。アクセスネットワークは顧客から外部へ出るパケットの送信元を検証できた。
  • したがって、説明責任を一社へ集約するのは適切ではない。問うべきなのは、それぞれの主体がどの制御を実際に行使できたか、その判断がどの証拠に基づき、どのような結果を生み、再発条件をどこまで減らしたかである。
  • GitHub が公開した時刻、トラフィック量、AS 番号、経路変更、復旧時刻は、緩和引き継ぎを検証可能にする。一方、攻撃者の身元、全リフレクターの所有者、個別の送信元ネットワーク、非公開の経路ポリシー、契約条件、顧客損失、法的責任までは明らかにしない。
  • この事件が残した基準は「完全防御」ではなく「実証可能な継続性」である。異常を検知し、限定された権限で経路を移し、正規利用者への通信を回復させ、安全に通常経路へ戻し、同じ攻撃を可能にした露出と詐称条件を減らしたことを証拠で示せるかが問われる。

記録的な通信量より重要だった九分間

GitHub の公表記録は、巨大な数字だけでなく、ネットワーク上の制御がどの時点で移動したかを示している。2018年2月28日17時21分(UTC)、監視システムは受信トラフィックと送信トラフィックの比率に異常を検出した。GitHub はこの時点からおよそ5分間、サイトが利用不能だったと説明している。その後も17時30分まで断続的な利用不能が続いた。[1]

17時26分、エンジニアは緩和経路への切り替えを開始した。通常のトランジット事業者を通じて広告していた AS36459 の経路を取り下げ、Akamai への接続を介して対象プレフィックスを広告した。インターネット上の経路が再収束し、Akamai 境界でフィルタリングが実施された後、17時30分までに通常サービスが回復したと GitHub は報告した。[1]

この時系列は、利用不能と断続的な不調を区別するうえで重要である。17時21分から17時26分までの全面的な可用性喪失と、経路切り替えが進む間の部分的・断続的な障害は、同じ状態ではない。前者は緩和前の影響を、後者は分散した経路系が切り替わる過渡期を示す。復旧時刻だけを見れば、途中で誰がどの操作を行ったかが見えなくなる。

17時34分には、取引所接続側の経路広告を取り下げる追加対応も記録されている。[1] この後続操作は、17時30分のサービス回復と矛盾するものではない。利用者から見た復旧と、運用者が残存経路を整理し、攻撃トラフィックの流入面を狭める作業は別の段階だからである。

GitHub は後に約400Gbps の追加攻撃も観測したが、最初と同じ規模のサービス停止は再現しなかったと報告している。[1] これは恒久的な防御を証明するものではない。攻撃ベクトル、経路、緩和状態、容量は変わり得る。ただし、少なくともその時点では、変更後の緩和経路が大規模な追加負荷を処理できたことを示す回復証拠にはなる。

この事件で報告された影響は可用性に関するものであり、機密性や完全性が損なわれたという記録ではない。[1] DDoS と侵入や情報窃取を混同すれば、必要な制御も証拠も曖昧になる。ここで問われたのは、サービスへ到達する経路、容量、パケット選別、正規通信の継続である。

1.35Tbps と1億2,690万 pps は異なる負荷を表す

GitHub が示したピークは毎秒1.35テラビットと毎秒1億2,690万パケットだった。[1] 前者は単位時間当たりのデータ量、後者はネットワーク機器が単位時間当たりに扱うパケット数を示す。どちらも「大きさ」を表すが、圧迫する資源は同じではない。

ビットレートが高ければ、回線が持つ伝送容量を使い切りやすい。パケットレートが高ければ、ルーター、フィルター、ロードバランサーなどが行う転送判断やキュー処理の回数が増える。総帯域に余裕があっても、多数の小さなパケットによって処理能力や状態管理が先に限界へ近づく場合がある。逆に、大きなパケットが中心なら、パケット処理能力に余裕があってもリンク帯域が飽和し得る。

したがって、「何 Tbps に耐えられる」という表現だけでは、耐性を十分に説明できない。どの地点で測定したのか、フィルタリング前か後か、一つの接続か複数拠点の合計か、瞬間的なピークか持続値かを区別する必要がある。GitHub の数値は事件規模を理解するうえで有用だが、あらゆるリンクや装置が同じ負荷を処理したことまでは示していない。

毎秒1億2,690万パケットという値も、どの装置が最初に限界へ達したかを単独では証明しない。サービス停止と復旧は影響と対応を示すが、非公開の内部テレメトリーなしに、特定機器の飽和や故障を断定することはできない。説明責任ある容量評価は、最大値を強調するだけでなく、その値が何を、どこで測ったものかを明らかにする。

memcached が小さな偽装要求を巨大な応答へ変えた

memcached は、高速な分散メモリーキャッシュとして設計された。公開インターネットに対して増幅サービスを提供するためのものではない。2018年の攻撃で悪用されたのは、信頼できないネットワークから UDP インターフェースへ到達できるようになっていた配備である。[3][6][7][8]

反射攻撃では、要求を送る側が被害者の IP アドレスを送信元として偽装する。要求を受けたサーバーは、実際の送信者ではなく、パケット上で送信元とされている被害者へ応答する。要求より応答の方が大きければ、反射と増幅が同時に起きる。攻撃者自身が被害者へ送るのと同じ帯域を持たなくても、公開サーバー群の応答容量を借りて大きな洪水を作れる。

Cloudflare は、この攻撃に使われたプロトコルについて、およそ5万1,200対1に達する増幅可能性を報告した。[3] ただし、これは GitHub が受けた全パケットの実測平均ではない。実際の倍率は要求内容、キャッシュされている値、サーバーの挙動、測定方法などに左右される。数字の意義は、すべての応答が必ず同じ倍率になることではなく、攻撃側の送信能力と被害側へ到達する量との間に極端な非対称性が生じ得る点にある。

この仕組みには少なくとも二つの条件が必要だった。第一は、外部からの UDP 要求を受け、大きな応答を返す memcached サーバーが存在したこと。第二は、攻撃者側から出る偽装送信元パケットが、途中のネットワーク境界で拒否されなかったことである。どちらか一方を取り除くだけでも、その経路での反射可能性は大きく低下する。

これは、感染端末が自らの実アドレスで被害者へ直接大量通信を送るボットネット型攻撃とは異なる。反射増幅トラフィックと直接送信型トラフィックを同一視してはならない。また、公開資料はこの事件を Mirai によるものとはしていない。攻撃者の身元や使用基盤を、攻撃メカニズムだけから推定することはできない。

安全な既定値は露出を減らすが、既存配備を自動修復しない

memcached プロジェクトは、バージョン1.5.6以降で UDP を既定で無効にしたと説明し、信頼できないネットワークへサービスを公開しないよう警告している。[7][8] 安全な既定値には、明確な実務的価値がある。新規導入や更新後の環境が、管理者の意図しないまま危険な UDP 待受状態になる確率を下げるからだ。

しかし、既定値の変更だけで既存の全配備が安全になるわけではない。古いバージョンが残ることもあれば、管理者が明示的に UDP を有効にする場合もある。ファイアウォールが広く開いていたり、サービスが外部インターフェースへバインドされていたりすれば、別の設定が露出を維持する。安全な既定値は重要な制御だが、遠隔から過去の設定を修復するものではない。

サーバー運用者には、待受インターフェース、UDP の有効・無効、ポート11211への到達範囲、アップグレード、資産台帳を管理できる立場がある。ローカルアプリケーションだけが使うキャッシュなら、任意のインターネット利用者へ応答する必要は通常ない。プライベートなインターフェースへの限定や境界フィルタリングは、反射器として悪用される面を減らせる。

ホスティング事業者も、顧客環境の高リスクな公開状態を把握し、連絡・是正・緊急制限の手順を設けられる。ただし、これを「すべての UDP サービスを無条件に遮断すべきだ」という結論へ広げるのは適切ではない。正当な用途や契約上の境界があるため、必要なのは露出の可視化、現在の連絡先、比例的な対応、実施記録である。

反射器は GitHub の管理下にあるサーバーではなかった。GitHub や Akamai が memcached の公開状態を作ったとする証拠もない。被害者、ソフトウェア開発者、配備運用者、ホスティング事業者、送信元ネットワークには、それぞれ異なる制御可能範囲があった。その差を保ったまま責任を論じる必要がある。

送信元詐称対策は「境界で止める」分散制御である

反射攻撃の核心は、パケットヘッダーに書かれた送信元が事実と異なることにある。リフレクターは攻撃者の実際のアドレスを知らず、偽装された被害者アドレスへ応答を返す。送信元アドレス検証は、その偽りをパケットが発生したネットワークに近い境界で止めようとする。

RFC 2827、一般に BCP 38として知られる文書は、ネットワーク境界でのイングレスフィルタリングを説明している。顧客へ特定プレフィックスを提供している事業者は、その顧客側から入ってくる外向きパケットが、正当に割り当てられた範囲外の送信元アドレスを名乗っている場合に拒否できる。[9]

RFC 3704、すなわち BCP 84は、マルチホーム環境を含む、より複雑な経路条件を扱う。[10] 正規通信が異なる回線から入り、別の回線へ出る非対称ルーティングでは、単純で厳格な逆向き経路判定が正当なパケットまで落とすことがある。そのため、現実の導入には顧客プレフィックス情報、経路設計、例外処理、変更管理、ドロップ監視が必要になる。

「すべての事業者が BCP 38をオンにすればよい」という標語だけでは、運用課題を捉えきれない。割り当てが変わればフィルターも更新しなければならない。顧客がマルチホーム化すれば、妥当な送信元集合が変わり得る。古い台帳に基づく制限は正規通信を遮断し、制限がなければ詐称パケットを外部へ流出させる。

CAIDA の Spoofer プロジェクトは、ネットワークから偽装送信元パケットを送れるかどうかを測定する取り組みである。[14] MANRS も、アンチスプーフィングをネットワーク運用者が実行すべき行動として位置づけ、実装上の案内を提供している。[15] これらは制御の有効性や導入状況を考える材料にはなるが、GitHub 攻撃に関与した特定ネットワークを名指しする証拠ではない。

公表資料には、すべてのリフレクターや、偽装要求を外部へ送り出した AS の完全な一覧がない。後日の一般的な測定結果を2018年2月28日の個別事件へそのまま遡及適用することもできない。あるネットワークが一般測定で詐称可能と判定されたことと、そのネットワークが当該攻撃を運んだことは別の主張であり、後者には事件固有の証拠が必要である。

アンチスプーフィングを遅らせる経済的非対称性

送信元アドレス検証には、典型的な外部性がある。フィルターを導入するネットワークは、設計、運用、顧客対応、誤検知調査の費用を負担する。一方、主な便益は、そのネットワーク自身ではなく、偽装トラフィックの被害を受けるインターネット上の第三者へ広く及ぶ。

顧客も、自分の接続が他者への攻撃に使われ得ることを日常的には認識しにくい。接続速度や価格のように直接見える便益と異なり、外部へ出なかった偽装パケットは顧客体験として観測されない。そのため、市場からの要求が弱くなり、予防制御の費用だけが局所的に見えやすい。

ここで説明責任を機能させるには、道徳的な非難よりも検証可能性が必要になる。事業者は、顧客境界ごとに許可された送信元プレフィックス、適用中のフィルターポリシー、例外の承認者、更新時刻、テスト結果、誤遮断の調査手順を示せるべきである。導入率の集計はエコシステム全体の進歩を測れるが、個別事件の帰属には代えられない。

不正利用連絡の品質も経済性の一部である。被害者が反射器のアドレスを特定しても、現在有効な連絡先が分からなければ、是正までの時間が延びる。ホスティング事業者が顧客を特定できても、通知、制限、復旧確認の基準がなければ対応は一貫しない。技術的には遮断可能でも、組織間の連絡経路が弱ければ、露出は長く残る。

アンチスプーフィングの限界も明示しなければならない。それは偽装送信元に依存する攻撃を制約するが、感染端末が実アドレスで直接送る通信までは止めない。公開 memcached ポートを閉じず、GitHub へスクラビング容量を与えず、BGP 切り替えの成功も保証しない。必要な分散制御ではあるが、DDoS 対策全体の代用品ではない。

検知は経路変更より先に説明可能でなければならない

GitHub は、受信量と送信量の異常な比率を監視が検知したと報告している。[1] この情報には、対応を観測可能な条件と結びつける価値がある。ただ「攻撃を受けたので切り替えた」と述べるより、どの信号が運用判断を開始させたかが分かるからだ。

もっとも、受信量が送信量を大きく上回る現象だけで、直ちに悪意を確定することはできない。反射攻撃、正当なアクセス急増、計測障害、別種のネットワークイベントが似た外形を示す場合がある。異常検知は調査の起点であり、分類の終点ではない。

信頼できる判断には複数の観測面が必要になる。インターフェース統計はビットレートとパケットレートを示す。フローデータはプロトコル、ポート、送信元分布、宛先集中を示す。アプリケーション指標は正規要求が完了しているかを示す。経路テレメトリーはどの接続がトラフィックを運んでいるかを示し、外部プローブは利用者から見た到達性を示す。

これらの信号は互いに代替できない。帯域アラームは飽和を示せても、通信が悪性かどうかを確定できない。UDP のポート11211から来る応答という特徴は攻撃ベクトルを示唆するが、観測された全パケットが不要とは限らない。経路監視は Akamai への移管を確認できても、正規利用者がサービスへ到達できたかまでは示さない。

緩和発動のしきい値も説明責任の対象である。遅すぎれば、経路が収束する前にサービスが停止する。敏感すぎれば、短いスパイクごとに経路を動かし、費用、経路変動、新たな依存障害を生む。しきい値には根拠、複数の入力、オーバーライド権限、事後レビューが必要である。

BGP が移したのは到達性であって、悪性パケットではない

GitHub は自社の自律システムとして AS36459 を明示した。[1] AS 番号は単なる組織ラベルではない。IP プレフィックスへの到達性を起点として広告し、他ネットワークと経路を交換する運用領域を識別する。

GitHub が通常のトランジット接続から経路広告を取り下げ、Akamai への接続を通じて広告したとき、変わったのは外部ネットワークが GitHub 宛てパケットを届ける経路である。Akamai はそのトラフィックを受け取り、攻撃を選別し、許可された通信を GitHub 側へ送り返せる位置に置かれた。

ここで BGP とパケットフィルタリングを混同してはならない。BGP は、個々のパケットが悪性か正規かを判定しない。経路の取り下げもパケットを浄化しない。経路操作は、フィルタリング能力と吸収容量を持つネットワークへ到達性を移す。実際に攻撃トラフィックを除去するのは、移管先で動作する別の制御である。

成功には少なくとも三つの系が必要だった。GitHub 側の検知・承認・操作、インターネット上の分散した BGP 再収束、そして Akamai 側の受け入れ・フィルタリング・正規トラフィック返送である。いずれか一つが機能しなければ、経路を動かしても可用性は戻らない。

BGP の収束は中央から一斉に命令できる処理ではない。GitHub が隣接ネットワークへ広告を変更すると、それぞれのネットワークが自らのポリシーを適用し、選択した経路を伝播する。切り替え中には、一部利用者が旧経路をたどり、別の利用者が新しい緩和経路へ到達する状況が起こり得る。断続的な可用性は、この分散性を評価する際の重要な観測対象になる。

公開資料は、正確なプレフィックス長、BGP コミュニティ、ローカルプリファレンス、地域別の収束、Akamai とのアクセス制御、クリーン通信の返送設計を明らかにしていない。そのため、本件から非公開の経路ポリシーや契約構成を推定すべきではない。証拠が支えるのは、検知、判断、経路撤回、Akamai 経由の広告、再収束、フィルタリング、復旧という運用順序である。

緩和への引き継ぎは新たな運用リスクも移す

経路切り替えには失敗の余地がある。対象プレフィックスが一つ欠ければ、一部サービスだけが到達不能になり得る。広告の粒度が既存経路と想定外に相互作用すれば、利用者ごとに異なる経路が選ばれる可能性がある。緩和事業者側の許可リストが正当な広告を拒めば、トラフィックは移らない。

スクラビング側に十分な受信・処理容量があっても、正規通信をオリジンへ返す経路が細ければ、新たなボトルネックになる。別経路からフィルタリングを迂回できるなら、攻撃者はそこを狙える。往路と復路の非対称性は、状態を持つ装置やセッション処理を難しくする場合がある。主たるプレフィックスが到達可能でも、DNS や認証などの依存先が停止していれば、利用者の作業は完了しない。

これらは GitHub で実際に発生したと断定する事実ではない。緩和引き継ぎを設計・訓練する際に検証すべき一般的な故障面である。公開記録が示す復旧結果から、すべての地域や正規要求が完全に無傷だったとまでは言えない。

訓練では、移すべきプレフィックス、使用する接続、広告の承認方法、緩和事業者による受け入れ確認、クリーントラフィックの返送、攻撃後の通常経路復帰を事前に確かめる必要がある。成功する全面切り替えだけでなく、一部プレフィックスの欠落、事業者側の容量不足、経路収束の遅れ、返送経路障害も試すべきである。

経路が Akamai へ移った後、GitHub の直接トランジットやピアリングだけでは結果を決められなくなった。Akamai の容量、フィルター、制御システム、接続性が GitHub のサービス経路の一部になった。この依存は、意図的で、訓練され、観測可能なら責任ある設計になり得る。準備状況を検証できず、安全に通常経路へ戻れないなら、依存は脆弱性へ変わる。

容量を増やすこととレジリエンスは同義ではない

GitHub は、以前からトランジット容量を増やし、複数のインターネット取引所でピアリングを維持していたと説明している。それでも今回の規模では、Akamai を介した緩和が必要と判断された。[1] これは直接容量への投資が無意味だったことを示さない。

余裕容量は通常の成長、局所的な攻撃、緩和を発動するまでの時間を吸収できる。複数接続は、一つの混雑回線が直ちに単一障害点になることを防ぎ得る。しかし、容量はトラフィックを分類せず、正規利用者にクリーンな経路を保証しない。

重要なのは、容量がどこにあり、どう制御できるかである。バックボーン全体に大きな総容量があっても、利用者向けの一つの接続が先に飽和すれば役に立たない。大規模なスクラビング設備があっても、経路をそこへ移せなければ使えない。世界規模の緩和網があっても、顧客プレフィックスが事前承認されていなかったり、返送経路が細かったりすれば復旧しない。

「常時保護」という表現にも注意が要る。常に緩和事業者を経由する構成、常時監視し必要時だけ切り替える構成、商用サービスの名称では、実際の経路と故障面が異なる。呼称だけでは、容量、冗長性、発動時間、返送能力を証明できない。

現実的な目標は無限の吸収能力ではない。どの運用者も、想定し得るすべての洪水を無害化すると約束することはできない。必要なのは、限界へ近づいたことを検知し、完全停止前に経路を移し、重要機能を保ち、影響範囲を伝え、その判断が妥当だったことを記録する有限で検証可能な設計である。

緩和の成果は「落とした量」ではなく正規通信の回復で測る

攻撃パケットを大量に捨てても、正規利用者がサービスへ到達できなければ、DDoS 緩和は目的を果たしていない。緩和には二つの出力がある。不要なトラフィックを拒否することと、必要なトラフィックを届けることである。利用者が経験するのは後者だ。

フィルタリングは、プロトコル挙動、パケット妥当性、送信元特性、レート、アプリケーション文脈などを使える。それぞれ誤検知の可能性がある。memcached 応答の特徴に限定した規則は精密になり得るが、UDP を広く遮断すれば正当な通信まで止める。強いレート制限はサービスを守る一方、大規模な共有ネットワークの利用者をまとめて排除する可能性がある。

GitHub は、Akamai 境界でのフィルタリング後にサービスが回復したと報告している。[1] これは緩和経路が高い水準で機能したことを支える。しかし、非公開のルール、誤検知率、すべての地域における成功率までは示さない。

復旧判定には、外部から見た経路到達性、緩和事業者のフィルタリング統計、オリジン側インターフェース負荷、複数地域からのアプリケーション成功率、遅延、エラー率が必要になる。最初の正常信号だけで監視を止めてはならない。攻撃者はベクトル、パケットサイズ、宛先、タイミングを変えられるからだ。

「クリーントラフィック配送」は、攻撃を落としたという入力側の説明を、利用者が作業を完了できたという結果側の説明へ変える。説明責任ある緩和契約や訓練は、吸収可能な最大量だけでなく、正規通信の返送容量、地域的な到達性、許容遅延、回復確認方法まで扱う必要がある。

実際の制御範囲に沿って説明責任を配分する

この事件の責任構造は、一つの組織を中心に描くと見誤る。攻撃者は標的選択と要求生成を制御した。しかし、公表資料はその身元を明らかにしていない。その他の主体は、攻撃連鎖の異なる部分を制御できた。

主体 実際に制御できた領域 単独では制御できなかった領域 求められる主な証拠
GitHub エッジ監視、直接容量、ピアリング、緩和発動、AS36459 の経路変更、アプリケーション復旧確認 外部 memcached 配備、各送信元ネットワークの詐称対策、Akamai 内部のフィルタリング方式 検知時刻、発動記録、経路可視性、復旧指標、通常経路への復帰記録
Akamai トラフィック受け入れ、スクラビング容量、境界フィルタリング、クリーントラフィック返送 GitHub 側の発動判断、反射器設定、偽装要求が発生したアクセス境界 経路受け入れ、フィルタリング量、誤検知、正規配送、容量余裕の記録
memcached 開発者 ソフトウェアの既定値、警告、対応バージョン、設定文書 各運用者のアップグレード、外部公開、ファイアウォール 既定値変更、リリース情報、安全な設定の明示
サーバー・ホスティング運用者 待受範囲、UDP 設定、ポート制限、資産台帳、顧客連絡 攻撃者の要求生成、被害者側の緩和経路 露出スキャン、設定履歴、通知、遮断・修復確認
アクセスネットワーク 顧客境界の送信元検証、プレフィックス台帳、例外管理 外部リフレクターの設定、被害者のスクラビング能力 適用ポリシー、許可プレフィックス、テスト結果、ドロップ調査
取引所・トランジット事業者 接続とポリシーに従った経路・トラフィック運搬 各参加者の内部判断、すべての攻撃パケットの意図 経路伝播、接続状態、障害時刻、連絡対応
共同調整組織 標準、測定、運用規範、不正利用連絡の改善 個別事件の自動的な帰属や強制的修復 測定手法、時点付き結果、連絡先品質、是正状況

この表は、責任を薄めるためのものではない。誰が何を制御できたかを明確にし、実行可能な改善へ結びつけるためのものである。部分的な制御しか持たない主体へ全体結果を要求しても、検証可能な改善は生まれにくい。

GitHub が緩和引き継ぎを十分に準備していたとしても、送信元詐称が許されるネットワークが残れば反射攻撃の供給面は弱いままである。memcached が安全な既定値を採用しても、古い配備は露出し続け得る。Akamai が攻撃を選別できても、GitHub が正規利用者の回復を測れなければ、結果の説明は不完全になる。

一つの領域の進歩は、その領域の成果として評価すべきである。同時に、それをもって連鎖全体が解決したとみなしてはならない。説明責任は、制御範囲を正確に区切ることで強くなる。

自動化は権限を隠さず、引き継ぎを短縮すべきである

GitHub は、人の介入への依存を減らし、緩和事業者の発動を自動化する方法を検討すると述べている。[1] 数分間の短縮でも、失敗する要求数や運用負担を大幅に減らせる可能性がある。事前承認された自動対応は、会議招集、手動設定、複数段階の承認を待つより速い。

しかし、自動化は速いだけでは説明可能にならない。どの信号が十分なのか、どのプレフィックスを変更できるのか、移管先が健全か、成功をどの観測で確認するのかが必要である。局所的な監視誤りを世界的な到達不能へ拡大しないため、権限は限定されなければならない。

責任ある設計は、検知、提案、実行を分ける。検知段階は複数の証拠を集める。ポリシー段階は条件が一致したときに経路移管を提案する。既知ベクトルと限定範囲については自動実行を認め、未知の状況では運用者確認を求める。各段階は、入力、判断、実行者、変更内容、結果を記録する。

自動操作は、承認済みプレフィックス、確認済みのプロバイダー接続、検証済み経路ポリシーに限定すべきである。外部の複数観測点から意図した経路が見えることも確認しなければならない。ローカルルーターの設定が変わったことと、インターネット上の利用者が新経路を選んだことは同じではない。

自動化には復帰手順も要る。攻撃量が下がった直後に緩和経路を外せば、次の波で再び停止するかもしれない。長く残しすぎれば、費用、遅延、事業者依存が増える。安定観測期間、段階的復帰、直接経路が悪化した場合のロールバックを定める必要がある。

人による監督も残る。DDoS は敵対的な事象であり、相手は防御に合わせて方式を変える。一つのベクトルに最適化された自動規則が、別の攻撃には効かない場合もある。必要なのは人か機械かという二者択一ではなく、限定された機械権限、停止権限、観測可能性、訓練済みの人間判断を組み合わせることである。

事件公表はネットワーク上の説明責任を構成する

GitHub の報告が有用なのは、「高度な攻撃を緩和した」という安心表明だけで終わらなかった点にある。UTC の時刻、ビットレート、パケットレート、AS 番号、経路操作、緩和事業者、復旧順序が示された。[1] 他のネットワーク運用者は、その記録を自組織の準備状況と比較できる。

公表には正当な限界がある。攻撃中に詳細なフィルタリング規則を明かせば、回避方法を相手へ教えるおそれがある。非公開のトポロジー、契約条件、顧客情報、内部通信を守る必要もある。説明責任は、すべての情報を即時公開することを意味しない。

それでも、原因と標語を区別できるだけの証拠は必要である。攻撃ベクトル、観測規模、影響時間、主要な制御変更、復旧信号、後続の改善を、悪用可能な細部を避けつつ説明できる。何を測定し、何を推定し、何が不明かを分けることが重要だ。

GitHub は自社環境でトラフィックと対応時刻を記録した。Cloudflare は memcached の増幅特性を分析した。CISA は memcached を含む UDP サービスを反射増幅の対象として整理した。[3][6] CAIDA はネットワークからの詐称可能性を測る。[14] これらを組み合わせれば仕組みは説明できるが、個々の資料だけで GitHub 攻撃に使われた全サーバーや全送信元ネットワークを特定することはできない。

不完全なテレメトリーを告発へ変えるべきではない。偽装要求へ応答したサーバーは、誤設定、古い配備、侵害、意図的公開など複数の状態にあり得る。アドレス一覧に現れたネットワークが、送信元ではなくトランジット経路である場合もある。証拠の粒度を守ることは、法的慎重さだけでなく、正しい運用改善の前提になる。

将来の大規模攻撃で最低限残すべき証拠

同種の事件について、対象ネットワークは少なくとも次の記録を保存すべきである。

  • 異常を最初に検知した時刻と、判断に使ったビットレート、パケットレート、プロトコル、ポート、アプリケーション指標
  • サービスが全面的に利用不能だった時間、断続的に不調だった時間、地域や機能ごとの差
  • 緩和を発動した時刻、発動権限を持った役割、手動・自動の別、判断根拠
  • 移動対象となったプレフィックスと AS、通常経路の撤回、新経路の広告、外部観測点での可視性
  • 緩和事業者がトラフィックを受け入れた時刻、フィルタリング開始時刻、処理量、容量余裕
  • 正規トラフィックの返送経路、遅延、アプリケーション成功率、地域別エラー率
  • 攻撃量が再上昇した場合の挙動と、別ベクトルへの切り替わり
  • 通常経路へ戻した条件、段階、ロールバックの有無
  • 攻撃後に閉じた公開サービス、更新した既定値、送信元検証の改善、連絡先の修正
  • 公開できない事項と、その理由、保存期間、独立レビューの有無

緩和事業者には、単に「何 Tbps を落としたか」だけでなく、正規通信をどの程度届けられたかを示す記録が必要である。フィルタリング量は入力側の成果であり、利用者の成功率は出力側の成果である。両方がなければ、緩和の品質を評価できない。

サーバー運用者とホスティング事業者には、露出スキャン、設定変更、通知、修復確認の記録が求められる。アクセスネットワークには、顧客別の許可プレフィックス、検証ポリシー、例外、テスト結果が必要になる。ソフトウェアプロジェクトには、安全な既定値がいつ導入され、どの配備へ影響するかを明確にする役割がある。

証拠は責任追及のためだけに残すのではない。次回の発動時間を短縮し、誤検知を減らし、緩和事業者への依存を訓練し、同じ露出を再発させないために使う。記録の価値は、保存量ではなく、判断と結果を再現できるかで決まる。

公開資料からは証明できないこと

第一に、攻撃者の身元と動機は分からない。GitHub の事件報告は決定的な帰属を示していない。後年の別事件やボットネットに関する法的記録を、この攻撃の実行者証明として流用することはできない。

第二に、リフレクターの完全な一覧、その所有者、ホストしていた全 AS、偽装要求を発生させたネットワークは公表されていない。一般的な詐称可能性の測定は、事件当日の個別パケット経路を置き換えない。

第三に、GitHub の非公開経路ポリシーや Akamai との契約内容は分からない。商用上の発動条件、容量保証、経路コミュニティ、返送設計、個別のフィルタリング規則を、公表された時系列から作り出すべきではない。

第四に、1.35Tbps というピークは、すべてのリンクと装置が同じ量を処理したことを証明しない。毎秒1億2,690万パケットという値も、どの資源が限界だったかを特定しない。測定地点と集計方法が重要である。

第五に、顧客ごとの損失額、契約上の損害、過失、法的責任について公表資料は結論を与えない。コードホスティングの停止が開発や依存業務へ影響し得ることは説明できても、証拠のない金額や責任判断を置くことはできない。

第六に、後続の約400Gbps 攻撃で同じ停止が起きなかったことは、将来のすべての攻撃に対する免疫を示さない。その時点、その経路、その緩和状態で結果が異なったことを示すにとどまる。

こうした限界は分析を弱くしない。むしろ、検知時刻、経路権限、緩和引き継ぎ、プロトコル露出、安全な既定値、送信元検証、クリーントラフィック配送という、証拠で支えられる論点に集中させる。

求めるべきは完全防御ではなく、実証可能な継続性である

どのネットワークも、あらゆる攻撃を無害にできるとは保証できない。攻撃者は端末数を増やし、新しいプロトコルを悪用し、依存サービスを狙い、ボリューム攻撃からアプリケーション層の枯渇へ移れる。完全防御を基準にすれば、達成不能な約束と曖昧な広報だけが残りやすい。

実務的な基準は、定義された条件下での「実証可能な継続性」である。運用者は、直接経路の限界、緩和発動時間、BGP 収束の前提、クリーン返送容量、重要アプリケーションの確認方法を把握すべきである。緊急時より前に引き継ぎを試験し、例外を記録し、どの機能を縮退させ、どの機能を維持するかを決めておく必要がある。

送信元側にも同じ基準が要る。アクセスネットワークは、顧客が偽装送信元パケットを外部へ送れるかを試験できなければならない。ホスティング事業者は、高リスクな公開サービスを特定し、担当者へ連絡できなければならない。ソフトウェア開発者は、安全な既定値を選び、外部公開の意味を明確にしなければならない。

この基準はトレードオフも認める。不用意に厳格な送信元検証を導入すれば、正当な非対称経路を壊す可能性がある。攻撃的な DDoS 規則は実利用者を排除し得る。経路移管は遅延、費用、外部依存を増やす。UDP を無効にすれば、それを必要とするアプリケーションへ影響する。責任ある運用は、費用を否定せず、限定された制御を選び、その根拠を残す。

ここに、説明責任と単純な非難の違いがある。非難は被害後に名指しできる主体を探す。説明責任は、誰が判断を制御し、どの証拠を使い、どの限界の下で行動し、結果をどう観測し、その後何を変えたかを問う。複数の主体が異なる制御について説明責任を負うことは、それぞれが攻撃に対して同じ責任を負うという意味ではない。

結論

GitHub の2018年 memcached 攻撃は、記録的規模の DDoS であると同時に、圧力下でネットワーク権限がどう移動するかを示す実地試験だった。GitHub は異常を検知し、AS36459 の通常トランジット経路を撤回し、Akamai を通じてプレフィックスを広告した。BGP の再収束と Akamai 側のフィルタリングを経て、サービスが回復したと報告した。[1]

攻撃側では、公開 memcached サーバーが増幅応答を生成し、偽装送信元アドレスが応答を GitHub へ向けた。ソフトウェアの既定値、サーバー露出、送信元検証、経路ポリシー、スクラビング容量、正規通信の復旧は、すべて異なる主体の制御下にあった。

単一の対策では結果を説明できない。回線増強は公開リフレクターを閉じない。BGP の撤回は悪性パケットを分類しない。アンチスプーフィングはサーバーを設定せず、クリーントラフィックを届けない。安全な memcached の既定値は古い配備を自動更新しない。緩和事業者も、対象側に試験済みの引き継ぎ経路がなければ行動できない。

したがって、説明責任の基準は証拠の連鎖である。対象ネットワークは、いつ異常を検知し、誰が経路を動かし、緩和経路をどう検証し、どのアプリケーション信号で回復を確認したかを示す。緩和事業者はフィルタリングと正規配送を示す。サーバー運用者は露出管理を、アクセスネットワークは送信元検証を、ソフトウェア開発者は安全な既定値と明確な案内を示す。

GitHub の公開時系列は、すべての未知を解消したわけではない。それでも、トラフィックがどう測られ、到達性がどう移り、正規利用者がどう守られ、攻撃を可能にした条件がどう減らされるべきかを検証する土台を残した。ネットワークのレジリエンスは、巨大な容量を宣伝するときではなく、実際の制御と回復を証拠で示せるときに信頼できる。

出典

  1. https://github.blog/news-insights/company-news/ddos-incident-report/
  2. https://github.blog/news-insights/the-library/denial-of-service-attacks/
  3. https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/
  4. https://blog.cloudflare.com/the-root-cause-of-large-ddos-ip-spoofing/
  5. https://blog.cloudflare.com/the-rise-of-multivector-amplifications/
  6. https://www.cisa.gov/ncas/alerts/ta14-017a
  7. https://docs.memcached.org/advisories/ddos/
  8. https://github.com/memcached/memcached/wiki/ConfiguringServer
  9. https://datatracker.ietf.org/doc/rfc2827/
  10. https://datatracker.ietf.org/doc/rfc3704/
  11. https://datatracker.ietf.org/doc/rfc4948/
  12. https://www.akamai.com/site/en/documents/brochure/memcached-reflection-attacks-launch-a-new-era-for-ddos-brochure.pdf
  13. https://www.akamai.com/site/en/documents/state-of-the-internet/soti-summer-2018-attack-spotlight.pdf
  14. https://www.caida.org/projects/spoofer/
  15. https://docs.manrs.org/docs/network-guide/anti-spoofing/
  16. https://www.cloudflare.com/learning/ddos/memcached-ddos-attack/
  17. https://www.cloudflare.com/learning/ddos/famous-ddos-attacks/
  18. https://www.ietf.org/archive/id/draft-qin-savnet-incentive-00.html