Symantec VIP Authentication Hub のログを収集する
このドキュメントでは、Bindplane を使用して Symantec VIP Authentication Hub のログを Google Security Operations に取り込む方法について説明します。パーサーコードは、まず入力ログ メッセージをクリーンアップして前処理し、特定のフィールドを変換して、Key-Value ペアからデータを再構築します。次に、grok パターンと条件ロジックを使用してさまざまなフィールドから関連情報を抽出し、標準化されたセキュリティ イベント表現のために、統合データモデル(UDM)内の対応する属性にマッピングします。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Windows 2016 以降、または systemd を使用する Linux ホスト
- プロキシの背後で実行されている場合、ファイアウォール ポートが開いている
- Symantec VIP Authentication Hub への特権アクセス
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: 'SYMANTEC_VIP_AUTHHUB' 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
Symantec VIP Authentication Hub で Syslog を構成する
- Symantec VIP Gateway ウェブ UI にログインします。
- [Logs] > [Syslog Configuration] に移動します。
- Syslog を初めて構成する場合は、Syslog 設定を構成するように求められます。[はい] をオンにします。
- Syslog をすでに構成している場合は、ページの下部にある [編集] をクリックします。
- 次の構成の詳細を指定します。
- Syslog Facility: [LOG_LOCAL0] を選択します。
- Syslog ホスト: Bindplane エージェントの IP アドレスを入力します。
- Syslog ポート: Bindplane エージェントのポート番号を入力します(例: UDP の場合は
514
)。
- [保存] をクリックします。
- [ID プロバイダ> セルフサービス ポータル構成] に移動します。
- 次の構成の詳細を編集します。
- ロギングレベル: [情報] を選択します。
- Enable Syslog: [Yes] を選択します。
- [送信] をクリックします。
- [Identity providers] > [VIP Manager Authentication Configuration] に移動します。
- 次の構成の詳細を編集します。
- ロギングレベル: [情報] を選択します。
- Enable Syslog: [Yes] を選択します。
- [送信] をクリックします。
- [User Store] > [LDAP Directory Synchronization] に移動します。
- 次の構成の詳細を編集します。
- ログレベル: [情報] を選択します。
- Enable Syslog: [Yes] を選択します。
- [送信] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
/auth/v1/authenticate |
security_result.detection_fields[].value |
この値は、未加工ログの /auth/v1/authenticate フィールドから取得され、キー api を持つ security_result.detection_fields オブジェクトに割り当てられます。 |
__isAuditIdLcmIdStore |
additional.fields[].value.string_value |
この値は、未加工ログの __isAuditIdLcmIdStore フィールドから取得され、キー __isAuditIdLcmIdStore を持つ additional.fields オブジェクトに割り当てられます。 |
accessTokenScopes |
security_result.detection_fields[].value |
この値は、未加工ログの accessTokenScopes フィールドから取得され、キー accessTokenScopes を持つ security_result.detection_fields オブジェクトに割り当てられます。 |
accessTokenTid |
security_result.detection_fields[].value |
この値は、未加工ログの accessTokenTid フィールドから取得され、キー accessTokenTid を持つ security_result.detection_fields オブジェクトに割り当てられます。 |
api |
security_result.detection_fields[].value |
この値は、未加工ログの api フィールドから取得され、キー api を持つ security_result.detection_fields オブジェクトに割り当てられます。 |
appId |
additional.fields[].value.string_value |
この値は、未加工ログの appId フィールドから取得され、キー appId を持つ additional.fields オブジェクトに割り当てられます。 |
appName |
principal.application |
この値は、未加工ログの appName フィールドから取得されます。 |
azpName |
additional.fields[].value.string_value |
この値は、未加工ログの azpName フィールドから取得され、キー azpName を持つ additional.fields オブジェクトに割り当てられます。 |
bytes_sent |
network.sent_bytes |
この値は、未加工ログの bytes_sent フィールドから取得されます。 |
client |
principal.asset.ip 、principal.ip |
IP アドレスは、grok パターンを使用して未加工ログの client フィールドから抽出され、principal.ip フィールドと principal.asset.ip フィールドに追加されます。 |
clientId |
additional.fields[].value.string_value 、principal.user.userid |
この値は、未加工ログの clientId フィールドから取得され、キー clientId を持つ additional.fields オブジェクトに割り当てられます。clientId フィールドが空でない場合は、principal.user.userid フィールドの入力にも使用されます。 |
clientIp |
principal.asset.ip 、principal.ip |
この値は、未加工ログの clientIp フィールドから取得され、principal.ip フィールドと principal.asset.ip フィールドに追加されます。 |
clientTid |
additional.fields[].value.string_value |
この値は、未加工ログの clientTid フィールドから取得され、キー clientTid を持つ additional.fields オブジェクトに割り当てられます。 |
clientTxnId |
additional.fields[].value.string_value |
この値は、未加工ログの clientTxnId フィールドから取得され、キー clientTxnId を持つ additional.fields オブジェクトに割り当てられます。 |
contentType |
additional.fields[].value.string_value |
この値は、未加工ログの contentType フィールドから取得され、キー contentType を持つ additional.fields オブジェクトに割り当てられます。 |
countryISO |
principal.location.country_or_region |
この値は、未加工ログの countryISO フィールドから取得されます。 |
eventId |
metadata.product_event_type |
この値は、未加工ログの eventId フィールドから取得されます。 |
flowStateId |
additional.fields[].value.string_value |
この値は、未加工ログの flowStateId フィールドから取得され、キー flowStateId を持つ additional.fields オブジェクトに割り当てられます。 |
geo.city_name |
principal.location.city |
この値は、未加工ログの geo.city_name フィールドから取得されます。 |
geo.country_name |
principal.location.country_or_region |
この値は、未加工ログの geo.country_name フィールドから取得されます。 |
geo.location.lat |
principal.location.region_coordinates.latitude |
値は未加工ログの geo.location.lat フィールドから取得され、浮動小数点数に変換されて principal.location.region_coordinates.latitude に名前変更されます。 |
geo.location.lon |
principal.location.region_coordinates.longitude |
値は未加工ログの geo.location.lon フィールドから取得され、浮動小数点数に変換されて principal.location.region_coordinates.longitude に名前変更されます。 |
guid |
metadata.product_log_id |
この値は、未加工ログの guid フィールドから取得されます。 |
host |
principal.asset.hostname 、principal.hostname |
この値は、未加工ログの host フィールドから取得され、引用符が削除されて、principal.hostname フィールドと principal.asset.hostname フィールドに追加されます。 |
httpMethod |
network.http.method |
この値は、未加工ログの httpMethod フィールドから取得されます。 |
httpReferrer |
network.http.referral_url |
この値は、未加工ログの httpReferrer フィールドから取得されます。 |
identitySourceId |
additional.fields[].value.string_value |
この値は、未加工ログの identitySourceId フィールドから取得され、キー identitySourceId を持つ additional.fields オブジェクトに割り当てられます。 |
internal-user-sync-ext-resourceGuid |
target.user.userid |
この値は、未加工ログの internal-user-sync-ext-resourceGuid フィールドから取得されます。 |
internal-user-sync-ext-resourceName |
target.user.email_addresses |
この値は、未加工ログの internal-user-sync-ext-resourceName フィールドから取得され、target.user.email_addresses フィールドに追加されます。 |
issuerUrl |
target.url |
この値は、未加工ログの issuerUrl フィールドから取得されます。 |
kubernetes.annotations.cni.projectcalico.org_containerID |
target.resource.product_object_id |
この値は、未加工ログの kubernetes.annotations.cni.projectcalico.org_containerID フィールドから取得されます。 |
kubernetes.annotations.cni.projectcalico.org_podIP |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.annotations.cni.projectcalico.org_podIP フィールドから取得され、キー podIP を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.annotations.cni.projectcalico.org_podIPs |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.annotations.cni.projectcalico.org_podIPs フィールドから取得され、キー podIPs を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.container_hash |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.container_hash フィールドから取得され、キー container_hash を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.container_image |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.container_image フィールドから取得され、キー container_image を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.container_name |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.container_name フィールドから取得され、キー container_name を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.docker_id |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.docker_id フィールドから取得され、キー docker_id を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.host |
principal.asset.hostname 、principal.hostname |
この値は、未加工ログの kubernetes.host フィールドから取得され、principal.hostname フィールドと principal.asset.hostname フィールドに追加されます。 |
kubernetes.labels.app |
このフィールドは、UDM の IDM オブジェクトにマッピングされません。 | |
kubernetes.labels.app.kubernetes.io/component |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.app.kubernetes.io/component フィールドから取得され、キー io_component を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.app.kubernetes.io/instance |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.app.kubernetes.io/instance フィールドから取得され、キー io_instance を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.app.kubernetes.io/managed-by |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.app.kubernetes.io/managed-by フィールドから取得され、キー io_managed-by を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.app.kubernetes.io/name |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.app.kubernetes.io/name フィールドから取得され、キー io_name を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.app.kubernetes.io/part-of |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.app.kubernetes.io/part-of フィールドから取得され、キー io_part-of を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.app.kubernetes.io/version |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.app.kubernetes.io/version フィールドから取得され、キー io_version を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.helm.sh/chart |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.helm.sh/chart フィールドから取得され、キー helm_sh_chart を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.helmChartName |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.helmChartName フィールドから取得され、キー helmChartName を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.imageTag |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.imageTag フィールドから取得され、キー imageTag を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.labels.pod-template-hash |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.labels.pod-template-hash フィールドから取得され、キー pod-template-hash を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.namespace_name |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.namespace_name フィールドから取得され、キー namespace_name を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.pod_id |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.pod_id フィールドから取得され、キー pod_id を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
kubernetes.pod_name |
target.resource.attribute.labels[].value |
この値は、未加工ログの kubernetes.pod_name フィールドから取得され、キー pod_name を持つ target.resource.attribute.labels オブジェクトに割り当てられます。 |
level |
security_result.severity |
未加工ログの level フィールドが notice または info (大文字と小文字は区別されません)と一致する場合、security_result.severity フィールドは INFORMATIONAL に設定されます。 |
log |
security_result.description 、level 、kv_data |
level フィールドと kv_data フィールドは、grok パターンを使用して未加工ログの log フィールドから抽出されます。security_result.description フィールドには、log フィールド全体が入力されます。 |
logtag |
additional.fields[].value.string_value |
この値は、未加工ログの logtag フィールドから取得され、キー logtag を持つ additional.fields オブジェクトに割り当てられます。 |
method |
network.http.method |
この値は、未加工ログの method フィールドから取得されます。 |
msg |
metadata.event_type 、security_result.description |
この値は、未加工ログの msg フィールドから取得され、security_result.description フィールドの入力に使用されます。metadata.event_type フィールドは、msg フィールドの内容に基づいて決定されます。* msg に Internal user created or updated が含まれている場合は USER_CREATION 。* msg に Authorization Initiated Succesfully 、Authentication Initiated Successfully 、Authentication Successful が含まれている場合は USER_LOGIN 。* msg に Token Generated または token verified が含まれている場合は USER_RESOURCE_ACCESS 。* has_principal と has_target の両方が true の場合、NETWORK_CONNECTION 。* has_principal が true の場合は STATUS_UPDATE 。* それ以外の場合は GENERIC_EVENT 。 |
path |
principal.file.full_path |
この値は、未加工ログの path フィールドから取得されます。 |
principalId |
additional.fields[].value.string_value 、principal.user.userid |
この値は、未加工ログの principalId フィールドから取得され、キー principalId を持つ additional.fields オブジェクトに割り当てられます。principalId フィールドが clientId でなく、空でもない場合、principal.user.userid フィールドの入力にも使用されます。 |
principalType |
additional.fields[].value.string_value |
この値は、未加工ログの principalType フィールドから取得され、キー principalType を持つ additional.fields オブジェクトに割り当てられます。 |
protocol |
network.application_protocol |
未加工ログの protocol フィールドが HTTP と一致する場合(大文字と小文字を区別しない)、network.application_protocol フィールドは HTTP に設定されます。 |
referrer |
network.http.referral_url |
この値は、未加工ログの referrer フィールドから取得され、引用符が削除されて network.http.referral_url フィールドに割り当てられます。 |
relVersion |
metadata.product_version |
この値は、未加工ログの relVersion フィールドから取得されます。 |
remoteAddr |
additional.fields[].value.string_value |
この値は、未加工ログの remoteAddr フィールドから取得され、キー remoteAddr を持つ additional.fields オブジェクトに割り当てられます。 |
requestId |
additional.fields[].value.string_value |
この値は、未加工ログの requestId フィールドから取得され、キー requestId を持つ additional.fields オブジェクトに割り当てられます。 |
requestTime |
additional.fields[].value.string_value |
この値は、未加工ログの requestTime フィールドから取得され、キー requestTime を持つ additional.fields オブジェクトに割り当てられます。 |
responseCode |
network.http.response_code |
数値は、grok パターンを使用して未加工ログの responseCode フィールドから抽出され、整数に変換されて network.http.response_code フィールドに割り当てられます。 |
request |
method 、path 、protocol |
method 、path 、protocol の各フィールドは、引用符を削除した後、grok パターンを使用して未加工ログの request フィールドから抽出されます。 |
server |
target.asset.hostname 、target.hostname |
この値は、未加工ログの server フィールドから取得され、target.hostname フィールドと target.asset.hostname フィールドに追加されます。 |
service |
additional.fields[].value.string_value |
この値は、未加工ログの service フィールドから取得され、キー service を持つ additional.fields オブジェクトに割り当てられます。 |
status |
network.http.response_code |
値は、未加工ログの status フィールドから取得され、整数に変換されて network.http.response_code フィールドに割り当てられます。 |
stream |
additional.fields[].value.string_value |
この値は、未加工ログの stream フィールドから取得され、キー stream を持つ additional.fields オブジェクトに割り当てられます。 |
sub |
additional.fields[].value.string_value |
この値は、未加工ログの sub フィールドから取得され、キー sub を持つ additional.fields オブジェクトに割り当てられます。 |
subType |
additional.fields[].value.string_value |
この値は、未加工ログの subType フィールドから取得され、キー subType を持つ additional.fields オブジェクトに割り当てられます。 |
tid |
additional.fields[].value.string_value |
この値は、未加工ログの tid フィールドから取得され、キー tid を持つ additional.fields オブジェクトに割り当てられます。 |
timestamp |
metadata.event_timestamp |
値は、未加工ログの timestamp フィールドから取得され、ISO8601 タイムスタンプとして解析されます。 |
tname |
additional.fields[].value.string_value |
この値は、未加工ログの tname フィールドから取得され、キー tname を持つ additional.fields オブジェクトに割り当てられます。 |
txnId |
additional.fields[].value.string_value |
この値は、未加工ログの txnId フィールドから取得され、キー txnId を持つ additional.fields オブジェクトに割り当てられます。 |
type |
additional.fields[].value.string_value |
この値は、未加工ログの type フィールドから取得され、キー type を持つ additional.fields オブジェクトに割り当てられます。 |
userAgent |
network.http.parsed_user_agent 、network.http.user_agent |
この値は、未加工ログの userAgent フィールドから取得され、network.http.user_agent フィールドと network.http.parsed_user_agent フィールドに割り当てられます。network.http.parsed_user_agent フィールドは、解析されたユーザー エージェント オブジェクトに変換されます。 |
userDN |
additional.fields[].value.string_value |
この値は、未加工ログの userDN フィールドから取得され、キー userDN を持つ additional.fields オブジェクトに割り当てられます。 |
userGuid |
additional.fields[].value.string_value |
この値は、未加工ログの userGuid フィールドから取得され、キー userGuid を持つ additional.fields オブジェクトに割り当てられます。 |
userIdpGuid |
additional.fields[].value.string_value |
この値は、未加工ログの userIdpGuid フィールドから取得され、キー userIdpGuid を持つ additional.fields オブジェクトに割り当てられます。 |
userIP |
principal.asset.ip 、principal.ip 、target.asset.ip 、target.ip 、intermediary.ip |
IP アドレスは、grok パターンを使用して未加工ログの userIP フィールドから抽出されます。最初のアドレスが principal.ip フィールドと principal.asset.ip フィールドに追加されます。2 番目の IP アドレスが target.ip フィールドと target.asset.ip フィールドに追加されます。3 番目の IP アドレスが intermediary.ip フィールドに追加されます。 |
userLoginId |
target.user.email_addresses |
未加工ログの userLoginId フィールドが空ではなく、メールアドレスのパターンと一致する場合は、target.user.email_addresses フィールドに追加されます。 |
userLoginIdAttributeMappingName |
target.user.user_display_name |
この値は、未加工ログの userLoginIdAttributeMappingName フィールドから取得されます。 |
userRiskLevel |
additional.fields[].value.string_value |
この値は、未加工ログの userRiskLevel フィールドから取得され、キー userRiskLevel を持つ additional.fields オブジェクトに割り当てられます。 |
userRiskScore |
additional.fields[].value.string_value |
この値は、未加工ログの userRiskScore フィールドから取得され、キー userRiskScore を持つ additional.fields オブジェクトに割り当てられます。 |
userIp |
principal.asset.ip 、principal.ip |
この値は、未加工ログの userIp フィールドから取得され、principal.ip フィールドと principal.asset.ip フィールドに追加されます。 |
userUniversalId |
additional.fields[].value.string_value |
この値は、未加工ログの userUniversalId フィールドから取得され、キー userUniversalId を持つ additional.fields オブジェクトに割り当てられます。 |
vhost |
additional.fields[].value.string_value |
この値は、未加工ログの vhost フィールドから取得され、キー vhost を持つ additional.fields オブジェクトに割り当てられます。 |
なし | extensions.auth.type |
metadata.event_type フィールドが USER_LOGIN の場合、値は SSO に設定されます。 |
なし | metadata.log_type |
値は SYMANTEC_VIP_AUTHHUB に設定されています。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。