1. サポートセンター
  2. ドキュメント
  3. Burp Collaborator
  4. プライベートサーバの配備

プライベートBurp Collaboratorサーバの配備

デフォルトでBurpは、PortSwiggerが提供するパブリックBurp Collaboratorサーバを使いますが、この選択は多くの目的に適さない場合があります。詳細は、メインのBurp Collaboratorドキュメントを参照してください。

必要に応じて、Burp Collaboratorサーバのプライベートインスタンスを配備できます。このドキュメントは、そのためのプロセスと、次のトピックについても説明します:

インストールと実行

Burp Collaboratorサーバは、Burp Suite Professional自身と同じ実行ファイルに含まれています。独自のサーバインスタンスを実行するのに、ライセンスキーは必要ありません。サーバはコマンドラインから--collaborator-server引数を使って直接起動できます。例:

sudo java -jar burp.jar --collaborator-server

サービスを実行するのに必要なポートにバインドできない場合、サーバは起動に失敗します。これらのポートを使用している他のプロセスを停止する必要があります。デフォルトで、Burp Collaboratorサーバは次のポートをリッスンします:

さらに、Unixベースのシステムでこれらのポートにバインドするためには、root権限でサーバを実行する必要があります。あるいは、非標準のポート上で実行するようサーバを設定し、ポートマッピングで元のポートへリダイレクトする方法もあります。

Burp Collaboratorサーバを起動するとき、想定する使用方法に基づいて、JVMのメモリ処理およびガベージコレクションの設定をお勧めします。少人数での利用を想定してデスクトップマシンでCollaboratorサーバを実行する場合、JVMの使用するメモリ量を減らせます。次のコマンドは、ヒープを10から200MBの間で変動させ、JVMの5%の時間をガベレージコレクションに使用する設定で、通常あまりメモリを消費しません:

sudo java -Xms10m -Xmx200m -XX:GCTimeRatio=19 -jar burp.jar --collaborator-server

大人数で利用ができるよう専用マシン上でCollaboratorサーバを実行する場合、通常はOS・JVM・その他の実行プロセス用に1GBのメモリを残し、使用可能な物理メモリの量にヒープサイズを固定する設定が効率的です。例:

sudo java -Xmx3g -Xms3g -jar burp.jar --collaborator-server

サーバを頻繁に使用する予定で4GB以上の物理メモリがある場合は、ガベレージコレクション中に起こるJVMの一時停止を大幅に削減する、G1 ガベレージコレクタへの切り替えを推奨します。例:

sudo java -Xmx12g -Xms12g -XX:+UseG1GC -jar burp.jar --collaborator-server

Collaboratorサーバの機能をすべて使うには、通常は適切な設定ファイルを作る必要があります。

閉じたネットワーク上での基本的なセットアップ

閉じたプライベートなネットワークでひとり(または少人数のチーム)で利用する方法が、プライベートCollaboratorサーバの一般的な利用方法です。インターネットアクセスがない閉じたネットワーク上のアプリケーションをテストする場合、もちろんデフォルトのCollaboratorサーバは使用できません。

このような状況では、設定ファイルは必要なく、インストールと実行にあるコマンドの1つを使って、最小限のCollaboratorサーバのインスタンスを実行できます。Burpの設定で、Collaboratorサーバのアドレスに自分のマシンのIPアドレスを設定する必要があります。

このセットアップでは、DNS名前解決のカスタマイズや、信頼された有効なHTTPS接続はサポートしません。しかし、Collaboratorの最低限の機能を使用でき、外部にHTTP通信するような問題は検出できます。

非標準ポートでの実行

Collaboratorサーバを root 以外のユーザとして実行する場合は、非標準のポート上で実行するように設定する必要があります。使用しているカスタムポートと標準ポートをマッピングするように、オペレーティングシステムを設定する必要もあります。通常、TCPとUDP接続の受信、およびUDPレスポンス送信のマッピング設定が必要です。

Collaboratorサーバが非標準ポートを使用するよう、設定ファイルで設定できます。例:

{
  "serverDomain" : "burpcollaborator.example.com",
  "eventCapture": {
    "http": {
      "ports" : 8080
    },
    "https": {
      "ports" : 8443
    },
    "smtp": {
      "ports" : [8025, 8587]
    },
    "smtps": {
      "ports" : 8465
    }
  },
  "dns": {
    "ports" : 8053
  }
}

"ports"の値には単一の数値、または複数のポートでサービスのリッスンをしたい場合はポート番号の配列が指定できます。Collaboratorサーバはデフォルトで、SMTP通信用にポート25と587をリッスンします。

DNS設定

Burp Collaboratorはデフォルトで、特定ドメインのDNSサービスを実行するため、これにはCollaboratorが使用する専用ドメインやサブドメインが必要になります。DNS機能を省略し、IPアドレスのみでCollaboratorサーバにアクセスもできます; しかしこの設定は、様々な脆弱性の検出に効果的ではありません。

Burp Collaboratorをパブリックなインターネットで実行する場合、特定のドメイン(例えばexample.com)を購入するか、既に所有し使用しているドメインのサブドメイン(例えばburpcollaborator.example.com)が使用できます。制限された内部ネットワークの場合は、任意の専用内部ドメインを選択できます。

Collaboratorサーバが適切なDNSレコードを使用できるように、制御するドメインを知っている必要があります。これは、Collaborator設定ファイルの設定です。例:

{
  "serverDomain": "burpcollaborator.example.com"
}

また、そのドメインのDNSがCollaboratorサーバに委任されるよう、ドメインを設定する必要があります。この詳細は状況によって異なります。ほとんどのドメインレジストラは、ドメインの権威DNSサーバを設定するWebインタフェースを提供しています。

example.comをCollaboratorサーバ用のドメインとして使用している場合、次のネームサーバを使用するよう設定が必要です:

ns1.example.com
ns2.example.com

また、それぞれをCollaboratorサーバのIPアドレスに関連づけるグルーレコードを設定する必要があります。設定したDNSサーバそれぞれに異なるIPアドレスを指定するようドメインレジストラが要求する場合、Collaboratorサーバに2つのパブリックIPアドレスを設定する必要があるかもしれません。

注: テスト対象サーバのhostsファイルを編集するだけでは、Collaborator DNSサービスの使用は避けられません。テストでCollaboratorサーバを使用すると、メインに設定されたドメインの、ランダムに生成したサブドメインを使用します。hostsファイルはワイルドカードをサポートせず、よってランダムに生成されたサブドメインを検索する方法がありません。

SSL設定

Burp Collaboratorは、テスト対象システムからの通信キャプチャと、Burp Suiteによるポーリングリクエストを提供するために、HTTPSとSMTPSサービスを実行します。通常は、Collaboratorが使用しているドメイン名のワイルドカードSSL証明書が設定されている場合のみ、CollaboratorサーバへのSSL接続は成功します。Collaboratorの設定ファイルでSSL証明書の設定ができます。

ドメインの有効なワイルドカード証明書を持っていない場合、Burp Collaboratorは自己署名の証明書を生成できます。例えば、次の設定で *.burpcollaborator.example.com の自己署名ワイルドカード証明書が作成されます:

"ssl": {
  "hostname" : "burpcollaborator.example.com"
}

テスト対象のサーバの信頼する証明書にインストールできるか、対象アプリケーションがSSL証明書の検証を行わない場合は、自己署名証明書で十分でしょう。

ドメイン用の有効なワイルドカード証明書を購入していれば、認証局(CA)から証明書を取得し、Collaboratorサーバにインストールできます。この例では、OpenSSLで証明書署名要求(CSR)を作成し、CAは証明書と中間証明書を提供しています。

OpenSSLで、秘密鍵のデフォルトフォーマットは、伝統的なSSLeayフォーマットになっています。Collaboratorサーバにインストールする前に、これらをPKCS8に変換する必要があります。この変換を行うOpenSSLコマンドは次の通りです:

openssl pkcs8 -topk8 -inform PEM -in keys/burpcollaborator.example.com.key -outform PEM -out keys/burpcollaborator.example.com.key.pkcs8 -nocrypt

Collaboratorの設定ファイルでSSL証明書の設定ができます。次の設定ファイルの例では、秘密鍵・証明書・中間証明書を読み込む方法を示しています。

"ssl": {
  "certificateFiles" : [
    "keys/burpcollaborator.example.com.key.pkcs8",
    "keys/burpcollaborator.example.com.crt",
    "keys/intermediate.crt"]
}

注: 証明書ファイルは正しい順序(秘密鍵・証明書・中間証明書)で指定する必要があります:

また、Java keytoolを使用してCSRを生成し、結果として得られる証明書をサーバのJavaキーストアにインポートできます。この場合、次の設定で証明書をCollaboratorサーバに読み込みます:

"ssl": {
  "keystore": {
    "path" : "myKeystore.jks",
    "password" : "myPassword"
}

通信イベントとポーリングを個別のネットワークインタフェースに設定した場合、インタフェースごとに個別のSSL設定が必要です。

通信イベントとポーリング

Collaboratorサーバは、クライアントからの2種類の受信通信をサポートします。

デフォルトで、Collaboratorサーバは通信イベントとポーリングリクエストの両方の通信を、同じネットワークインタフェースで処理します。必要に応じて、ポーリングリクエストに異なるインタフェース(またはポート)を使用するように設定できます。この機能は、ファイアウォール制限の回避や、ネットワーク層でポーリング機能をアクセス制御する場合に使用できます。

Collaboratorの設定ファイルの"polling"オプションセクションで、個別のポーリングインタフェースを設定できます。これを行う場合、両方のインタフェースに同じワイルドカードSSL証明書が使用でき、CollaboratorサーバのDNSサービスでポーリングリクエストが正しいインタフェースに向くよう設定してください。このセットアップでは、Burp Collaborator Serverオプションのサーバの位置のみ設定する必要があり、Burpがポーリングをする際にサーバドメインの先頭に"polling."を自動的に追加します。CollaboratorのDNSサービスはポーリングサブドメインを、分離したポーリングインタフェースのパブリックIPアドレスに名前解決します。これにより、Burpクライアントの設定をシンプルにしながら、通信とポーリングのインタフェースを分離できる利点があります。

メトリクス

Collaboratorサーバは、管理者がサーバのパフォーマンスや負荷を監視するための様々な使用率のメトリクスを収集します。Collaboratorのマシンがその使用レベルに十分耐えうるかを確認するためにこれらのメトリクスが有用です。通信イベントやポーリングリクエストから抽出されたデータは、このメトリクスには全く含まれていない点に留意してください。

Collaboratorサーバのポーリングインタフェース経由でメトリクスデータにアクセスでき、共有秘密URLとクライアントIPアドレスのホワイトリストでアクセスを制御できます。デフォルトでメトリクスは無効で、Collaborator設定ファイルの"metrics"オプションセクションを使用すると有効になります。例:

"polling" : {
  "publicAddress" : "10.20.0.159"
},
"metrics": {
  "path" : "jnaicmez8",
  "addressWhitelist" : ["21.10.23.0/24"]
},

この設定では、21.10.23.0/24ネットワーク上のクライアントが次のURLにアクセスすると利用できます:

https://10.20.0.159/jnaicmez8/metrics

Collaboratorログ

設定ファイルで、標準出力へのログレベルを設定できます。使用可能な値は次の通りです:

インストールのテスト

サーバを配備したとき、正しく動作しているかの確認にBurp Suiteが使用できます。Burp Suiteプロフェッショナル版では、Burp Collaborator Serverオプションの詳細を設定し、ヘルスチェック機能を実行してください。Burpは期待するCollaboratorの各機能を動作させようとし、各機能の成功または失敗をフィードバックします。

Collaborator設定ファイル形式

Burp Collaboratorサーバの全てのオプションは、設定ファイルを使用して制御します。デフォルトで、collaborator.configというファイルをカレントディレクトリ内で探します。--collaborator-configコマンドライン引数でこの場所を上書きできます。例:

sudo java -jar burp.jar --collaborator-server --collaborator-config=myconfig.config

設定ファイルはJSONフォーマットを使用し、コメントもサポートします。IPアドレスが必要な場所で、単一のアドレスまたはアドレスのリストを設定できます。例えば、ネットワークインタフェースのローカルアドレスの設定に次のどちらも使用できます:

"localAddress" : "10.20.0.159"
"localAddress" : ["10.20.0.159", "127.0.0.1"]

利用可能なオプション設定も含む、完全な設定ファイルのサンプルを次に示します:

{
  "serverDomain" : "burpcollaborator.example.com",
  "workerThreads" : 10,
  "eventCapture": {
    "localAddress" : ["10.20.0.159", "127.0.0.1"],
    "publicAddress" : "10.20.0.159",
    "http": {
      "ports" : 80
    },
    "https": {
      "ports" : 443
    },
    "smtp": {
      "ports" : [25, 587]
    },
    "smtps": {
      "ports" : 465
    },
    "ssl": {
      "certificateFiles" : [
        "keys/burpcollaborator.example.com.key.pkcs8",
        "keys/burpcollaborator.example.com.crt",
        "keys/intermediate.crt" ]
    }
  },
  "polling" : {
    "localAddress" : "127.0.0.1",
    "publicAddress" : "10.20.0.159",
    "http": {
      "port" : 9090
    },
    "https": {
      "port" : 9443
    },
    "ssl": {
      "hostname" : "collaboratorpolling.example.com"
    }
  },
  "metrics": {
    "path" : "jnaicmez8",
    "addressWhitelist" : ["21.10.23.0/24"]
  },
  "dns": {
    "interfaces" : [{
      "name": "ns1",
      "localAddress" : "34.23.11.6",
      "publicAddress" : "98.87.76.55"
    }, {
      "name" : "ns2",
      "localAddress" : "34.23.11.6",
      "publicAddress" : "98.87.11.00"
    }],
    "ports" : 53
  },
  "logLevel" : "INFO"
}

設定ファイルでサポートされている定義は以下の通りです:

serverDomain Collaboratorサーバが制御するドメインまたはサブドメイン。この設定は、DNS機能に必要です。
workerThreads Collaboratorが受信リクエストの処理に使用するスレッドの数。
eventCapture.localAddress デフォルトで、通信イベントをキャプチャするために全てのローカルインタフェースをリッスンします。指定した場合、設定したインタフェースのみリッスンします。
eventCapture.publicAddress 通信イベントのキャプチャに使用するパブリックIPアドレス。
eventCapture.http.ports HTTP通信イベントをリッスンするポート。ポート80が転送されている場合のみデフォルトから変更する必要があります。
eventCapture.https.ports HTTPS通信イベントをリッスンするポート。ポート443が転送されている場合のみデフォルトから変更する必要があります。
eventCapture.smtp.ports SMTP通信イベントをリッスンするポート。ポート25と587が転送されている場合のみデフォルトから変更する必要があります。
eventCapture.smtps.ports SMTPS通信イベントをリッスンするポート。ポート465が転送されている場合のみデフォルトから変更する必要があります。
eventCapture.https.hostname 自己署名証明書を生成する際に使用されます。詳細は、SSL設定を参照してください。
polling.localAddress デフォルトで、Collaboratorは通信イベントのキャプチャとポーリングリクエストに、同じネットワークインタフェースを使用します。指定した場合、ポーリングリクエストに別のインタフェースが使用されます。
polling.publicAddress ポーリングリクエストに使用するパブリックアドレス。
polling.http.port HTTP経由のポーリングに使用するポート。これは標準ではなく、Burp Suiteがそれを使用するように設定する必要があります。
polling.https.port HTTPS経由のポーリングに使用するポート。これは標準ではなく、Burp Suiteがそれを使用するように設定する必要があります。
polling.https.hostname 自己署名証明書を生成する際に使用されます。詳細は、SSL設定を参照してください。
metrics.path メトリクスページにアクセスできるようにするURLパス。
metrics.whitelist メトリクスページにアクセスを許可するクライアントIPアドレスのホワイトリスト。
dns.ports DNSクエリのリッスンポート。53 番ポートを転送している場合のみデフォルトから変更する必要があります。
dns.interfaces DNSクエリをリッスンするローカルインタフェースのリスト。各権威ネームサーバに異なるIPアドレスを設定するようレジストラが要求する場合、複数のネットワークインタフェースを使用でき、それらの場所をこのオプションで設定できます。
dns.interfaces.name このインタフェースで実行するネームサーバのホスト名。各ネームサーバに異なるホスト名を使用してください (例えば ns1ns2、など)。
dns.interfaces.localAddress このネームサーバにバインドするローカル アドレス。
dns.interfaces.publicAddress 設定されたローカルアドレスに対応するパブリックIPアドレス。通常、ドメインのDNSレコードに、設定されたホスト名とパブリックIPアドレスを使用する必要があります。
logLevel 標準出力に表示するログレベル