Ivanti Connect Secure(Pulse Secure)のログを収集する
このドキュメントでは、Bindplane を使用して Ivanti Connect Secure(Pulse Secure)ログを Google Security Operations に取り込む方法について説明します。
Ivanti Connect Secure(旧 Pulse Secure)は、エンタープライズ アプリケーション、リソース、ネットワークへの安全なリモート アクセスを提供する SSL VPN ソリューションです。リモート ワーカーとパートナー向けに、多要素認証、エンドポイント コンプライアンス チェック、きめ細かいアクセス ポリシーをサポートしています。注: Pulse Secure は 2020 年に Ivanti に買収されました。パーサーは、Pulse Secure VPN syslog 形式のログからフィールドを抽出します。grok を使用してログ メッセージを解析し、これらの値を統合データモデル(UDM)にマッピングします。また、イベントのソースとタイプのデフォルトのメタデータ値も設定します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Windows Server 2016 以降、または
systemdを使用する Linux ホスト - プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
- Ivanti Connect Secure(Pulse Secure)管理コンソールへの特権アクセス
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sc query observiq-otel-collector
サービスは RUNNING と表示されます。
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sudo systemctl status observiq-otel-collector
サービスが [アクティブ(実行中)] と表示されます。
その他のインストール リソース
その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルを見つける
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
構成ファイルを編集します。
config.yamlの内容全体を次の構成に置き換えます。receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'PULSE_SECURE_VPN' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
構成パラメータ
各プレースホルダを次のように置き換えます。
レシーバーの構成:
udplog: UDP Syslog にはudplog、TCP Syslog にはtcplogを使用します。0.0.0.0: リッスンする IP アドレス(すべてのインターフェースでリッスンする場合は0.0.0.0)514: リッスンするポート番号(標準の syslog ポート)
エクスポータの構成:
creds_file_path: 取り込み認証ファイルのフルパス:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: 「顧客 ID を取得する」セクションの顧客 IDendpoint: リージョン エンドポイント URL:- 米国:
malachiteingestion-pa.googleapis.com - ヨーロッパ:
europe-malachiteingestion-pa.googleapis.com - アジア:
asia-southeast1-malachiteingestion-pa.googleapis.com - 完全なリストについては、リージョン エンドポイントをご覧ください。
- 米国:
log_type: Chronicle に表示されるログタイプ(PULSE_SECURE_VPN)
構成ファイルを保存する
- 編集後、ファイルを保存します。
- Linux:
Ctrl+O、Enter、Ctrl+Xの順に押します。 - Windows: [ファイル>保存] をクリックします。
- Linux:
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart observiq-otel-collectorサービスが実行されていることを確認します。
sudo systemctl status observiq-otel-collectorログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -f
Windows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。
管理者としてコマンド プロンプトまたは PowerShell を開きます。
net stop observiq-otel-collector && net start observiq-otel-collectorサービス コンソール:
Win+Rキーを押し、「services.msc」と入力して Enter キーを押します。- observIQ OpenTelemetry Collector を見つけます。
右クリックして [再起動] を選択します。
サービスが実行されていることを確認します。
sc query observiq-otel-collectorログでエラーを確認します。
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Ivanti Connect Secure(Pulse Secure)で Syslog 転送を構成する
- Ivanti Connect Secure(旧 Pulse Secure)管理コンソールにログインします。
- [System] > [Log/Monitoring] > [Syslog Servers] に移動します。
- [New Server] をクリックして、syslog サーバーを追加します。
- 次の構成の詳細を指定します。
- サーバー名/IP: Bindplane エージェント ホストの IP アドレスを入力します。
- サーバー ポート: 「
514」と入力します。 - ファシリティ: LOCAL0(または任意のファシリティ)を選択します。
- Type: [UDP] を選択します。
- [イベント フィルタ] セクションで、転送するイベントタイプを選択します。
- Standard: 標準の syslog 形式の場合
- ログカテゴリを選択します。
- イベント: [ユーザー アクセスログ]、[管理ログ]、[センサー イベント] を選択します。
- 重大度: 包括的なロギングを行うには、[情報] 以上を選択します。
- [変更を保存] をクリックします。
- Bindplane エージェントのログを確認して、syslog メッセージが送信されていることを確認します。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| アクション | security_result.action_details | アクション フィールドから直接マッピングされます。 |
| アプリケーション | principal.application | アプリケーション フィールドから直接マッピングされます。 |
| bytes_read | network.received_bytes | bytes_read フィールドから直接マッピングされ、符号なし整数に変換されます。 |
| bytes_written | network.sent_bytes | bytes_written フィールドから直接マッピングされ、符号なし整数に変換されます。 |
| client_host | principal.hostname、principal.asset.hostname | client_host フィールドから直接マッピングされます。 |
| cmd | principal.process.command_line | cmd フィールドから直接マッピングされます。 |
| connection_status | security_result.detection_fields.value.string_value | connection_status フィールドから直接マッピングされます。 |
| data_time | metadata.event_timestamp.seconds | さまざまなタイムスタンプ形式(MM-dd-yyyy HH:mm:ss Z、RFC 3339、ISO8601、MMM d HH:mm:ss、MMM d HH:mm:ss)を使用して data_time フィールドから解析されます。 |
| devname | principal.hostname、principal.asset.hostname | devname フィールドから直接マッピングされます。 |
| dstip | target.ip、target.asset.ip | dstip フィールドから直接マッピングされます。 |
| dstport | target.port | dstport フィールドから直接マッピングされ、整数に変換されます。 |
| dstcountry | target.location.country_or_region | 「Reserved」または空でない場合、dstcountry フィールドから直接マッピングされます。 |
| duration | network.session_duration.seconds | 期間フィールドから直接マッピングされ、整数に変換されます。 |
| dvc | intermediary.hostname または intermediary.ip | dvc フィールドを IP アドレスに変換できる場合は、intermediary.ip にマッピングされます。それ以外の場合は、intermediary.hostname にマッピングされます。 |
| dvc_hostname | intermediary.hostname、principal.hostname、principal.asset.hostname、または intermediary.ip、principal.ip、principal.asset.ip | dvc_hostname フィールドを IP アドレスに変換できる場合は、対応する IP フィールドにマッピングされます。それ以外の場合は、それぞれのホスト名フィールドにマッピングされます。 |
| event_type | metadata.product_event_type | event_type フィールドから直接マッピングされます。 |
| failure_reason | security_result.description | failure_reason フィールドから直接マッピングされます。メッセージに「because host」が含まれている場合、失敗の理由の先頭に「host」というテキストが付加されます。 |
| has_principal | event.idm.read_only_udm.principal(存在) | プリンシパル フィールドが入力されている場合は「true」、それ以外の場合は「false」に設定します。パーサー ロジックによって取得されます。 |
| has_target | event.idm.read_only_udm.target(存在) | ターゲット フィールドが入力されている場合は「true」、それ以外の場合は「false」に設定します。パーサー ロジックによって取得されます。 |
| has_target_user | event.idm.read_only_udm.target.user.userid(存在) | target.user.userid が入力されている場合は「true」、それ以外の場合は「false」に設定します。パーサー ロジックによって取得されます。 |
| host_ip | principal.ip、principal.asset.ip | host_ip フィールドから直接マッピングされます。 |
| host_mac | principal.mac | host_mac フィールドから直接マッピングされ、ハイフンがコロンに置き換えられます。 |
| http_method | network.http.method | http_method フィールドから直接マッピングされます。 |
| http_response | network.http.response_code | http_response フィールドから直接マッピングされ、整数に変換されます。 |
| info_desc | about.labels.value | info_desc フィールドから直接マッピングされます。 |
| ip_new | target.ip、target.asset.ip | ip_new フィールドから直接マッピングされます。 |
| レベル | security_result.severity、security_result.severity_details | security_result.severity は level フィールドから派生します(「error」/「warning」-> HIGH、「notice」-> MEDIUM、「information」/「info」-> LOW)。level の生の値も security_result.severity_details にマッピングされます。 |
| logid | metadata.product_log_id | logid フィールドから直接マッピングされます。 |
| locip | principal.ip、principal.asset.ip | locip フィールドから直接マッピングされます。 |
| メッセージ | metadata.description | grok フィルタと kv フィルタを使用してさまざまなフィールドを抽出するために使用されます。メッセージに「EventID」が含まれている場合は、Windows イベントログとして処理されます。 |
| message_info | metadata.description | より具体的な grok パターンで使用されていない場合は、metadata.description に直接マッピングされます。 |
| msg | metadata.product_event_type、metadata.description | msg フィールドが存在する場合、プロダクト タイプが抽出されて metadata.product_event_type にマッピングされ、残りのメッセージは metadata.description にマッピングされます。 |
| msg_hostname | principal.hostname、principal.asset.hostname | msg_hostname フィールドから直接マッピングされます。 |
| msg_ip | principal.ip、principal.asset.ip | msg_ip フィールドから直接マッピングされます。 |
| msg_user_agent | network.http.user_agent、network.http.parsed_user_agent、metadata.product_version | ユーザー エージェント文字列は network.http.user_agent にマッピングされ、解析されたユーザー エージェントは network.http.parsed_user_agent にマッピングされ、プロダクト バージョン(存在する場合)は metadata.product_version にマッピングされます。 |
| network_duration | network.session_duration.seconds | network_duration フィールドから直接マッピングされ、整数に変換されます。 |
| policyid | security_result.rule_id | policyid フィールドから直接マッピングされます。 |
| policyname | security_result.rule_name | policyname フィールドから直接マッピングされます。 |
| policytype | security_result.rule_type | policytype フィールドから直接マッピングされます。 |
| priority_code | about.labels.value | priority_code フィールドから直接マッピングされ、「Severity」キーの about.labels.value を導出するためにも使用されます(ロジックを参照)。 |
| prod_name | metadata.product_name | prod_name フィールドから直接マッピングされます。 |
| product_type | metadata.product_event_type | product_type フィールドから直接マッピングされます。 |
| product_version | metadata.product_version | product_version フィールドから直接マッピングされます。 |
| proto | network.ip_protocol | ルックアップを使用して IP プロトコル名に変換された後、network.ip_protocol にマッピングされます。 |
| pwd | principal.process.file.full_path | pwd フィールドから直接マッピングされます。 |
| レルム | principal.group.attribute.labels.value | realm フィールドから直接マッピングされます。 |
| rcvdbyte | network.received_bytes | rcvdbyte フィールドから直接マッピングされ、符号なし整数に変換されます。 |
| remip | target.ip | remip フィールドから直接マッピングされます。 |
| resource_name | target.resource.name | 先頭と末尾の空白文字とハイフンを削除した後、resource_name フィールドから直接マッピングされます。 |
| resource_status | security_result.description | resource_status フィールドから直接マッピングされます。 |
| resource_user_group | principal.user.group_identifiers | resource_user_group フィールドから直接マッピングされます。 |
| resource_user_name | principal.user.userid | resource_user_name フィールドから直接マッピングされます。 |
| ロール | principal.user.group_identifiers | roles フィールドから直接マッピングされます。 |
| sentbyte | network.sent_bytes | sentbyte フィールドから直接マッピングされ、符号なし整数に変換されます。 |
| session_id | network.session_id | session_id フィールドから直接マッピングされます。 |
| sessionid | network.session_id | sessionid フィールドから直接マッピングされます。 |
| srcip | principal.ip、principal.asset.ip | srcip フィールドから直接マッピングされます。 |
| srcport | principal.port | srcport フィールドから直接マッピングされ、整数に変換されます。 |
| srccountry | principal.location.country_or_region | 「Reserved」または空でない場合、srccountry フィールドから直接マッピングされます。 |
| subtype | metadata.product_event_type | type と組み合わせて metadata.product_event_type を形成します。 |
| target_file | target.file.full_path | target_file フィールドから直接マッピングされます。 |
| target_host | target.hostname、target.asset.hostname | target_host フィールドから直接マッピングされます。 |
| target_ip | target.ip、target.asset.ip | target_ip フィールドから直接マッピングされます。 |
| target_port | target.port | target_port フィールドから直接マッピングされ、整数に変換されます。 |
| target_url | target.url | target_url フィールドから直接マッピングされます。 |
| 時間 | metadata.event_timestamp.seconds | 「yyyy-MM-dd HH:mm:ss」形式を使用して、時間フィールドから解析されます。 |
| type | metadata.product_event_type | サブタイプと組み合わせて metadata.product_event_type を形成します。 |
| u_event_source_ip | principal.ip、principal.asset.ip、target.ip | target_ip または target_host が存在する場合、u_event_source_ip は principal.ip と principal.asset.ip にマッピングされます。それ以外の場合、target_ip、target_host、target_url がすべて空の場合、u_event_source_ip は target.ip にマッピングされます。 |
| u_observer_ip | observer.ip | u_observer_ip フィールドから直接マッピングされます。 |
| u_prin_ip | principal.ip、principal.asset.ip | u_prin_ip フィールドから直接マッピングされます。 |
| ユーザー | target.user.userid | ユーザー フィールドから直接マッピングされます。 |
| user_agent | network.http.user_agent、network.http.parsed_user_agent | ユーザー エージェント文字列は network.http.user_agent にマッピングされ、解析されたユーザー エージェントは network.http.parsed_user_agent にマッピングされます。 |
| user_group_identifier | target.user.group_identifiers または principal.user.group_identifiers | ほとんどの場合、target.user.group_identifiers にマッピングされます。IP 変更(USER_UNCATEGORIZED)イベントと Realm 制限イベントの principal.user.group_identifiers にマッピングされます。 |
| user_ip | principal.ip、principal.asset.ip | user_ip フィールドから直接マッピングされます。空で、u_event_source_ip が空でない場合は、u_event_source_ip の値が使用されます。 |
| ユーザー名 | principal.user.userid または target.user.userid | ほとんどの場合、principal.user.userid にマッピングされます。特定のシナリオ(detect_user_logout_failed が false で、detect_policy_change_failed が false の場合など)では target.user.userid にマッピングされます。 |
| username_removed | target.user.userid | username_removed フィールドから直接マッピングされます。 |
| vd | principal.administrative_domain | vd フィールドから直接マッピングされます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。