Elastic Packet Beats ログを収集する
このドキュメントでは、Bindplane を使用して Elastic Packet Beats ログを Google Security Operations に取り込む方法について説明します。パーサーは、まず Elastic Packet Beats ログで見つかったさまざまなフィールドのデフォルト値を初期化します。次に、grok
パターンと json
フィルタの組み合わせを使用してログメッセージからデータを抽出し、データ型の変換を実行し、イベント データセット タイプ(flow、dns、http、tls、dhcpv4 など)に基づいて、抽出されたフィールドを統合データモデル(UDM)の対応するフィールドにマッピングします。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス。
- Windows 2016 以降、または
systemd
を使用する Linux ホスト。 - プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
- Elastic Packet Beats の管理コンソールまたはアプライアンスへの特権アクセス。
- Logstash がインストールされ、構成されている。
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
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_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'ELASTIC_PACKETBEATS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。
YOUR_CUSTOMER_ID
は、実際の顧客 ID に置き換えます。/path/to/ingestion-authentication-file.json
の値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart observiq-otel-collector
Windows で Bindplane エージェントを再起動するには、サービス コンソールを使用するか、次のコマンドを入力します。
net stop observiq-otel-collector && net start observiq-otel-collector
Elastic Packet Beats で Syslog 転送を構成する
Packetbeat は syslog 出力を直接サポートしていないため、Logstash を仲介として使用する必要があります。
ログを Logstash に送信するように Packetbeat を構成する
- Elastic Packet Beats 管理コンソールにログインします。
- [Settings>Log Forwarding] に移動します。
- [+ 追加] または [有効にする] ボタンをクリックします。
- 次の構成の詳細を入力します。
- 名前: わかりやすい名前を入力します(例:
Logstash Output
)。 - ホスト: Logstash サーバーの IP アドレスを入力します。
- ポート: Logstash Beats の入力ポート(通常は 5044)を入力します。
- プロトコル: [Beats プロトコル] を選択します。
- 形式: [JSON] を選択します。
- タイムゾーン: システム全体で一貫性を保つため、UTC タイムゾーンを選択します。
- [イベント] セクションに移動し、関連するログタイプまたは [すべて] を選択します。
- 名前: わかりやすい名前を入力します(例:
構成を保存します。
別の方法: packetbeat.yml を直接編集する:
# /etc/packetbeat/packetbeat.yml packetbeat.protocols: - type: dns ports: [53] - type: http ports: [80, 8080, 8000, 5000, 8002] send_headers: true send_all_headers: true - type: tls ports: [443, 993, 995, 5223, 8443, 8883, 9243] - type: dhcpv4 ports: [67, 68] # Enable processors for additional fields processors: - add_network_direction: source: private destination: private internal_networks: - private - community_id: # Send to Logstash using beats protocol output.logstash: hosts: ["LOGSTASH_IP:5044"]
LOGSTASH_IP
は、Logstash サーバーの IP アドレスに置き換えます。
Syslog を使用して BindPlane に転送するように Logstash を構成する
Logstash パイプライン構成ファイルを作成します。
sudo nano /etc/logstash/conf.d/packetbeat-to-bindplane.conf
次の構成を追加します。
# Receive from Packetbeat input { beats { port => 5044 } } # Optional: Add filters for data enrichment filter { # Preserve original message structure mutate { copy => { "@metadata" => "[@metadata_backup]" } } } # Send to BindPlane via syslog output { syslog { host => "BINDPLANE_IP" port => 514 protocol => "udp" rfc => "rfc5424" facility => "local0" severity => "informational" sourcehost => "%{[agent][hostname]}" appname => "packetbeat" procid => "%{[agent][id]}" msgid => "ELASTIC_PACKETBEATS" structured_data => "packetbeat@32473" message => "%{message}" } }
BINDPLANE_IP
は、BindPlane エージェントの IP アドレスに置き換えます。
Logstash を再起動して構成を適用します。
sudo systemctl restart logstash
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
@timestamp | metadata.event_timestamp | 未加工ログのフィールド @timestamp から直接マッピングされます。 |
agent.hostname | observer.hostname | 未加工ログのフィールド agent.hostname から直接マッピングされます。 |
agent.id | observer.asset_id | agent.type と連結して observer.asset_id フィールドを形成します。 |
agent.type | observer.application | 未加工ログのフィールド agent.type から直接マッピングされます。 |
agent.version | observer.platform_version | 未加工ログのフィールド agent.version から直接マッピングされます。 |
audit_category | security_result.category_details | 未加工ログのフィールド audit_category から直接マッピングされます。 |
audit_cluster_name | additional.fields.audit_cluster_name.value.string_value | 未加工ログのフィールド audit_cluster_name から直接マッピングされます。 |
audit_node_host_address | observer.ip | 未加工ログのフィールド audit_node_host_address から直接マッピングされます。 |
audit_node_id | additional.fields.audit_node_id.value.string_value | 未加工ログのフィールド audit_node_id から直接マッピングされます。 |
audit_node_name | additional.fields.audit_node_name.value.string_value | 未加工ログのフィールド audit_node_name から直接マッピングされます。 |
audit_request_effective_user | observer.user.userid | 未加工ログのフィールド audit_request_effective_user から直接マッピングされます。 |
audit_request_initiating_user | additional.fields.audit_request_initiating_user.value.string_value | 未加工ログのフィールド audit_request_initiating_user から直接マッピングされます。 |
audit_request_remote_address | observer.ip | audit_node_host_address と異なる場合、未加工ログのフィールド audit_request_remote_address から直接マッピングされます。 |
client.bytes | network.received_bytes(インバウンド)/ network.sent_bytes(アウトバウンド) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は network.received_bytes にマッピングされます。OUTBOUND の場合、network.sent_bytes にマッピングされます。 |
client.ip | target.ip(INBOUND)/ principal.ip(OUTBOUND) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は target.ip にマッピングされます。OUTBOUND の場合、principal.ip にマッピングされます。 |
client.port | target.port(INBOUND)/ principal.port(OUTBOUND) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は target.port にマッピングされます。OUTBOUND の場合、principal.port にマッピングされます。 |
cluster.uuid | additional.fields.uuid.value.string_value | 未加工ログのフィールド cluster.uuid から直接マッピングされます。 |
コンポーネント | additional.fields.component.value.string_value | 未加工ログのフィールド component から直接マッピングされます。 |
destination.bytes | network.sent_bytes | FLOW イベントの場合、未加工ログの destination.bytes フィールドから直接マッピングされます。 |
destination.ip | target.ip | network.direction が INBOUND または OUTBOUND でない場合、未加工ログのフィールド destination.ip から直接マッピングされます。 |
destination.mac | target.mac | FLOW イベントの場合、未加工ログの destination.mac フィールドから直接マッピングされます。 |
destination.port | target.port | FLOW イベントの場合、未加工ログの destination.port フィールドから直接マッピングされます。 |
dhcpv4.assigned_ip | network.dhcp.requested_address | 未加工ログのフィールド dhcpv4.assigned_ip から直接マッピングされます。 |
dhcpv4.client_ip | network.dhcp.yiaddr(ACK)/ network.dhcp.ciaddr(REQUEST)/ source.ip(dhcpv4.client_ip が空の場合の REQUEST) | network.dhcp.type フィールドに基づいてマッピングされます。ACK の場合は network.dhcp.yiaddr にマッピングされます。REQUEST の場合は network.dhcp.ciaddr にマッピングされます。REQUEST で dhcpv4.client_ip が空の場合、source.ip にマッピングされます。 |
dhcpv4.client_mac | network.dhcp.client_identifier | 未加工ログの dhcpv4.client_mac フィールドから直接マッピングされ、バイトに変換されます。 |
dhcpv4.op_code | network.dhcp.opcode | dhcpv4.op_code の値に基づいて network.dhcp.opcode にマッピングされます。dhcpv4.op_code が BOOTREPLY または BOOTREQUEST の場合、値は直接マッピングされます。それ以外の場合は、UNKNOWN_OPCODE にマッピングされます。 |
dhcpv4.option.hostname | network.dhcp.client_hostname | 未加工ログのフィールド dhcpv4.option.hostname から直接マッピングされます。 |
dhcpv4.option.ip_address_lease_time_sec | network.dhcp.lease_time_seconds | 未加工ログのフィールド dhcpv4.option.ip_address_lease_time_sec から直接マッピングされ、符号なし整数に変換されます。 |
dhcpv4.option.message_type | network.dhcp.type | dhcpv4.option.message_type の値に基づいて network.dhcp.type にマッピングされます。マッピングは ack -> ACK 、nack -> NAK 、discover -> DISCOVER 、offer -> OFFER 、request -> REQUEST 、decline -> DECLINE 、release -> RELEASE 、info -> INFORM となります。これらの値のいずれでもない場合は、UNKNOWN_MESSAGE_TYPE にマッピングされます。 |
dhcpv4.option.server_identifier | network.dhcp.sname | 未加工ログのフィールド dhcpv4.option.server_identifier から直接マッピングされます。 |
dns.answers.data | network.dns.answers.data | 未加工ログのフィールド dns.answers.data から直接マッピングされます。 |
dns.answers.class | network.dns.answers.class | dns.answers.class の値に基づいて network.dns.answers.class にマッピングされます。マッピングは IN -> 1、NONE -> 254、ANY -> 255 です。 |
dns.answers.name | network.dns.answers.name | 未加工ログのフィールド dns.answers.name から直接マッピングされます。 |
dns.answers.ttl | network.dns.answers.ttl | 未加工ログのフィールド dns.answers.ttl から直接マッピングされ、符号なし整数に変換されます。 |
dns.answers.type | network.dns.answers.type | dns.answers.type の値に基づいて network.dns.answers.type にマッピングされます。マッピングは次のとおりです。A -> 1、NS -> 2、CNAME -> 5、SOA -> 6、PTR -> 12、MX -> 15、TXT -> 16、AAAA -> 28、SRV -> 33、NAPTR -> 35、DS -> 43、DNSKEY -> 48、IXFR -> 251、AXFR -> 252、TYPE99 -> 99、TKEY -> 249、ANY -> 255、ALL -> 255、URI -> 256、NULL -> 0。 |
dns.flags.authoritative | network.dns.authoritative | true の場合、未加工ログのフィールド dns.flags.authoritative から直接マッピングされます。 |
dns.flags.recursion_available | network.dns.recursion_available | true の場合、未加工ログのフィールド dns.flags.recursion_available から直接マッピングされます。 |
dns.flags.recursion_desired | network.dns.recursion_desired | true の場合、未加工ログのフィールド dns.flags.recursion_desired から直接マッピングされます。 |
dns.flags.truncated_response | network.dns.truncated | true の場合、未加工ログのフィールド dns.flags.truncated_response から直接マッピングされます。 |
dns.id | network.dns.id | 未加工ログのフィールド dns.id から直接マッピングされ、符号なし整数に変換されます。 |
dns.question.class | network.dns.questions.class | dns.question.class の値に基づいて network.dns.questions.class にマッピングされます。マッピングは IN -> 1、NONE -> 254、ANY -> 255 です。 |
dns.question.name | network.dns.questions.name | 未加工ログのフィールド dns.question.name から直接マッピングされます。 |
dns.question.type | network.dns.questions.type | dns.question.type の値に基づいて network.dns.questions.type にマッピングされます。マッピングは次のとおりです。A -> 1、NS -> 2、CNAME -> 5、SOA -> 6、PTR -> 12、MX -> 15、TXT -> 16、AAAA -> 28、SRV -> 33、NAPTR -> 35、DS -> 43、DNSKEY -> 48、IXFR -> 251、AXFR -> 252、TYPE99 -> 99、TKEY -> 249、ANY -> 255、ALL -> 255、URI -> 256、NULL -> 0。 |
dns.resolved_ip | network.dns.additional.data | dns.resolved_ip 配列の各要素が処理され、network.dns.additional.data フィールドにマッピングされます。 |
dns.response_code | network.dns.response_code | dns.response_code の値に基づいて network.dns.response_code にマッピングされます。マッピングは NOERROR -> 0、FORMERR -> 1、SERVFAIL -> 2、NXDOMAIN -> 3、NOTIMP -> 4、REFUSED -> 5、YXDOMAIN -> 6、YXRRSET -> 7、NXRRSET -> 8、NOTAUTH -> 9、NOTZONE -> 10 です。 |
error.message | security_result.summary | status と連結して、HTTP イベントの security_result.summary フィールドを形成します。 |
event.dataset | metadata.product_event_type | 未加工ログのフィールド event.dataset から直接マッピングされます。 |
flow.final | フローが最終かどうかを判断するために使用されます。そうでない場合、イベントはドロップされます。 | |
flow.id | network.session_id | FLOW イベントの場合、未加工ログの flow.id フィールドから直接マッピングされます。 |
headers.accept_encoding | security_result.about.labels.Accept-Encoding | 未加工ログのフィールド headers.accept_encoding から直接マッピングされます。 |
headers.content_length | additional.fields.content_length.value.string_value | 未加工ログのフィールド headers.content_length から直接マッピングされます。 |
headers.content_type | additional.fields.content_type.value.string_value | 未加工ログのフィールド headers.content_type から直接マッピングされます。 |
headers.http_accept | additional.fields.http_accept.value.string_value | 未加工ログのフィールド headers.http_accept から直接マッピングされます。 |
headers.http_host | principal.hostname、principal.asset.hostname | 未加工ログのフィールド headers.http_host から直接マッピングされます。 |
headers.http_user_agent | network.http.user_agent | 未加工ログのフィールド headers.http_user_agent から直接マッピングされます。 |
headers.request_method | network.http.method | 未加工ログのフィールド headers.request_method から直接マッピングされます。 |
headers.x_b3_parentspanid | additional.fields.x_b3_parentspanid.value.string_value | 未加工ログのフィールド headers.x_b3_parentspanid から直接マッピングされます。 |
headers.x_b3_sampled | additional.fields.x_b3_sampled.value.string_value | 未加工ログのフィールド headers.x_b3_sampled から直接マッピングされます。 |
headers.x_envoy_attempt_count | security_result.about.labels.x_envoy_attempt_count | 未加工ログのフィールド headers.x_envoy_attempt_count から直接マッピングされます。 |
headers.x_envoy_original_path | additional.fields.x_envoy_original_path.value.string_value | 未加工ログのフィールド headers.x_envoy_original_path から直接マッピングされます。 |
headers.x_forwarded_client_cert | additional.fields.client_cert.value.string_value | 未加工ログのフィールド headers.x_forwarded_client_cert から直接マッピングされます。 |
headers.x_forwarded_for | principal.ip、principal.asset.ip | Grok を使用して IP アドレスを抽出した後、未加工ログのフィールド headers.x_forwarded_for から直接マッピングされます。 |
headers.x_forwarded_proto | additional.fields.x_forwarded_proto.value.string_value | 未加工ログのフィールド headers.x_forwarded_proto から直接マッピングされます。 |
headers.x_request_id | additional.fields.x_request_id.value.string_value | 未加工ログのフィールド headers.x_request_id から直接マッピングされます。 |
ホスト | principal.ip、principal.asset.ip | Grok を使用して IP アドレスを抽出した後、未加工ログのフィールド host から直接マッピングされます。 |
http.request.method | network.http.method | 未加工ログのフィールド http.request.method から直接マッピングされます。 |
level | security_result.severity | level の値に基づいて security_result.severity にマッピングされます。マッピングは INFO -> INFORMATIONAL 、ERROR -> ERROR 、WARNING -> LOW です。 |
logger | additional.fields.logger.value.string_value | 未加工ログのフィールド logger から直接マッピングされます。 |
method | イベントが DNS イベントかどうかを判断するために使用されます。 | |
msg | security_result.description | 二重引用符を削除した後、未加工ログのフィールド msg から直接マッピングされます。 |
network.community_id | network.community_id | 未加工ログのフィールド network.community_id から直接マッピングされます。 |
network.direction | network.direction | 未加工ログの network.direction フィールドから直接マッピングされ、大文字に変換されます。値が INGRESS または INBOUND の場合、INBOUND にマッピングされます。値が EGRESS または OUTBOUND の場合、OUTBOUND にマッピングされます。 |
network.protocol | network.application_protocol | 未加工ログのフィールド network.protocol から直接マッピングされます。 |
network.transport | network.ip_protocol | TLS イベントの場合、未加工ログの network.transport フィールドから直接マッピングされます。 |
server.bytes | network.sent_bytes(インバウンド)/ network.received_bytes(アウトバウンド) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は network.sent_bytes にマッピングされます。OUTBOUND の場合、network.received_bytes にマッピングされます。 |
server.domain | principal.hostname、principal.asset.hostname(インバウンド)/ target.hostname、target.asset.hostname(アウトバウンド) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は principal.hostname にマッピングされます。OUTBOUND の場合、target.hostname にマッピングされます。 |
server.ip | principal.ip、principal.asset.ip(INBOUND)/ target.ip、target.asset.ip(OUTBOUND) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は principal.ip にマッピングされます。OUTBOUND の場合、target.ip にマッピングされます。 |
server.port | principal.port(インバウンド)/ target.port(アウトバウンド) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は principal.port にマッピングされます。OUTBOUND の場合、target.port にマッピングされます。 |
source.bytes | network.received_bytes | FLOW イベントの場合、未加工ログの source.bytes フィールドから直接マッピングされます。 |
source.ip | principal.ip、principal.asset.ip | FLOW イベントの場合、未加工ログの source.ip フィールドから直接マッピングされます。 |
source.mac | principal.mac | FLOW イベントの場合、未加工ログの source.mac フィールドから直接マッピングされます。 |
source.port | principal.port | FLOW イベントの場合、未加工ログの source.port フィールドから直接マッピングされます。 |
ステータス | metadata.description、security_result.summary | level が空の場合、metadata.description にマッピングされます。error.message と連結して、HTTP イベントと TLS イベントの security_result.summary フィールドを形成します。 |
tls.client.ja3 | network.tls.client.ja3 | 未加工ログのフィールド tls.client.ja3 から直接マッピングされます。 |
tls.client.server_name | network.tls.client.server_name | 未加工ログのフィールド tls.client.server_name から直接マッピングされます。 |
tls.client.supported_ciphers | network.tls.client.supported_ciphers | tls.client.supported_ciphers 配列の各要素が処理され、network.tls.client.supported_ciphers 配列にマッピングされます。 |
tls.cipher | network.tls.cipher | 未加工ログのフィールド tls.cipher から直接マッピングされます。 |
tls.detailed.server_certificate.not_after | network.tls.server.certificate.not_after | 未加工ログの tls.detailed.server_certificate.not_after フィールドから直接マッピングされ、タイムスタンプに変換されます。 |
tls.detailed.server_certificate.not_before | network.tls.server.certificate.not_before | 未加工ログの tls.detailed.server_certificate.not_before フィールドから直接マッピングされ、タイムスタンプに変換されます。 |
tls.detailed.server_certificate.serial_number | network.tls.server.certificate.serial | 未加工ログのフィールド tls.detailed.server_certificate.serial_number から直接マッピングされます。 |
tls.detailed.server_certificate.version | network.tls.server.certificate.version | 未加工ログの tls.detailed.server_certificate.version フィールドから直接マッピングされ、文字列に変換されます。 |
tls.established | network.tls.established | 未加工ログのフィールド tls.established から直接マッピングされます。 |
tls.next_protocol | network.tls.next_protocol | 未加工ログのフィールド tls.next_protocol から直接マッピングされます。 |
tls.resumed | network.tls.resumed | 未加工ログのフィールド tls.resumed から直接マッピングされます。 |
tls.server.hash.sha1 | network.tls.server.certificate.sha1 | 未加工ログの tls.server.hash.sha1 フィールドから直接マッピングされ、小文字に変換されます。 |
tls.server.issuer | network.tls.server.certificate.issuer | 未加工ログのフィールド tls.server.issuer から直接マッピングされます。 |
tls.server.subject | network.tls.server.certificate.subject | 未加工ログのフィールド tls.server.subject から直接マッピングされます。 |
tls.version | network.tls.version | 未加工ログのフィールド tls.version から直接マッピングされます。 |
tls.version_protocol | network.tls.version_protocol | 未加工ログのフィールド tls.version_protocol から直接マッピングされます。 |
type | イベントが DNS イベントかどうかを判断するために使用されます。 | |
url.full | principal.url(インバウンド)/ target.url(アウトバウンド) | network.direction フィールドに基づいてマッピングされます。INBOUND の場合は principal.url にマッピングされます。OUTBOUND の場合、target.url にマッピングされます。 |
user_id | target.user.userid | 未加工ログのフィールド user_id から直接マッピングされます。 |
user_name | target.user.user_display_name | 未加工ログのフィールド user_name から直接マッピングされます。 |
metadata.event_type | デフォルトでは GENERIC_EVENT に設定されています。ログソースとイベントデータに基づいて、特定のイベントタイプに変更されます。 |
|
metadata.vendor_name | デフォルトでは Elastic に設定されています。 |
|
metadata.product_name | デフォルトでは PacketBeat に設定されています。 |
|
security_result.action | デフォルトでは ALLOW に設定されています。 |
|
metadata.log_type | デフォルトでは ELASTIC_PACKETBEATS に設定されています。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。