著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

BGP(ボーダーゲートウェイプロトコル)は、インターネットを介したパケットのルーティングを担当するコアプロトコルの1つであるため、問題が発生すると、重大な停止が発生する可能性があります。 たとえば、2019年に、小規模なISPがBGPの設定ミスを行い、残念ながらアップストリームに伝播し、CloudflareとAWSの大部分を1時間以上オフラインにしました。 また、1年前、有名な暗号通貨ウォレットプロバイダーへのトラフィックを傍受し、疑いを持たない顧客の資金を盗むために、BGPハイジャックが行われました。

BGPalerter はオープンソースのBGPネットワーク監視ツールであり、ルートの可視性や新しいルートのアナウンス、ルートの乗っ取りやルートなどの潜在的に悪質なアクティビティなど、BGPアクティビティに関するリアルタイムのアラートを提供できます。リーク

注: BGPalerterは、公開されているネットワークルーティング情報を自動的に取り込みます。つまり、監視するネットワークへの特権アクセスや統合のレベルは必要ありません。 すべての監視は、コンピュータ犯罪取締法、コンピュータ犯罪取締法、およびその他の同様の法律に完全に準拠しています。 ただし、影響を受けるネットワークオペレーターに、関連する調査結果を責任を持って開示することをお勧めします。

このチュートリアルでは、BGPalerterをインストールして構成し、疑わしいアクティビティがないか重要なネットワークを監視します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • Ubuntu 18.04を使用した初期サーバーセットアップに従ってセットアップされたUbuntu18.04サーバー(sudo非rootユーザーを含む)。

  • 監視する1つ以上のネットワークまたはデバイス。例:

    • あなたが維持しているサーバー
    • あなたの会社のネットワーク
    • ローカルISP

    デバイスまたはネットワークごとに、個々のIPアドレス、IPアドレス範囲、またはその一部である自律システム番号のいずれかを識別する必要があります。 これについては、ステップ1で説明します。

これらの準備ができたら、root以外のユーザーとしてサーバーにログインして開始します。

ステップ1—監視するネットワークを特定する

このステップでは、監視するネットワークの関連する詳細を特定します。

BGPalerterは、個々のIPアドレスまたはネットワークプレフィックスに基づいて監視できます。 また、自律システム(AS)番号に基づいてネットワーク全体を監視することもできます。これは、特定の管理エンティティが所有するネットワークのグローバルに一意の識別子です。

この情報を見つけるには、脅威インテリジェンスサービス TeamCymruが提供するIP-to-ASNWHOISルックアップサービスを使用できます。 これは、IPアドレスとネットワークルーティング情報を検索するために設計されたカスタムWHOISサーバーです。

whoisをまだインストールしていない場合は、次のコマンドを使用してインストールできます。

  1. sudo apt update
  2. sudo apt install whois

whoisがインストールされていることを確認したら、-h引数を使用してカスタムサーバーを指定し、自分のサーバーのIPアドレスを検索することから始めます。

  1. whois -h whois.cymru.com your-ip-address

これにより、次のような結果が出力されます。これは、サーバーが含まれているASの名前と番号を示しています。 これは通常、DigitalOceanなどのサーバーホスティングプロバイダーのASになります。

Output
AS | IP | AS Name 14061 | your-ip-address | DIGITALOCEAN-ASN, US

次に、ルックアップを実行して、サーバーが含まれているネットワークプレフィックス/範囲を特定できます。 これを行うには、-p引数をリクエストに追加します。

  1. whois -h whois.cymru.com " -p your-ip-address"

出力は前のコマンドと非常に似ていますが、サーバーのIPアドレスが属するIPアドレスプレフィックスが表示されます。

Output
AS | IP | BGP Prefix | AS Name 14061 | your-ip-address | 157.230.80.0/20 | DIGITALOCEAN-ASN, US

最後に、地理的な地域や割り当て日など、サーバーが含まれているASの詳細を調べることができます。

前のコマンドを使用して識別したAS番号に置き換えます。 -v引数を使用して詳細出力を有効にします。これにより、関連するすべての詳細が確実に表示されます。

  1. whois -h whois.cymru.com " -v as14061"

出力には、ASに関する詳細情報が表示されます。

Output
AS | CC | Registry | Allocated | AS Name 14061 | US | arin | 2012-09-25 | DIGITALOCEAN-ASN, US

監視するネットワークに関する重要な詳細を特定しました。 後で必要になるので、これらの詳細をどこかにメモしておいてください。 次に、BGPalerterのセットアップを開始します。

ステップ2—BGPalerterの非特権ユーザーを作成する

このステップでは、プログラムをsudo / root特権で実行する必要がないため、BGPalerterの新しい非特権ユーザーアカウントを作成します。

まず、パスワードが無効になっている新しいユーザーを作成します。

  1. sudo adduser --disabled-password bgpalerter

このユーザーはBGPalerterを実行/保守するためのサービスアカウントとしてのみ使用するため、パスワードやSSHキーを設定する必要はありません。

suを使用して新しいユーザーにログインします。

  1. sudo su bgpalerter

これで、新しいユーザーとしてログインします。

bgpalerter@droplet:/home/user$

cdコマンドを使用して、新しいユーザーのホームディレクトリに移動します。

bgpalerter@droplet:/home/user$ cd
bgpalerter@droplet:~$

BGPalerterの新しい非特権ユーザーを作成しました。 次に、システムにBGPalerterをインストールして構成します。

ステップ3—BGPalerterのインストールと構成

このステップでは、BGPalerterをインストールして構成します。 新しい非特権ユーザーとしてログインしていることを確認してください。

まず、最新バージョンを確実にダウンロードするために、BGPalerterの最新リリースを特定する必要があります。 BGPalerter Releases ページを参照し、最新のLinuxx64リリースのダウンロードリンクのコピーを取ります。

wgetを使用してBGPalerterのコピーをダウンロードできるようになりました。必ず、正しいダウンロードリンクに置き換えてください。

  1. wget https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64

ファイルのダウンロードが完了したら、実行可能としてマークします。

  1. chmod +x bgpalerter-linux-x64

次に、バージョン番号を確認して、BGPalerterが正常にダウンロードおよびインストールされていることを確認します。

  1. ./bgpalerter-linux-x64 --version

これにより、現在のバージョン番号が出力されます。

Output
1.24.0

BGPalerterを適切に実行する前に、構成ファイル内で監視するネットワークを定義する必要があります。 prefixes.ymlファイルを作成して、お気に入りのテキストエディタで開きます。

  1. nano ~/prefixes.yml

この構成ファイルでは、監視する個々のIPアドレス、IPアドレス範囲、およびAS番号をそれぞれ指定します。

次の例を追加し、ステップ1 で特定したネットワーク情報を使用して、必要に応じて構成値を調整します。

〜/ prefixes.yml
your-ip-address/32:
  description: My Server
  asn:
    - 14061
  ignoreMorespecifics: false

157.230.80.0/20:
  description: IP range for my Server
  asn:
    - 14061
  ignoreMorespecifics: false

options:
  monitorASns:
    '14061':
      group: default

必要な数のIPアドレス範囲またはAS番号を監視できます。 個々のIPアドレスを監視するには、IPv4の場合は/32を使用し、IPv6の場合は/128を使用してそれらを表します。

ignoreMorespecifics値は、BGPalerterが監視しているルートよりも具体的(小さい)なルートのアクティビティを無視するかどうかを制御するために使用されます。 たとえば、/20を監視していて、その中の/24のルーティング変更が検出された場合、これはより具体的であると見なされます。 ほとんどの場合、これらを無視したくはありませんが、複数の委任された顧客プレフィックスを持つ大規模なネットワークを監視している場合、これはバックグラウンドノイズを減らすのに役立つ可能性があります。

これで、ネットワークの監視を開始するために、初めてBGPalerterを実行できます。

  1. ./bgpalerter-linux-x64

BGPalerterが正常に起動すると、次のような出力が表示されます。 監視が開始されるまでに数分かかる場合があることに注意してください。

Output
Impossible to load config.yml. A default configuration file has been generated. BGPalerter, version: 1.24.0 environment: production Loaded config: /home/bgpalerter/config.yml Monitoring 157.230.80.0/20 Monitoring your-ip-address/32 Monitoring AS 14061

BGPalerterは、Ctrl+Cを使用して停止するまで実行を継続します。

次のステップでは、BGPalerterが生成できるアラートのいくつかを解釈します。

ステップ4—BGPalerterアラートの解釈

このステップでは、BGPalerterアラートの例をいくつか確認します。 BGPalerterは、 BGPalerterドキュメントで説明されているように、メイン出力フィードにアラートを出力し、オプションでconfig.yml内で構成できる追加のレポートエンドポイントにもアラートを出力します。

デフォルトでは、BGPalerterは以下を監視およびアラートします。

  • ルートハイジャック:ASが許可されていないプレフィックスをアナウンスし、トラフィックが誤ってルーティングされた場合に発生します。 これは、意図的な攻撃か、偶発的な構成エラーのいずれかである可能性があります。

  • ルートの可視性の喪失:インターネット上のBGPルーターの大部分が確実にルートにルーティングできる場合、ルートは可視であると見なされます。 可視性の喪失は、たとえばBGPピアリングが機能しなくなった場合などにネットワークが利用できなくなる可能性があることを意味します。

  • 新しいサブプレフィックスのアナウンス:ASが予想よりも小さいプレフィックスのアナウンスを開始したときです。 これは、意図した構成変更、偶発的な構成ミス、または場合によっては攻撃を示している可能性があります。

  • AS内のアクティビティ:通常、新しいルートアナウンスを参照します。 BGPalerterがルートをまだ認識していない場合、そのルートは「新しい」と見なされます。

以下は、アラートの例とその意味の簡単な説明です。

アラート#1
The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540

このアラートは、ルートハイジャックの証拠を示しています。AS64496は、このルートがAS65540によってアナウンスされると予想されるときに、203.0.113.0/24をアナウンスしました。 これは、ルートリーク、または攻撃者による意図的なハイジャックにつながる設定ミスの強力な指標です。

アラート#2
The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers

このアラートは、203.0.113.0/24ネットワークが表示されなくなったことを示しています。 これは、アップストリームルーティングの問題が原因であるか、ルーターの電源障害が発生している可能性があります。

アラート#3
A new prefix 203.0.113.0/25 is announced by AS64496. It should be instead 203.0.113.0/24 announced by AS64496

このアラートは、たとえば/24のみが予想されるときに/25をアナウンスするなど、予想されていない場所でより具体的なプレフィックスがアナウンスされたことを示します。 これは設定の誤りである可能性が高いですが、場合によってはルートハイジャックの証拠である可能性があります。

アラート#4
AS64496 is announcing 192.0.2.0/24 but this prefix is not in the configured list of announced prefixes

最後に、このアラートは、AS64496がBGPalerterがまだ認識していないプレフィックスをアナウンスしたことを示しています。 これは、新しいプレフィックスを合法的にアナウンスしていることが原因である可能性があります。または、他の誰かが所有するプレフィックスを誤ってアナウンスする結果となった設定の誤りを示している可能性があります。

このステップでは、BGPalerterアラートの例をいくつか確認しました。 次に、起動時に自動的に実行されるようにBGPalerterを構成します。

ステップ5—起動時にBGPalerterを起動する

この最後のステップでは、起動時に実行するようにBGPalerterを構成します。

新しい非特権ユーザーとしてまだログインしていることを確認してから、crontabエディターを開きます。

  1. crontab -e

次に、crontabファイルの最後に次のエントリを追加します。

crontab
@reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"

システムが起動するたびに、これにより「bgpalerter」と呼ばれる分離されたscreenセッションが作成され、その中でBGPalerterが開始されます。

crontabエディターを保存して終了します。 ここで、BGPalerterが起動時に正しく起動することを確認するために、システムを再起動することをお勧めします。

まず、BGPalerterユーザーからログアウトする必要があります。

  1. logout

次に、通常のシステムの再起動を続行します。

  1. sudo reboot

システムが再起動したら、サーバーに再度ログインし、suを使用してBGPalerterユーザーに再度アクセスします。

  1. sudo su bgpalerter

その後、BGPalerterからの出力を表示するために、いつでもセッションに接続できます。

  1. screen -r bgpalerter

この最後のステップでは、起動時に実行するようにBGPalerterを構成しました。

結論

この記事では、BGPalerterをセットアップし、それを使用してネットワークのBGPルーティングの変更を監視しました。

BGPalerterをよりユーザーフレンドリーにしたい場合は、Webhookを介してSlackチャネルにアラートを送信するように設定できます。

BGP自体について詳しく知りたいが、実稼働のBGP環境にアクセスできない場合は、DN42を使用して、安全で隔離された環境でBGPを試すことができます。