收集 Zeek(以前称为 Bro)TSV 日志

支持的平台:

本文档介绍了如何使用 Bindplane 代理将 Zeek(以前称为 Bro)TSV 日志注入到 Google Security Operations。

Zeek(以前称为 Bro)是一个网络安全监控平台,可被动分析网络流量,并生成详细的制表符分隔日志文件,其中包含连接、DNS 查询、HTTP 事务、SSL/TLS 会话和文件分析。Zeek 传感器默认在 /opt/zeek/logs//usr/local/zeek/logs/ 下生成 TSV 日志文件。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • Bindplane 代理与 Zeek 传感器主机之间的网络连接
  • 如果在代理后面运行,请确保防火墙端口已根据 Bindplane 代理要求打开
  • 对 Zeek 传感器主机具有读取日志文件的权限
  • 对传感器文件系统(通常位于 /opt/zeek/logs//usr/local/zeek/logs/ 下)中的 Zeek TSV 日志文件的访问权限

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载数据注入身份验证文件
  4. 将文件安全地保存在将要安装 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
    
  3. 等待安装完成。

  4. 运行以下命令,验证安装是否成功:

    sc query observiq-otel-collector
    

    该服务应显示为 正在运行

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 等待安装完成。

  4. 运行以下命令,验证安装是否成功:

    sudo systemctl status observiq-otel-collector
    

    该服务应显示为有效(正在运行)

其他安装资源

如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南

配置 Bindplane 代理以注入 syslog 并将其发送到 Google SecOps

找到配置文件

  • Linux

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

修改配置文件

  • config.yaml 的全部内容替换为以下配置:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/bro_tsv:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: BRO_TSV
            raw_log_field: body
            ingestion_labels:
                env: production
    
    service:
        pipelines:
            logs/bro_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/bro_tsv
    

配置参数

替换以下占位符:

  • 接收器配置

    • udplog:基于协议的接收器类型:
      • udplog(适用于 UDP syslog)
      • tcplog(适用于 TCP syslog)
    • 0.0.0.0:要监听的 IP 地址:
      • 0.0.0.0 侦听所有接口(推荐)
      • 在某个接口上监听的特定 IP 地址
    • 514:要监听的端口号(例如 51415146514
  • 导出器配置

    • bro_tsv:导出器的描述性名称
    • creds_file_path:提取身份验证文件的完整路径:
      • Linux/etc/bindplane-agent/ingestion-auth.json
      • WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>:上一步中的客户 ID
    • endpoint:区域端点网址:
      • 美国malachiteingestion-pa.googleapis.com
      • 欧洲europe-malachiteingestion-pa.googleapis.com
      • 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com
      • 如需查看完整列表,请参阅区域级端点
    • BRO_TSV:日志类型,与在 Chronicle 中显示的完全一致
    • ingestion_labels:YAML 格式的可选标签(例如 env: production
  • 流水线配置

    • bro_to_chronicle:流水线的描述性名称

保存配置文件

  • 修改后,保存文件:
    • Linux:依次按 Ctrl+OEnterCtrl+X
    • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

  • 如需在 Linux 中重启 Bindplane 代理,请运行以下命令:

    sudo systemctl restart observiq-otel-collector
    
    1. 验证服务是否正在运行:

      sudo systemctl status observiq-otel-collector
      
    2. 检查日志是否存在错误:

      sudo journalctl -u observiq-otel-collector -f
      
  • 如需在 Windows 中重启 Bindplane 代理,请选择以下选项之一:

    • 以管理员身份运行命令提示符或 PowerShell:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • 服务控制台:

      1. Win+R,输入 services.msc,然后按 Enter 键。
      2. 找到 observIQ OpenTelemetry 收集器
      3. 右键点击并选择重新启动
      4. 验证服务是否正在运行:

        sc query observiq-otel-collector
        
      5. 检查日志是否存在错误:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

配置 Zeek syslog 转发

Zeek 会在本地生成 TSV 日志文件。如需使用 syslog 将这些日志转发到 Bindplane 代理,请在 Zeek 传感器主机上配置 syslog 守护程序。

  1. 使用 root 或 sudo 权限登录 Zeek 传感器主机。
  2. 如果尚未安装和配置 rsyslogsyslog-ng,请进行安装和配置。
  3. 创建 rsyslog 配置文件以转发 Zeek 日志:

    sudo nano /etc/rsyslog.d/zeek-forward.conf
    
  4. 添加以下配置,以将 Zeek 日志转发到 Bindplane 代理:

    module(load="imfile")
    input(type="imfile"
        File="/opt/zeek/logs/current/*.log"
        Tag="zeek:"
        Severity="info"
        Facility="local6")
    local6.* @<BINDPLANE_AGENT_IP>:514
    
    • <BINDPLANE_AGENT_IP> 替换为 Bindplane 代理主机 IP 地址。
    • 如果实际 Zeek 日志文件路径不同,请将其替换为 /opt/zeek/logs/current/*.log
    • 对于 TCP 转发,请使用 @@(而不是 @)(必须与 Bindplane 代理接收器类型一致)。
  5. 重新启动 rsyslog 以应用更改:

    sudo systemctl restart rsyslog
    
  6. 通过检查 Bindplane 代理日志,验证是否正在接收 syslog 消息。

UDM 映射表

日志字段 UDM 映射 逻辑
rtt、operation、tunnel_type、action、cmd、arg、rows additional.fields 从 additional_rtt、additional_op、additional_tt、additional_action、additional_cmd、additional_arg、additional_rows 合并
extensions.auth.type 设置为“AUTHTYPE_UNSPECIFIED”
conn_state、action、error、desc metadata.description 针对 bro_conn 设置为 conn_state 说明,针对 bro_smb_files 设置为操作,针对 bro_kerberos 设置为“KERBEROS: %{error}”,针对 AsymPayloadFlow 设置为说明,针对其他设置为常量
bro_type、qerror、next_protocol、protocol metadata.event_type 默认设置为 GENERIC_EVENT,dns 为 NETWORK_DNS,conn/ntlm/smb_mapping/dce_rpc/tunnel/mysql/ssh/udp/tcp 为 NETWORK_CONNECTION,dhcp 为 NETWORK_DHCP,如果 next_protocol 为 http,则 http/ssl 为 NETWORK_HTTP,smb_files/files/x509 为 NETWORK_UNCATEGORIZED,radius 为 USER_LOGIN,ftp 为 NETWORK_FTP,如果 qerror query_not_present,则为 NETWORK_UNCATEGORIZED
bro_type、prod_event metadata.product_event_type 如果 bro_type 不为空,则取自 bro_type,否则取自 prod_event
uid、id metadata.product_log_id 如果 uid 可用,则使用 uid 中的值,否则使用 id 中的值
metadata.product_name 设置为“兄弟”
metadata.vendor_name 设置为“Zeek”
service_proto, source network.application_protocol 对于连接,从 service_proto 映射;对于文件,从来源映射;对于其他,为常量
主机名 network.dhcp.client_hostname 直接复制值
lease_time network.dhcp.lease_time_seconds 已转换为 uinteger
dhcp_info network.dhcp.type 如果 =~“ACK”,则设置为“ACK”;如果 =~“RELEASE”,则设置为“RELEASE”;如果 =~“INFORM”,则设置为“INFORM”;如果 =~“DISCOVER”,则设置为“DISCOVER”;如果 =~“OFFER”,则设置为“OFFER”;如果 =~“REQUEST”,则设置为“REQUEST”
assigned_ip network.dhcp.yiaddr 直接复制值
方向 network.direction 直接复制值
answer_list network.dns.answers 直接复制值
trans_id network.dns.id 已转换为 uinteger
q network.dns.questions 从 q 合并
rcode network.dns.response_code 如果不是“-”,则转换为 uinteger
命令 network.ftp.command 直接复制值
方法 network.http.method 直接复制值
referrer network.http.referral_url 直接复制值
status_code network.http.response_code 转换为整数
user_agent network.http.user_agent 直接复制值
proto、protocol network.ip_protocol 来自连接 proto 的值,对于 UDP 为“UDP”,对于 TCP 为“TCP”
id_resp_bytes、received_bytes network.received_bytes 将 id_resp_bytes(针对连接)和 received_bytes(针对文件)转换为 uinteger
id_orig_bytes network.sent_bytes 已转换为 uinteger
uid network.session_id 直接复制值
加密 network.tls.cipher 直接复制值
client_issuer network.tls.client.certificate.issuer 直接复制值
client_subject network.tls.client.certificate.subject 直接复制值
客户端 network.tls.client.certificate.version 直接复制值
ja3 network.tls.client.ja3 直接复制值
曲线 network.tls.curve 直接复制值
已建立 network.tls.established 直接复制值
next_protocol network.tls.next_protocol 直接复制值
已恢复 network.tls.resumed 直接复制值
issuer、certificate.issuer network.tls.server.certificate.issuer 来自签发者的值(对于 SSL 为 issuer,对于 x509 为 certificate.issuer)
certificate.not_valid_after network.tls.server.certificate.not_after 使用日期过滤条件转换
certificate.not_valid_before network.tls.server.certificate.not_before 使用日期过滤条件转换
certificate.serial network.tls.server.certificate.serial 直接复制值
subject, certificate.subject network.tls.server.certificate.subject SSL 的主题值,x509 的 certificate.subject
certificate.version network.tls.server.certificate.version 已转换为字符串
ja3s network.tls.server.ja3s 直接复制值
版本 network.tls.version 直接复制值
域名 principal.administrative_domain 直接复制值
file_size principal.file.size 已转换为 uinteger
client_host、_system_name、_HostName principal.hostname 来自 client_host 的值(适用于 Kerberos)、来自 _system_name 的值(适用于 x509)、提取的 _HostName(如果已提取)
id.orig_h principal.ip 从 id.orig_h 合并
mac principal.mac 直接复制值
id.orig_p principal.port 转换为整数,如果不是 local_orig,则为来自 id.orig_p 的值或反向连接值
user_email principal.user.email_addresses 已从 user_email 合并
user、username、user_name principal.user.userid 用户针对 FTP 提供的值、针对 RADIUS 提供的用户名、针对 Kerberos 提供的 user_name
qclass q.class 已转换为 uinteger
qname、q.name q.name 来自 qname 或 q.name 的值
qtype q.type 已转换为 uinteger
result, auth_success security_result 从 security_result 合并,其中针对半径失败的操作为 BLOCK,针对 SSH 的操作为 ALLOW/BLOCK/UNKNOWN
uri target.administrative_domain 使用 Grok 从 URI 中提取
full_file_path, fuid target.file.full_path smb_files 的 full_file_path 值,文件的 fuid 值
md5 target.file.md5 直接复制值
mime_type target.file.mime_type 直接复制值
sha1 target.file.sha1 直接复制值
size、file_size target.file.size 将 smb_files 的大小和文件的 file_size 转换为 uinteger
server_host、host、CN、server target.hostname 来自 server_host 的值(适用于 Kerberos)、host 的值(适用于 HTTP)、CN 的值(适用于 x509)、server 的值(适用于 SSH)
id.resp_h target.ip 已从 id.resp_h 合并
host_key、host_key_alg、kex_alg、mac_alg、compression_alg、cipher_alg、auth_attempts target.labels 从各种标签对象合并而来
id.resp_p target.port 转换为整数,来自 id.resp_p 的值,如果不是 local_orig,则为连接反向值
path、named_pipe target.resource.name smb_mapping 的路径值,dce_rpc 的命名管道
share_type target.resource.type 来自 smb_mapping 的 share_type 的值,对于 dce_rpc 为“PIPE”
网址 target.url 由主机和 URI 连接而成

更新日志

查看相应解析器的更改日志

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。