收集 Elastic Packet Beats 記錄

支援的國家/地區:

本文說明如何使用 Bindplane,將 Elastic Packet Beats 記錄擷取至 Google Security Operations。剖析器會先初始化 Elastic Packet Beats 記錄中各種欄位的預設值。接著,系統會使用 grok 模式和 json 篩選器組合,從記錄訊息中擷取資料、執行資料型別轉換,並根據事件資料集型別 (例如 flow、dns、http、tls、dhcpv4),將擷取的欄位對應至統一資料模型 (UDM) 中的相應欄位。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體。
  • 搭載 systemd 的 Windows 2016 以上版本或 Linux 主機。
  • 如果透過 Proxy 執行,請確認防火牆通訊埠已根據 Bindplane 代理程式需求開啟。
  • 具備 Elastic Packet Beats 管理主控台或設備的特殊存取權。
  • 已安裝並設定 Logstash。

取得 Google SecOps 擷取驗證檔案

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「收集代理程式」
  3. 下載擷取驗證檔案
    • 將檔案安全地儲存在要安裝 Bindplane 的系統上。

取得 Google SecOps 客戶 ID

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「設定檔」
  3. 複製並儲存「機構詳細資料」專區中的客戶 ID

安裝 Bindplane 代理程式

請按照下列操作說明,在 Windows 或 Linux 作業系統上安裝 Bindplane 代理程式。

Windows 安裝

  1. 以管理員身分開啟「命令提示字元」或「PowerShell」
  2. 執行下列指令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux 安裝

  1. 開啟具有根層級或 sudo 權限的終端機。
  2. 執行下列指令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

其他安裝資源

如需其他安裝選項,請參閱安裝指南

設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 Google SecOps

  1. 存取設定檔:

    • 找出 config.yaml 檔案。通常位於 Linux 的 /etc/bindplane-agent/ 目錄,或 Windows 的安裝目錄。
    • 使用文字編輯器 (例如 nanovi 或記事本) 開啟檔案。
  2. 按照下列方式編輯 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 不支援直接輸出系統記錄,您必須使用 Logstash 做為中介程式。

設定 Packetbeat 將記錄傳送至 Logstash

  1. 登入 Elastic Packet Beats 管理控制台
  2. 依序前往「設定」>「記錄轉送」
  3. 按一下「+ 新增」或「啟用」按鈕。
  4. 提供下列設定詳細資料:
    • 名稱:輸入描述性名稱 (例如 Logstash Output)。
    • 主機:輸入 Logstash 伺服器 IP 位址。
    • 「Port」(通訊埠):輸入 Logstash beats 輸入通訊埠 (通常為 5044)。
    • 「通訊協定」:選取「Beats 通訊協定」
    • 格式:選取「JSON」
    • 時區:選取世界標準時間時區,確保各系統的時間一致。
    • 前往「事件」部分,然後選取相關記錄類型或「全部」
  5. 儲存設定。

    替代做法:直接編輯 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 位址。

設定 Logstash,透過 Syslog 轉送至 BindPlane

  1. 建立 Logstash 管道設定檔:

    sudo nano /etc/logstash/conf.d/packetbeat-to-bindplane.conf
    
  2. 新增下列設定:

    # 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 (INBOUND) / network.sent_bytes (OUTBOUND) 根據 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 (REQUEST,如果 dhcpv4.client_ip 為空) 根據 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_codeBOOTREPLYBOOTREQUEST,系統會直接對應值。否則會對應至 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 -> ACKnack -> NAKdiscover -> DISCOVERoffer -> OFFERrequest -> REQUESTdecline -> DECLINErelease -> RELEASEinfo -> 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 從原始記錄欄位 headers.x_forwarded_for 直接對應,並使用 grok 擷取 IP 位址。
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 從原始記錄欄位 host 直接對應,並使用 grok 擷取 IP 位址。
http.request.method network.http.method 直接從原始記錄欄位 http.request.method 對應。
level security_result.severity 根據 level 的值對應至 security_result.severity。對應方式如下:INFO -> INFORMATIONALERROR -> ERRORWARNING -> LOW
記錄器 additional.fields.logger.value.string_value 直接從原始記錄欄位 logger 對應。
方法 用於判斷事件是否為 DNS 事件。
msg security_result.description 從原始記錄欄位 msg 直接對應,並移除雙引號。
network.community_id network.community_id 直接從原始記錄欄位 network.community_id 對應。
network.direction network.direction 系統會將原始記錄欄位 network.direction 轉換為大寫,然後直接對應。如果值為 INGRESSINBOUND,則會對應至 INBOUND。如果值為 EGRESSOUTBOUND,則會對應至 OUTBOUND
network.protocol network.application_protocol 直接從原始記錄欄位 network.protocol 對應。
network.transport network.ip_protocol 直接從 TLS 事件的原始記錄欄位 network.transport 對應。
server.bytes network.sent_bytes (INBOUND) / network.received_bytes (OUTBOUND) 根據 network.direction 欄位對應。如果是 INBOUND,則會對應至 network.sent_bytes。如果是 OUTBOUND,則會對應至 network.received_bytes
server.domain principal.hostname、principal.asset.hostname (INBOUND) / target.hostname、target.asset.hostname (OUTBOUND) 根據 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 (INBOUND) / target.port (OUTBOUND) 根據 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 對應。
類型 用於判斷事件是否為 DNS 事件。
url.full principal.url (INBOUND) / target.url (OUTBOUND) 根據 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 專業人員尋求答案。