收集 Zscaler Cloud Access Security Broker (CASB) 提醒日志

支持的平台:

本文档介绍了如何收集 Zscaler Cloud Access Security Broker (CASB) 提醒日志。此解析器会从 JSON 格式的日志中提取字段,并处理可能的格式不一致问题。它会将提取的字段映射到 UDM,在 principalmetadataadditionalsecurity_result 对象中创建或合并字段,并最终将所有内容合并到统一的 @output 字段中。解析器还会执行多项数据转换,包括字符串操作和日期解析。

准备工作

  • 确保您有一个 Google Security Operations 实例。
  • 确保您使用的是 Windows 2016 或更高版本,或者使用了带有 systemd 的 Linux 主机。
  • 如果在代理后面运行,请确保防火墙端口处于打开状态。
  • 确保您拥有对 ZScaler 的管理员访问权限。

获取 Google SecOps 提取身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载提取身份验证文件。将该文件安全地保存在将安装 BindPlane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次选择 SIEM 设置 > 配置文件
  3. 复制并保存组织详细信息部分中的客户 ID

安装 BindPlane Agent

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

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

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
    

其他安装资源

  • 如需了解其他安装选项,请参阅此安装指南

配置 BindPlane Agent 以提取 Syslog 并将其发送到 Google SecOps

  1. 访问配置文件:

    • 找到 config.yaml 文件。通常,在 Linux 上,该目录位于 /etc/bindplane-agent/ 目录中;在 Windows 上,该目录位于安装目录中。
    • 使用文本编辑器(例如 nanovi 或记事本)打开该文件。
  2. 按如下方式修改 config.yaml 文件:

    receivers:
        tcplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: vmware_nsx
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. 根据基础架构中的需要替换端口和 IP 地址。

  4. <customer_id> 替换为实际的客户 ID。

  5. 获取 Google SecOps 提取身份验证文件部分,将 /path/to/ingestion-authentication-file.json 更新为身份验证文件的保存路径。

重启 BindPlane 代理以应用更改

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

    sudo systemctl restart bindplane-agent
    
  • 在 Windows 中,如需重启 BindPlane Agent,您可以使用 Services 控制台,也可以输入以下命令:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

配置 Zscaler Cloud Web Security

  1. 登录 Zscaler Analytics 管理控制台。
  2. 依次选择管理 > 设置 > Nanolog 流式传输服务 (NSS)
  3. 选择 NSS Feed
  4. 点击 Add(添加)。
  5. 在随即显示的添加 NSS Feed 窗口中,执行以下操作:

    1. Feed 名称:输入 Feed 名称。
    2. NSS 类型:根据您的要求,选择 适用于网站的 NSS适用于防火墙的 NSS
    3. NSS 名称:选择从云端收集日志的 NSS 虚拟机 (VM)(只能将一个 NSS VM 映射到一个 Feed)。
    4. 状态:选择已启用以启用 Feed。
    5. SIEM IP:输入 syslog 服务器/Bindplane IP 地址。
    6. SIEM TCP 端口:输入用于 TCP 通信的 syslog 服务器/Bindplane 端口号(Zscaler 仅支持 TCP 连接)。
    7. 日志类型:根据所选的 NSS 类型,选择网站日志防火墙日志
    8. Feed 输出类型:选择自定义
    9. Feed 输出格式:指定网站日志或防火墙日志。
    10. 用户混淆:选择已停用以在输出中显示登录用户名。对于随机值,请选择已启用
    11. 时区:选择适当的时区(默认时区为 GMT)。
    12. 重复日志:输入 NSS 发送重复日志所需的分钟数(您可以根据自己的要求选择时间)。
    13. 交易过滤条件:您可以根据各种参数过滤 NSS 虚拟机发送的日志。

    如需详细了解不同的过滤器组,请参阅帮助门户中的 NSS 文档部分。

  6. 使用政策管理控制台或 Google Analytics 管理控制台:

    1. 如需使用政策管理控制台,请点击完成
    2. 如需使用 Google Analytics 管理控制台,请点击保存。 关闭 Add NSS feed 窗口后,返回上一个窗口,添加的 Feed 详情会显示在 Configure feeds 部分下。
  7. 使用政策管理控制台或 Google Analytics 管理控制台:

    1. 如需使用政策管理控制台,请执行以下操作:
      • 配置 Feed 部分,点击保存
      • 点击立即激活(结果的状态会显示在新窗口中)。
      • 点击完成
    2. 如需使用 Google Analytics 管理控制台,请点击立即启用(结果状态会显示在窗口顶部)。

配置网站和防火墙日志 Feed

Feed 输出格式字段中,使用以下 Feed:

  • 如果收集器支持自定义格式,请指定以下网站日志 Feed:

    |ZSCALER|DATE|%s{mon} %d{dd} %02d{hh}:%02d{mm}:%02d{ss}|NSSFEEDIP|%s{nsssvcip}|CLIENTINTIP|%s{cintip}|RECORDID|%d{recordid}|LOGINNAME|%s{login}|PROTOCOL|%s{proto}|URL|%s{url}|HOST|%s{host}|ACTION|%s{action}|REASON|%s{reason}|RISKSCORE|%d{riskscore}|APPNAME|%s{appname}|APPCLASS|%s{appclass}|REQSIZE|%d{reqsize}|RESPSIZE|%d{respsize}|CTIME|%d{ctime}|URLCLASS|%s{urlclass}|SUPERCAT|%s{urlsupercat}|URLCAT|%s{urlcat}|MALWARECAT|%s{malwarecat}|MALWARECLASS|%s{malwareclass}|THREATNAME|%s{threatname}|FILETYPE|%s{filetype}|FILECLASS|%s{fileclass}|DLPENGINE|%s{dlpeng}|DLPDICT|%s{dlpdict}|BWTHROTTLE|%s{bwthrottle}|LOCATION|%s{location}|DEPARTMENT|%s{dept}|CLIENTIP|%s{cip}|DESTINATIONIP|%s{sip}|REQMETHOD|%s{reqmethod}|RESPCODE|%s{respcode}|USERAGENT|%s{ua}|REFERER|%s{referer}|MD5HASH|%s{bamd5}|DLPRULENAME|%s{dlprulename}|DLPMD5|%s{dlpmd5}|DLPIDENTIFIER|%d{dlpidentifier}|DLPDICTHITCOUNT|%s{dlpdicthitcount}|\n
            ```
    
  • 如果收集器支持防火墙 Feed 订阅,请指定以下防火墙 Feed:

    |ZSCALERFIREWALL|DATE|%s{mon}%d{dd} %02d{hh}:%02d{mm}:%02d{ss}|CLIENTIP|%s{csip}|RECORDID|%d{recordid}|LOGINNAME|%s{login}|PROTOCOL|%s{ipproto}|ACTION|%s{action}|DESTINATIONIP|%s{cdip}|SOURCEPORT|%d{csport}|DESTINATIONPORT|%d{cdport}|CLIENTTUNIP|%s{tsip}|CLIENTTUNPORT|%d{tsport}|LOCATION|%s{location}|DEPARTMENT|%s{dept}|DESTINATIONCOUNTRY|%s{destcountry}|INCOMINGBYTES|%ld{inbytes}|NETWORKAPP|%s{nwapp}|NETWORKSVC|%s{nwsvc}|RULELABEL|%s{rulelabel}|NATTING|%s{dnat}|SESSIONDURATION|%d{duration}|AGGREGATEDSESSION|%d{numsessions}|AVERAGEDURATION|%d{avgduration}|TUNNELTYPE|%s{ttype}|SERVERDESTPORT|%d{sdport}|SERVERSOURCEIP|%s{ssip}|SERVERSOURCEPORT|%d{ssport}|IPCAT|%s{ipcat}|\n
    

配置 Zscaler 专用访问通道

  1. 用户活动:选择日志类型
  2. 日志模板:选择 CSV
  3. 日志流:运行以下命令:

    *%s{LogTimestamp:time} User Activity zpa-lss: %s{Username},%d{ServicePort},%s{ClientPublicIP},%s{ClientCountryCode},%s{ConnectionStatus},%d{IPProtocol},%s{ClientZEN},%s{Policy},%s{Connector},%s{ConnectorZEN},%s{ConnectorIP},%s{Host},%s{ServerIP},%s{TimestampConnectionStart:iso8601},%d{ServerPort}\n*
    

UDM 映射表

日志字段 UDM 映射 逻辑
applicationname principal.application 系统会将原始日志中的 applicationname 值分配给此 UDM 字段。
company principal.user.company_name 系统会将原始日志中的 company 值分配给此 UDM 字段。
datetime metadata.event_timestamp 系统会解析原始日志中的 datetime 值并将其转换为时间戳,然后将该时间戳分配给此 UDM 字段。解析器使用多种日期格式来处理原始日志中的变体。
dept principal.user.department 系统会将原始日志中的 dept 值分配给此 UDM 字段。
dlpdictcount additional.fields 如果原始日志中存在 dlpdictcount,且该值不为“None”或空,则系统会向 additional.fields 数组添加一个键为“dlpdictcount”且字符串值为 dlpdictcount 的新字段。
dlpdictnames additional.fields 如果原始日志中存在 dlpdictnames,且该值不是“None”或空,则系统会向 additional.fields 数组添加一个键为“dlpdictnames”且字符串值为 dlpdictnames 的新字段。
dlpenginenames additional.fields 如果原始日志中存在 dlpenginenames,且该值不为“None”或空,则系统会向 additional.fields 数组添加一个键为“dlpenginenames”且字符串值为 dlpenginenames 的新字段。
event.extcollabnames additional.fields 如果原始日志中存在 extcollabnames,则会按“
event.extownername additional.fields 如果原始日志中存在 extownername,系统会向 additional.fields 数组添加一个键为“extownername”且字符串值为 extownername 的新字段。
filedownloadtimems additional.fields 如果原始日志中存在 filedownloadtimems,系统会向 additional.fields 数组添加一个键为“File Download Time”(文件下载时间)且字符串值为 filedownloadtimems 的新字段。
fileid additional.fields 如果原始日志中存在 fileid,系统会向 additional.fields 数组添加一个键为“fileid”且字符串值为 fileid 的新字段。
filename principal.process.file.full_path 系统会将原始日志中的 filename 值分配给此 UDM 字段。解析器会处理文件名中的转义字符和特殊情况。
filemd5 principal.process.file.md5 如果原始日志中存在 filemd5,且该值不为“None”或空,则其值会分配给此 UDM 字段。
filescantimems additional.fields 如果原始日志中存在 filescantimems,系统会向 additional.fields 数组添加一个键为“File Scan Time”(文件扫描时间)且字符串值为 filescantimems 的新字段。
filesource additional.fields 如果原始日志中存在 filesource,系统会向 additional.fields 数组添加一个键为“File Source”且字符串值为 filesource 的新字段。解析器会处理文件源中的转义字符和特殊情况。
fullurl principal.url 如果原始日志中存在 fullurl,且该值不是“未知网址”或空,则其值会分配给此 UDM 字段。
intcollabnames additional.fields 如果原始日志中存在 intcollabnames,则会按“
lastmodtime metadata.event_timestamp 如果原始日志中存在 lastmodtime,系统会对其进行解析并将其转换为时间戳,然后将该时间戳分配给此 UDM 字段。解析器使用多种日期格式来处理原始日志中的变体。
login principal.user.email_addressesprincipal.user.userid 如果存在 login 且与电子邮件地址格式匹配,则其值会同时分配给 principal.user.email_addressesprincipal.user.userid。如果存在 login,但其格式与电子邮件地址格式不匹配,则其值仅分配给 principal.user.userid。如果不存在 login,则 principal.user.userid 会设置为“n/a”。
policy security_result.rule_name 如果原始日志中存在 policy,且该值不为“None”或空,则其值会分配给此 UDM 字段。
recordid metadata.product_log_id 如果原始日志中存在 recordid,则其值会分配给此 UDM 字段。
tenant additional.fields 如果原始日志中存在 tenant,系统会向 additional.fields 数组添加一个键为“Tenant”且字符串值为 tenant 的新字段。
threatname security_result.threat_name 如果原始日志中存在 threatname,且其值不是“None”或空,则系统会将其值分配给此 UDM 字段。
(Parser Logic) metadata.event_type 解析器会将此字段设置为“USER_UNCATEGORIZED”。
(Parser Logic) metadata.log_type 解析器会将此字段设置为“ZSCALER_CASB”。
(Parser Logic) metadata.product_name 解析器会将此字段设置为“Zscaler CASB”。
(Parser Logic) metadata.vendor_name 解析器会将此字段设置为“Zscaler”。

更改

2024-06-04

  • 添加了“gsub”函数,用于处理以下字段中的无效转义字符:“filename”“fileid”“filemd5”和“filesource”。

2024-03-27

  • 添加了“gsub”函数,用于处理“filename”中的无效转义字符。

2024-03-05

  • 将“event.fileid”“event.intcollabnames”“event.extownername”“event.extcollabnames”映射到“additional.fields”。

2024-01-29

  • 添加了“gsubs”函数,用于处理“filesource”中的无效转义字符“,”。
  • 添加了“gsubs”函数,用于处理“filename”中的无效转义字符。

2023-12-21

  • 添加了 gsubs,以处理未解析 JSON 日志中的无效字符。

2023-09-30

  • 将“event.login”映射到“principal.user.userid”。如果不可用,请将“principal.user.userid”设置为“n/a”。
  • 为“日期”过滤条件添加了“on_error”检查,即“event.lastmodtime”,这是一个可选参数。

2022-08-16

  • 新创建的解析器