はじめに
例のリレーブログ*1の時間です。前の僕の記事はこれ、前回の方のブログはこちらになります。
今回のテーマは『BGPのセキュリティ』です。今回もこの分野に関する知識は持ち合わせていなかったので、ゼロから調べたことを簡単にまとめて(まとまってるか?)紹介します。
BGPとその問題点
BGPとは、Border Gateway Protocolの略で、AS(自律システム:単一のルーティングポリシーによって管理されたネットワークの集まり)間の経路制御プロトコルです。
AS同士は、ASに割り振られているAS番号を利用してネットワーク上での組織間の経路情報を交換しますが、送られてくる経路情報はいちいち認証せずに基本的に信用する仕様になっています。
そのため、BGPルータで誤ったネットワークの設定がなされると、その正当性の確認なしにその経路情報が伝搬して、IPパケットが到達しなくなったり、転送先や経路が変わってしまうことがあります。このように通信経路を結果的に乗っ取ってしまうことを(意図的かどうかにかかわらず)BGPハイジャックと言うようです。
この仕様によって、例えば
- 2008年にはYouTubeの経路情報が乗っ取られたり(これは設定ミスが原因らしい)
https://www.secureworks.com/research/bgp-hijacking-for-cryptocurrency-profit
- 2018年にもAmazonのRoute53向けの通信が別のサーバーに転送されて仮想通貨が盗まれる
といったような被害が出ています。
BGPのセキュリティ対策
RPKI
上であげたような問題を解決するために、BGPのセキュリティ機能としてRPKIというものの利用が考えられました。
RPKI(Resource Public Key Infrastructure)とは、IPアドレスやAS番号といった番号資源の割り振りと割り当てを証明する公開鍵基盤です。
これを用いることで、ROAと呼ばれるものの生成ができます。
ROA(Route Origination Authorization)とは、IPアドレスとAS番号の組み合わせに対し、それが正しい組み合わせであることを示す電子署名が施されたデータです。
ROAを利用すると、オリジン検証というものを行うことができるようになります。
オリジン検証:あるIPアドレスの経路情報が本来の経路情報の広告元によって経路広告(広告:動的ルーティングによりルート情報を伝えること)されたものかをROAと比較して検証します。
この検証によって、本来と異なるASがIPアドレスを使い始めた場合に検知ができます。
BGPsec
RPKIだけで問題は解決するように見えます*3が、厳密には、ニセのBGPルーティング情報を送るときにASパス(ルート情報がどのASを経由してきたのか分かるAS番号のリストを示すアトリビュート)の末尾に正しいAS番号を追加すればオリジン認証を突破できてしまうようです。
BGPsecは、誤った経路情報を以下の2つの仕組みで検出する仕組みです。
オリジン検証:上で説明した通りです*4。
ASパス検証:IPパケットの伝送経路が正しいか確認します。ASパスが途中で変えられてしまったことが検知できます。
これにより経路情報の保証がほぼ完全になされますが、前のASが作った署名にも署名がなされている、といった署名のチェーンが起きていたりして署名チェックの負荷が大きく、BGPルータに大量のメモリが必要となるという問題があり、現状あまり普及していないようです*5。
おわりに
今回BGPについて色々調べてみて、誤操作によって問題が起きてしまうこともよくあったり、脆弱性を突いた攻撃もけっこうなされているんだなあと勉強になりました(小学生並の感想...)。
次回の方はこちらで更新予定です。
参考文献
BGPハイジャックの怖さを、目で見てみよう:可視化ツールで学ぶWAN入門(1) - @IT
[招待講演] RPKIとルーティングセキュ リティ技術BGPSECにおける課題と展望
インターネット用語1分解説~リソースPKIとは~ - JPNIC
インターネット用語1分解説~BGPsecとは~ - JPNIC
BGP security: the BGPsec protocol | Noction
*1:seccampのグループワークから生まれた企画。リレーブログのルール:前の人がが次の人のテーマを決める
*2:この手の攻撃はよくされているようです:BGP Hijacking for Cryptocurrency Profit | Secureworks
*3:誤操作によるBGPハイジャックが大半のようなので、攻撃のことを考えず意図的でないBGPハイジャックを防ごうと思えばこれで事足りているらしい?https://rpki-nstgt-test.readthedocs.io/ja/latest/about/faq.html
*4:オリジンだけ見ていて途中の伝送経路はちゃんと見ていないという理解をしています。
*5:これの改良を試みている論文もあります:https://ipsj.ixsq.nii.ac.jp/ej/index.php?active_action=repository_view_main_item_detail&page_id=13&block_id=8&item_id=177521&item_no=1