BeyondTrust Secure Remote Access のログを収集する
このドキュメントでは、Bindplane を使用して BeyondTrust Secure Remote Access ログを収集する方法について説明します。パーサーは 2 つの syslog 形式を処理します。最初の形式では構造化されたメッセージ内で Key-Value ペアが使用され、2 番目の形式ではパイプ区切りのフィールドが使用されます。パーサーは両方の形式から関連するフィールドを抽出し、UDM にマッピングします。また、抽出されたキーワードに基づいてイベントタイプの分類を行い、ログイン/ログアウト イベントと認証タイプの特定のロジックを処理します。
始める前に
- Google Security Operations インスタンスがあることを確認します。
- Windows 2016 以降、または systemdを使用する Linux ホストを使用していることを確認します。
- プロキシの背後で実行している場合は、ファイアウォール ポートが開いていることを確認します。
- BeyondTrust Secure Remote Access への特権アクセス権があることを確認します。
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
Windows のインストール
- 管理者として コマンド プロンプトまたは PowerShell を開きます。
- 次のコマンドを実行します。 - msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
- 次のコマンドを実行します。 - sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
その他のインストール リソース
- その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
- 構成ファイルにアクセスします。 - config.yamlファイルを見つけます。通常、Linux では- /etc/bindplane-agent/ディレクトリに、Windows ではインストール ディレクトリにあります。
- テキスト エディタ(nano、vi、メモ帳など)を使用してファイルを開きます。
 
- config.yamlファイルを次のように編集します。- receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: BEYONDTRUST_REMOTE_ACCESS raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。 
- <customer_id>は、実際の顧客 ID に置き換えます。
- /path/to/ingestion-authentication-file.jsonの値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。
Bindplane エージェントを再起動して変更を適用する
- Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。 - sudo systemctl restart bindplane-agent
- Windows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。 - net stop BindPlaneAgent && net start BindPlaneAgent
BeyondTrust リモート サポートを設定する
- BeyondTrust ウェブ UI にログインします。
- [アプライアンス] > [セキュリティ] > [アプライアンス管理] を選択します。
- [Syslog] セクションで、次の操作を行います。
- メッセージ形式: [レガシー BSD 形式] を選択します。
- リモート Syslog サーバー: Bindplane の IP アドレスとポートを入力します。
 
- [送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック | 
|---|---|---|
| datetime | metadata.event_timestamp | whenフィールドが存在しない場合、タイムスタンプは RFC3 339 形式を使用してdatetimeフィールドから解析されます。 | 
| deviceHost | target.hostname | deviceHostの値はtarget.hostnameに直接マッピングされます。 | 
| dstHost | target.ip | dstHostの値は、有効な IP アドレスとして検証された後、target.ipに直接マッピングされます。 | 
| dstPriv | additional.fields.[key=dstPriv].value.string_value | dstPrivの値は、キーdstPrivを持つadditionalフィールドに配置されます。 | 
| dstUid | target.user.userid | dstUidの値はtarget.user.useridに直接マッピングされます。 | 
| dstUser | target.user.user_display_name | dstUserの値はtarget.user.user_display_nameに直接マッピングされます。 | 
| eventName | metadata.event_type | eventNameがlogin(大文字と小文字を区別しない)の場合、metadata.event_typeはUSER_LOGINに設定されます。eventNameがlogout(大文字と小文字を区別しない)の場合、metadata.event_typeはUSER_LOGOUTに設定されます。それ以外の場合で、eventNameが空でない場合は、metadata.event_typeがUSER_UNCATEGORIZEDに設定されます。eventNameが空で、メッセージが 2 番目の grok パターンと一致する場合、metadata.event_typeはGENERIC_EVENTに設定されます。eventNameが空で、メッセージが最初の grok パターンと一致する場合、metadata.event_typeはGENERIC_EVENTに設定されます。srcUid、userid、whoが空でない場合、metadata.event_typeはUSER_CHANGE_PERMISSIONSに設定されます。deviceHostまたはsiteが空でない場合、metadata.event_typeはUSER_UNCATEGORIZEDに設定されます。それ以外の場合は、metadata.event_typeがGENERIC_EVENTに設定されます。 | 
| event_name | additional.fields.[key=event_name].value.string_value | event_nameの値は、キーevent_nameを持つadditionalフィールドに配置されます。 | 
| event_name | metadata.product_event_type | event_nameの値はidフィールドと組み合わせて使用され、metadata.product_event_typeに[id] -event_name`` 形式で入力されます。 | 
| externalKeyLabel | additional.fields.[key=externalKeyLabel].value.string_value | externalKeyLabelの値は、キーexternalKeyLabelを持つadditionalフィールドに配置されます。 | 
| id | metadata.product_event_type | idの値はevent_nameフィールドと組み合わせて使用され、metadata.product_event_typeに[id] -event_name`` 形式で入力されます。 | 
| jumpGroupId | additional.fields.[key=jumpGroupId].value.string_value | jumpGroupIdの値は、キーjumpGroupIdを持つadditionalフィールドに配置されます。 | 
| jumpGroupName | additional.fields.[key=jumpGroupName].value.string_value | jumpGroupNameの値は、キーjumpGroupNameを持つadditionalフィールドに配置されます。 | 
| jumpGroupType | additional.fields.[key=jumpGroupType].value.string_value | jumpGroupTypeの値は、キーjumpGroupTypeを持つadditionalフィールドに配置されます。 | 
| jumpointId | additional.fields.[key=jumpointId].value.string_value | jumpointIdの値は、キーjumpointIdを持つadditionalフィールドに配置されます。 | 
| jumpointName | additional.fields.[key=jumpointName].value.string_value | jumpointNameの値は、キーjumpointNameを持つadditionalフィールドに配置されます。 | 
| kv_data | さまざまな UDM フィールド | kv_dataフィールドは Key-Value ペアに解析され、キー(eventName、when、who、who_ip、site、target、status、reason)。 | 
| kvdata | さまざまな UDM フィールド | kvdataフィールドは Key-Value ペアに解析され、キー(msg、srcUser、srcUid、srcHost、dstUser、dstUid、dstHost、sessionId、jumpointId、jumpointName、jumpGroupId、jumpGroupName、jumpGroupType、externalKeyLabel、dstPriv)。 | 
| message | さまざまな UDM フィールド | messageフィールドは grok パターンを使用して解析され、さまざまなフィールドが抽出されて UDM フィールドにマッピングされます。 | 
| msg | metadata.description | msgの値はmetadata.descriptionに直接マッピングされます。 | 
| product_event_type | metadata.product_event_type | product_event_typeの値はmetadata.product_event_typeに直接マッピングされます。 | 
| product_log_id | metadata.product_log_id | product_log_idの値はmetadata.product_log_idに直接マッピングされます。 | 
| process_id | principal.process.pid | process_idの値はprincipal.process.pidに直接マッピングされます。 | 
| reason | security_result.description | reasonの値はsecurity_result.descriptionに直接マッピングされます。 | 
| segment_number | additional.fields.[key=segment_number].value.string_value | segment_numberの値は、キーsegment_numberを持つadditionalフィールドに配置されます。 | 
| sessionId | network.session_id | sessionIdの値はnetwork.session_idに直接マッピングされます。 | 
| site | target.hostname | siteの値はtarget.hostnameに直接マッピングされます。 | 
| site_id | additional.fields.[key=site_id].value.string_value | site_idの値は、キーsite_idを持つadditionalフィールドに配置されます。 | 
| srcHost | principal.ip | srcHostの値は、有効な IP アドレスとして検証された後、principal.ipに直接マッピングされます。 | 
| srcUid | principal.user.userid | srcUidの値はprincipal.user.useridに直接マッピングされます。 | 
| srcUser | principal.user.user_display_name | srcUserの値はprincipal.user.user_display_nameに直接マッピングされます。 | 
| status | security_result.action | statusがfailure(大文字と小文字を区別しない)の場合、security_result.actionはBLOCKに設定されます。それ以外の場合は、security_result.actionがALLOWに設定されます。 | 
| status | security_result.action_details | statusの値はsecurity_result.action_detailsに直接マッピングされます。 | 
| target | target.application | targetの値はtarget.applicationに直接マッピングされます。rep_clientはRepresentative Consoleに置き換えられ、web/loginはWeb/Loginに置き換えられます。 | 
| target | extensions.auth.type | targetがrep_clientの場合、extensions.auth.typeはMACHINEに設定されます。targetがweb/loginの場合、extensions.auth.typeはSSOに設定されます。それ以外の場合は、extensions.auth.typeがAUTHTYPE_UNSPECIFIEDに設定されます。 | 
| timestamp | metadata.event_timestamp | datetimeとwhenのどちらも存在しない場合は、未加工ログのtimestampがフォールバックとして使用されます。 | 
| total_segments | additional.fields.[key=total_segments].value.string_value | total_segmentsの値は、キーtotal_segmentsを持つadditionalフィールドに配置されます。 | 
| device_product | additional.fields.[key=device_product].value.string_value | device_productの値は、キーdevice_productを持つadditionalフィールドに配置されます。 | 
| device_vendor | additional.fields.[key=device_vendor].value.string_value | device_vendorの値は、キーdevice_vendorを持つadditionalフィールドに配置されます。 | 
| device_version | metadata.product_version | device_versionの値はmetadata.product_versionに直接マッピングされます。 | 
| when | metadata.event_timestamp | タイムスタンプは、存在する場合は UNIX 形式を使用して whenフィールドから解析されます。 | 
| who | principal.user.userid | whoフィールドが正規表現パターンと一致する場合、抽出されたuseridはprincipal.user.useridにマッピングされます。それ以外の場合、whoフィールド全体がprincipal.user.useridにマッピングされます。 | 
| who | principal.user.user_display_name | whoフィールドが正規表現パターンと一致する場合、抽出されたuser_display_nameはprincipal.user.user_display_nameにマッピングされます。 | 
| who_ip | principal.ip | who_ipの値はprincipal.ipに直接マッピングされます。 | 
| (パーサー ロジック) | metadata.log_type | ログタイプは BEYONDTRUST_REMOTE_ACCESSに設定されます。 | 
| (パーサー ロジック) | metadata.product_name | プロダクト名が BeyondTrust Secure Remote Accessに設定されます。 | 
| (パーサー ロジック) | metadata.vendor_name | ベンダー名が BeyondTrustに設定されます。 | 
| (パーサー ロジック) | security_result.summary | 値は User %{eventName}形式で取得されます。 | 
| (パーサー ロジック) | extensions.auth.mechanism | methodにusing passwordが含まれている場合、メカニズムはUSERNAME_PASSWORDに設定されます。methodにusing elevateが含まれている場合、メカニズムはREMOTEに設定されます。 | 
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。