ntopng ログを収集する
概要
このパーサーは、SYSLOG 形式または JSON 形式で ntopng ネットワーク モニタリング ログを抽出します。ログ メッセージを解析し、関連するフィールドを UDM 形式に変換し、プロダクト名やベンダー名などのメタデータでイベントを拡充します。このパーサーは、ネストされた JSON 構造も処理し、特定の ntopng フィールドを UDM ネットワーク イベント(フロー アラートやユーザー リソース アクセスなど)にマッピングします。
始める前に
- Google SecOps インスタンスがあることを確認します。
- ntopng に対する特権アクセス権があることを確認します。
ntopng ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: ntopng ログ)。
- [ソースタイプ] として [Webhook] を選択します。
- [Log type] で [Ntopng] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
\n
など)。 - アセットの名前空間: アセットの名前空間。
- 取り込みラベル: このフィードのイベントに適用されるラベル。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[送信] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- シークレット キーをコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL は、クライアント アプリケーションで指定する必要があります。
- [完了] をクリックします。
Webhook フィードの API キーを作成する
Google Cloud コンソール > [認証情報] に移動します。
[認証情報を作成] をクリックして [API キー] を選択します。
API キーのアクセスを Google Security Operations API に制限します。
エンドポイント URL を指定する
- クライアント アプリケーションで、Webhook フィードで指定された HTTPS エンドポイント URL を指定します。
次の形式でカスタム ヘッダーの一部として API キーとシークレット キーを指定して、認証を有効にします。
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
推奨事項: API キーは URL ではなくヘッダーとして指定してください。
Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーとシークレット キーを指定できます。
ENDPOINT_URL?key=API_KEY&secret=SECRET
次のように置き換えます。
ENDPOINT_URL
: フィードのエンドポイント URL。API_KEY
: Google Security Operations の認証に使用する API キー。SECRET
: フィードの認証用に生成したシークレット キー。
Google SecOps 用に ntopng で Webhook を構成する
- ntopng ウェブ インターフェースにログインします。
- プルダウンから [システム] メニューを選択します。
- [通知] > [エンドポイント] に移動します。
- [ 追加 ] をクリックします。
- 次の入力パラメータの値を指定します。
- エンドポイント名: 一意でわかりやすい名前を指定します(例: Google SecOps)。
- エンドポイントの種類: リストから [Webhook] を選択します。
- Webhook URL: Google SecOps の ENDPOINT_URL を入力します。API_KEY と SECRET も入力します。
- [追加] をクリックします。
- [通知] > [受信者] に移動します。
- [ 追加 ] をクリックします。
- 次の入力パラメータの値を指定します。
- 受信者名: 一意でわかりやすい名前を入力します(例: Google SecOps)。
- エンドポイントの選択: 先ほど作成したエンドポイントを選択します。
- 重大度: Google SecOps に送信する重大度を選択します([情報、警告、エラー] など)。
- カテゴリ フィルタ: Google SecOps に送信する内容を選択します。
- [Test Recipient] をクリックして接続を確認します。
- [追加] をクリックして Webhook を保存します。
ntopng Webhook リソース サブスクライバーの構成
- [プール] に移動します。
イベントを共有するリソースを選択します。
[アクション] 列の鉛筆アイコンをクリックします。
[受信者] プルダウンをクリックします。
Google SecOps Webhook の受信者を選択します。
[編集] をクリックして、構成を保存します。
他のリソースでも同じ手順を繰り返します。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
action |
security_result.detection_fields.key=action 、security_result.detection_fields.value=%{action} |
未加工ログの action の値は、キー「action」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.broadcast_domain_host |
security_result.detection_fields.key=host_info broadcast_domain_host 、security_result.detection_fields.value=%{alert_generation.host_info.broadcast_domain_host} |
ネストされた JSON の alert_generation.host_info.broadcast_domain_host の値は、キー「host_info broadcast_domain_host」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.dhcpHost |
security_result.detection_fields.key=host_info dhcpHost 、security_result.detection_fields.value=%{alert_generation.host_info.dhcpHost} |
ネストされた JSON の alert_generation.host_info.dhcpHost の値は、キー「host_info dhcpHost」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.is_blacklisted |
security_result.detection_fields.key=host_info is_blacklisted 、security_result.detection_fields.value=%{alert_generation.host_info.is_blacklisted} |
ネストされた JSON の alert_generation.host_info.is_blacklisted の値は、キー「host_info is_blacklisted」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.is_broadcast |
security_result.detection_fields.key=host_info is_broadcast 、security_result.detection_fields.value=%{alert_generation.host_info.is_broadcast} |
ネストされた JSON の alert_generation.host_info.is_broadcast の値は、キー「host_info is_broadcast」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.is_multicast |
security_result.detection_fields.key=host_info is_multicast 、security_result.detection_fields.value=%{alert_generation.host_info.is_multicast} |
ネストされた JSON の alert_generation.host_info.is_multicast の値は、キー「host_info is_multicast」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.localhost |
security_result.detection_fields.key=host_info localhost 、security_result.detection_fields.value=%{alert_generation.host_info.localhost} |
ネストされた JSON の alert_generation.host_info.localhost の値は、キー「host_info localhost」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.privatehost |
security_result.detection_fields.key=host_info privatehost 、security_result.detection_fields.value=%{alert_generation.host_info.privatehost} |
ネストされた JSON の alert_generation.host_info.privatehost の値は、キー「host_info privatehost」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.host_info.systemhost |
security_result.detection_fields.key=host_info systemhost 、security_result.detection_fields.value=%{alert_generation.host_info.systemhost} |
ネストされた JSON の alert_generation.host_info.systemhost の値は、キー「host_info systemhost」の security_result.detection_fields オブジェクトにマッピングされます。 |
alert_generation.script_key |
security_result.category_details=%{alert_generation.script_key} |
ネストされた JSON の alert_generation.script_key の値は security_result.category_details にマッピングされます。 |
alert_generation.subdir |
security_result.detection_fields.key=alert_generation_subdir 、security_result.detection_fields.value=%{alert_generation.subdir} |
ネストされた JSON の alert_generation.subdir の値は、キー「alert_generation_subdir」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
alert_id |
security_result.detection_fields.key=alert_id 、security_result.detection_fields.value=%{alert_id} |
未加工ログの alert_id の値は、キー「alert_id」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
alerts_map |
security_result.detection_fields.key=alerts_map 、security_result.detection_fields.value=%{alerts_map} |
未加工ログの alerts_map の値は、キー「alerts_map」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
cli2srv_bytes |
network.sent_bytes |
未加工ログの cli2srv_bytes の値は符号なし整数に変換され、network.sent_bytes にマッピングされます。 |
cli_asn |
principal.resource.attribute.labels.key=cli_asn 、principal.resource.attribute.labels.value=%{cli_asn} |
未加工ログの cli_asn の値は文字列に変換され、キー「cli_asn」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
cli_blacklisted |
principal.resource.attribute.labels.key=cli_blacklisted 、principal.resource.attribute.labels.value=%{cli_blacklisted} |
未加工ログの cli_blacklisted の値は文字列に変換され、キー「cli_blacklisted」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
cli_city_name |
principal.location.city |
未加工ログの cli_city_name の値は principal.location.city にマッピングされます。 |
cli_continent_name |
principal.resource.attribute.labels.key=cli_continent_name 、principal.resource.attribute.labels.value=%{cli_continent_name} |
元のログの cli_continent_name の値は、キー「cli_continent_name」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
cli_country_name |
principal.location.country_or_region |
未加工ログの cli_country_name の値は principal.location.country_or_region にマッピングされます。 |
cli_host_pool_id |
principal.resource.attribute.labels.key=cli_host_pool_id 、principal.resource.attribute.labels.value=%{cli_host_pool_id} |
未加工ログの cli_host_pool_id の値は文字列に変換され、キー「cli_host_pool_id」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
cli_ip |
principal.ip 、principal.asset.ip |
未加工ログの cli_ip の値は、principal.ip と principal.asset.ip にマッピングされます。 |
cli_localhost |
principal.resource.attribute.labels.key=cli_localhost 、principal.resource.attribute.labels.value=%{cli_localhost} |
未加工ログの cli_localhost の値は文字列に変換され、キー「cli_localhost」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
cli_location |
principal.location.name |
未加工ログの cli_location の値は文字列に変換されます。「0」以外の場合は、principal.location.name にマッピングされます。 |
cli_name |
principal.hostname 、principal.asset.hostname |
未加工ログの cli_name の値は、principal.hostname と principal.asset.hostname にマッピングされます。 |
cli_network |
principal.resource.attribute.labels.key=cli_network 、principal.resource.attribute.labels.value=%{cli_network} |
未加工ログの cli_network の値は文字列に変換され、キー「cli_network」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
cli_port |
principal.port |
未加工ログの cli_port の値は整数に変換され、principal.port にマッピングされます。 |
entity_id |
principal.resource.attribute.labels.key=entity_id 、principal.resource.attribute.labels.value=%{entity_id} |
元のログの entity_id の値は文字列に変換され、キー「entity_id」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
entity_val |
principal.resource.attribute.labels.key=entity_val 、principal.resource.attribute.labels.value=%{entity_val} |
元のログの entity_val の値は、ip の値と等しい場合を除き、キー「entity_val」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
event.type |
metadata.event_type |
principal 、target 、network フィールドの有無に基づいて、パーサー ロジックによって決定されます。指定できる値: NETWORK_FLOW 、NETWORK_UNCATEGORIZED 、USER_RESOURCE_ACCESS 、GENERIC_EVENT 。 |
first_seen |
principal.asset.first_seen_time |
元のログの first_seen の値は文字列に変換され、エポックからのミリ秒単位で解析され、principal.asset.first_seen_time にマッピングされます。 |
flow_risk_bitmap |
security_result.detection_fields.key=flow_risk_bitmap 、security_result.detection_fields.value=%{flow_risk_bitmap} |
未加工ログの flow_risk_bitmap の値は文字列に変換され、キー「flow_risk_bitmap」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
granularity |
security_result.detection_fields.key=granularity 、security_result.detection_fields.value=%{granularity} |
元のログの granularity の値は文字列に変換され、キー「粒度」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
hash_entry_id |
security_result.detection_fields.key=hash_entry_id 、security_result.detection_fields.value=%{hash_entry_id} |
ネストされた JSON の hash_entry_id の値は、キー「hash_entry_id」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
host_ip |
principal.ip 、principal.asset.ip |
メッセージの <INT>Oct 20 15:34:53 1.1.1.1 部分から抽出された IP アドレスは、principal.ip と principal.asset.ip にマッピングされます。 |
ifid |
principal.asset_id |
未加工ログの ifid の値は文字列に変換され、接頭辞「ifid:」で principal.asset_id にマッピングされます。 |
ip |
principal.ip 、principal.asset.ip 、target.ip 、target.asset.ip |
is_client が true の場合、未加工ログの ip の値は principal.ip と principal.asset.ip にマッピングされます。is_server が true の場合、target.ip と target.asset.ip にマッピングされます。 |
is_cli_attacker |
security_result.detection_fields.key=is_cli_attacker 、security_result.detection_fields.value=%{is_cli_attacker} |
未加工ログの is_cli_attacker の値は文字列に変換され、キー「is_cli_attacker」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
is_cli_victim |
security_result.detection_fields.key=is_cli_victim 、security_result.detection_fields.value=%{is_cli_victim} |
未加工ログの is_cli_victim の値は文字列に変換され、キー「is_cli_victim」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
is_flow_alert |
security_result.detection_fields.key=is_flow_alert 、security_result.detection_fields.value=%{is_flow_alert} 、security_result.detection_fields.key=alert type 、security_result.detection_fields.value=flow |
未加工ログの is_flow_alert の値は文字列に変換され、キー「is_flow_alert」を持つ security_result.detection_fields オブジェクトにマッピングされます。is_flow_alert が true の場合、キーが「alert type」で値が「flow」の security_result.detection_fields オブジェクトも作成されます。 |
is_srv_attacker |
security_result.detection_fields.key=is_srv_attacker 、security_result.detection_fields.value=%{is_srv_attacker} |
未加工ログの is_srv_attacker の値は文字列に変換され、キー「is_srv_attacker」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
is_srv_victim |
security_result.detection_fields.key=is_srv_victim 、security_result.detection_fields.value=%{is_srv_victim} |
未加工ログの is_srv_victim の値は文字列に変換され、キー「is_srv_victim」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
metadata.product_name |
metadata.product_name=NTOPNG |
「NTOPNG」にハードコードされました。 |
metadata.vendor_name |
metadata.vendor_name=%{vendor_name} |
メッセージの vendor_name の値は metadata.vendor_name にマッピングされます。 |
name |
principal.hostname 、principal.asset.hostname 、target.hostname 、target.asset.hostname |
is_client が true の場合、未加工ログの name の値は principal.hostname と principal.asset.hostname にマッピングされます。is_server が true の場合、target.hostname と target.asset.hostname にマッピングされます。 |
ntopng_key |
security_result.detection_fields.key=ntopng_key 、security_result.detection_fields.value=%{ntopng_key} |
ネストされた JSON の ntopng.key の値(ntopng_key に名前が変更されています)は、キー「ntopng_key」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
observation_point_id |
observer.asset_id |
未加工ログの observation_point_id の値は文字列に変換されます。「0」以外の場合は、接頭辞「id:」が付いた observer.asset_id にマッピングされます。 |
pool_id |
principal.resource.attribute.labels.key=pool_id 、principal.resource.attribute.labels.value=%{pool_id} |
未加工ログの pool_id の値は文字列に変換され、キー「pool_id」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
probe_ip |
intermediary.ip |
未加工ログの probe_ip の値は intermediary.ip にマッピングされます。 |
proto.confidence |
security_result.confidence_details |
未加工ログの proto.confidence の値は文字列に変換され、security_result.confidence_details にマッピングされます。 |
proto.http.last_method |
network.http.method |
未加工ログの proto.http.last_method の値は network.http.method にマッピングされます。 |
proto.http.last_return_code |
network.http.response_code |
未加工ログの proto.http.last_return_code の値は整数に変換され、network.http.response_code にマッピングされます。 |
proto.http.last_server_name |
network.tls.client.server_name |
未加工ログの proto.http.server_name の値は network.tls.client.server_name にマッピングされます。 |
proto.http.last_url |
network.http.referral_url |
未加工ログの proto.http.last_url の値は network.http.referral_url にマッピングされます。 |
proto.http.last_user_agent |
network.http.user_agent |
未加工ログの proto.http.last_user_agent の値は network.http.user_agent にマッピングされます。 |
proto.http.server_name |
network.tls.client.server_name |
未加工ログの proto.http.server_name の値は network.tls.client.server_name にマッピングされます。 |
proto.l4 |
network.ip_protocol |
未加工ログの proto.l4 の値は network.ip_protocol にマッピングされます。 |
proto_ndpi |
additional.fields.key=proto ndpi 、additional.fields.value.string_value=%{proto_ndpi} 、network.application_protocol |
元のログの proto.ndpi 値(proto_ndpi に名前が変更されています)は、キー「proto ndpi」を持つ additional.fields オブジェクトにマッピングされます。また、「NTP」や「HTTP」などのキーワードに基づいて network.application_protocol の値を決定するためにも使用されます。 |
proto_ndpi_app |
principal.application |
未加工ログの proto_ndpi_app の値は principal.application にマッピングされます。 |
proto_ndpi_breed |
security_result.detection_fields.key=proto_ndpi_breed 、security_result.detection_fields.value=%{proto_ndpi_breed} |
未加工ログの proto_ndpi_breed の値は文字列に変換され、キー「proto_ndpi_breed」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
proto_ndpi_cat |
security_result.category_details |
未加工ログの proto_ndpi_cat の値は security_result.category_details にマッピングされます。 |
proto_ndpi_cat_id |
security_result.detection_fields.key=proto_ndpi_cat_id 、security_result.detection_fields.value=%{proto_ndpi_cat_id} |
元のログの proto_ndpi_cat_id の値は文字列に変換され、キー「proto_ndpi_cat_id」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
score |
security_result.detection_fields.key=score 、security_result.detection_fields.value=%{score} |
元のログの score の値は文字列に変換され、キー「score」を持つ security_result.detection_fields オブジェクトにマッピングされます。 |
srv2cli_bytes |
network.received_bytes |
未加工ログの srv2cli_bytes の値は符号なし整数に変換され、network.received_bytes にマッピングされます。 |
srv_asn |
target.resource.attribute.labels.key=srv_asn 、target.resource.attribute.labels.value=%{srv_asn} |
元のログの srv_asn の値は文字列に変換され、キー「srv_asn」を持つ target.resource.attribute.labels オブジェクトにマッピングされます。 |
srv_blacklisted |
target.resource.attribute.labels.key=srv_blacklisted 、target.resource.attribute.labels.value=%{srv_blacklisted} |
未加工ログの srv_blacklisted の値は文字列に変換され、キー「srv_blacklisted」を持つ target.resource.attribute.labels オブジェクトにマッピングされます。 |
srv_city_name |
target.location.city |
未加工ログの srv_city_name の値は target.location.city にマッピングされます。 |
srv_continent_name |
target.resource.attribute.labels.key=srv_continent_name 、target.resource.attribute.labels.value=%{srv_continent_name} |
未加工ログの srv_continent_name の値は、キー「srv_continent_name」を持つ target.resource.attribute.labels オブジェクトにマッピングされます。 |
srv_country_name |
target.location.country_or_region |
未加工ログの srv_country_name の値は target.location.country_or_region にマッピングされます。 |
srv_host_pool_id |
target.resource.attribute.labels.key=srv_host_pool_id 、target.resource.attribute.labels.value=%{srv_host_pool_id} |
未加工ログの srv_host_pool_id の値は文字列に変換され、キー「srv_host_pool_id」を持つ target.resource.attribute.labels オブジェクトにマッピングされます。 |
srv_ip |
target.ip 、target.asset.ip |
未加工ログの srv_ip の値は、target.ip と target.asset.ip にマッピングされます。 |
srv_localhost |
target.resource.attribute.labels.key=srv_localhost 、target.resource.attribute.labels.value=%{srv_localhost} |
未加工ログの srv_localhost の値は文字列に変換され、キー「srv_localhost」を持つ target.resource.attribute.labels オブジェクトにマッピングされます。 |
srv_location |
target.location.name |
未加工ログの srv_location の値は文字列に変換されます。「0」以外の場合は、target.location.name にマッピングされます。 |
srv_location_lat |
target.location.region_coordinates.latitude |
未加工ログの srv_location_lat の値は target.location.region_coordinates.latitude にマッピングされます。 |
srv_location_lon |
target.location.region_coordinates.longitude |
未加工ログの srv_location_lon の値は target.location.region_coordinates.longitude にマッピングされます。 |
srv_name |
target.hostname 、target.asset.hostname |
未加工ログの srv_name の値は、target.hostname と target.asset.hostname にマッピングされます。 |
srv_network |
target.resource.attribute.labels.key=srv_network 、target.resource.attribute.labels.value=%{srv_network} |
未加工ログの srv_network の値は文字列に変換され、キー「srv_network」を持つ target.resource.attribute.labels オブジェクトにマッピングされます。 |
srv_port |
target.port |
未加工ログの srv_port の値は整数に変換され、target.port にマッピングされます。 |
tstamp |
additional.fields.key=tstamp 、additional.fields.value.string_value=%{tstamp} |
未加工ログの tstamp の値は文字列に変換され、キー「tstamp」を持つ additional.fields オブジェクトにマッピングされます。 |
vlan_id |
principal.resource.attribute.labels.key=vlan_id 、principal.resource.attribute.labels.value=%{vlan_id} |
未加工ログの vlan_id の値は文字列に変換され、キー「vlan_id」を持つ principal.resource.attribute.labels オブジェクトにマッピングされます。 |
when |
metadata.event_timestamp |
未加工ログの when の値はタイムスタンプとして解析され、metadata.event_timestamp にマッピングされます。 |
変更点
2024-02-01
- バグの修正:
- conf ファイルのヘッダー コメントで「=>" を「:」に変更しました。
2023-11-16
- 新しく作成されたパーサー。