收集 Zscaler Cloud Access Security Broker (CASB) 提醒日志
本文档介绍了如何收集 Zscaler Cloud Access Security Broker (CASB) 提醒日志。此解析器会从 JSON 格式的日志中提取字段,并处理可能的格式不一致问题。它会将提取的字段映射到 UDM,在 principal
、metadata
、additional
和 security_result
对象中创建或合并字段,并最终将所有内容合并到统一的 @output
字段中。解析器还会执行多项数据转换,包括字符串操作和日期解析。
准备工作
- 确保您有一个 Google Security Operations 实例。
- 确保您使用的是 Windows 2016 或更高版本,或者使用了带有
systemd
的 Linux 主机。 - 如果在代理后面运行,请确保防火墙端口处于打开状态。
- 确保您拥有对 ZScaler 的管理员访问权限。
获取 Google SecOps 提取身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载提取身份验证文件。将该文件安全地保存在将安装 BindPlane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次选择 SIEM 设置 > 配置文件。
- 复制并保存组织详细信息部分中的客户 ID。
安装 BindPlane Agent
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
其他安装资源
- 如需了解其他安装选项,请参阅此安装指南。
配置 BindPlane Agent 以提取 Syslog 并将其发送到 Google SecOps
访问配置文件:
- 找到
config.yaml
文件。通常,在 Linux 上,该目录位于/etc/bindplane-agent/
目录中;在 Windows 上,该目录位于安装目录中。 - 使用文本编辑器(例如
nano
、vi
或记事本)打开该文件。
- 找到
按如下方式修改
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
根据基础架构中的需要替换端口和 IP 地址。
将
<customer_id>
替换为实际的客户 ID。在获取 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
- 登录 Zscaler Analytics 管理控制台。
- 依次选择管理 > 设置 > Nanolog 流式传输服务 (NSS)。
- 选择 NSS Feed。
- 点击 Add(添加)。
在随即显示的添加 NSS Feed 窗口中,执行以下操作:
- Feed 名称:输入 Feed 名称。
- NSS 类型:根据您的要求,选择 适用于网站的 NSS 或 适用于防火墙的 NSS。
- NSS 名称:选择从云端收集日志的 NSS 虚拟机 (VM)(只能将一个 NSS VM 映射到一个 Feed)。
- 状态:选择已启用以启用 Feed。
- SIEM IP:输入 syslog 服务器/Bindplane IP 地址。
- SIEM TCP 端口:输入用于 TCP 通信的 syslog 服务器/Bindplane 端口号(Zscaler 仅支持 TCP 连接)。
- 日志类型:根据所选的 NSS 类型,选择网站日志或防火墙日志。
- Feed 输出类型:选择自定义。
- Feed 输出格式:指定网站日志或防火墙日志。
- 用户混淆:选择已停用以在输出中显示登录用户名。对于随机值,请选择已启用。
- 时区:选择适当的时区(默认时区为 GMT)。
- 重复日志:输入 NSS 发送重复日志所需的分钟数(您可以根据自己的要求选择时间)。
- 交易过滤条件:您可以根据各种参数过滤 NSS 虚拟机发送的日志。
如需详细了解不同的过滤器组,请参阅帮助门户中的 NSS 文档部分。
使用政策管理控制台或 Google Analytics 管理控制台:
- 如需使用政策管理控制台,请点击完成。
- 如需使用 Google Analytics 管理控制台,请点击保存。 关闭 Add NSS feed 窗口后,返回上一个窗口,添加的 Feed 详情会显示在 Configure feeds 部分下。
使用政策管理控制台或 Google Analytics 管理控制台:
- 如需使用政策管理控制台,请执行以下操作:
- 在配置 Feed 部分,点击保存。
- 点击立即激活(结果的状态会显示在新窗口中)。
- 点击完成。
- 如需使用 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 专用访问通道
- 用户活动:选择日志类型。
- 日志模板:选择 CSV。
日志流:运行以下命令:
*%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_addresses ,principal.user.userid |
如果存在 login 且与电子邮件地址格式匹配,则其值会同时分配给 principal.user.email_addresses 和 principal.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
- 新创建的解析器