收集 OpenCanary 日志
概览
此解析器从 OpenCanary SYSLOG 和 JSON 日志中提取字段,将其标准化为 UDM 格式,并使用派生字段(例如 metadata.event_type
和 security_result.severity
)丰富数据。它可处理各种日志格式,执行 IP 地址验证,并将字段映射到相应的 UDM 对象,例如 principal
、target
和 network
。
准备工作
确保您满足以下前提条件:
- Google SecOps 实例。
- 对 OpenCanary 的特权访问权限。
设置 Feed
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed
- 内容中心 > 内容包
通过“SIEM 设置”>“Feed”设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed name(Feed 名称)字段中,输入 Feed 的名称,例如 OpenCanary Logs。
- 选择 Webhook 作为来源类型。
- 选择 OpenCanary 作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 拆分分隔符:用于分隔日志行的分隔符,例如
\n
。
- 拆分分隔符:用于分隔日志行的分隔符,例如
- 点击下一步。
- 在最终确定界面中检查 Feed 配置,然后点击提交。
- 点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。
- 复制并存储密钥。您将无法再次查看此密钥。如有需要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥失效。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
设置来自内容中心的 Feed
为以下字段指定值:
- 拆分分隔符:用于分隔日志行的分隔符,例如
\n
。
高级选项
- Feed 名称:用于标识 Feed 的预填充值。
- 来源类型:用于将日志收集到 Google SecOps 中的方法。
- 资源命名空间:与 Feed 关联的命名空间。
提取标签:应用于相应 Feed 中所有事件的标签。
点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。
复制并存储密钥。您将无法再次查看此密钥。如有需要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥失效。
在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
为 Webhook Feed 创建 API 密钥
前往 Google Cloud 控制台 > 凭据。
点击创建凭据,然后选择 API 密钥。
将 API 密钥访问权限限制为 Google Security Operations API。
指定端点网址
- 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
通过在自定义标头中指定 API 密钥和密钥来启用身份验证,格式如下:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
建议:将 API 密钥指定为标头,而不是在网址中指定。
如果您的 Webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:
ENDPOINT_URL?key=API_KEY&secret=SECRET
替换以下内容:
ENDPOINT_URL
:Feed 端点网址。API_KEY
:用于向 Google Security Operations 进行身份验证的 API 密钥。SECRET
:您生成的用于验证 Feed 的密钥。
为 Google SecOps 设置 OpenCanary Webhook
找到 OpenCanary 配置文件
config.json
。使用文本编辑器打开
config.json
文件。在配置文件中找到标记为 alerters 的部分。
如果
webhook
提醒器已存在,请修改它。否则,为webhook
提醒者添加新条目。使用以下配置(将 ENDPOINT_网址、SECRET 和 API_KEY 替换为您的值):
"handlers": {
"Webhook": {
"class": "opencanary.logger.WebhookHandler",
"url": "<ENDPOINT_URL>",
"method": "POST",
"data": {"message": "%(message)s"},
"status_code": 200,
"headers": {
"X-Webhook-Access-Key": "<SECRET>",
"X-goog-api-key": "<API_KEY>"
}
}
}
- 保存
config.json
文件。 - 重启 OpenCanary 服务以应用更改。(例如,
sudo systemctl restart opencanary
)。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
dst_host |
target.asset.ip |
原始日志的 dst_host 字段会映射到 UDM。还映射到 target.ip 。 |
dst_host |
target.ip |
原始日志的 dst_host 字段会映射到 UDM。还映射到 target.asset.ip 。 |
dst_port |
target.port |
原始日志的 dst_port 字段会转换为字符串,然后转换为整数并映射到 UDM。 |
local_time |
metadata.event_timestamp |
原始日志的 local_time 字段用于填充 UDM 中的 metadata.event_timestamp 。如果不存在 local_time 字段,解析器会使用批处理对象中的 create_time 。 |
local_time_adjusted |
security_result.detection_fields |
原始日志的 local_time_adjusted 字段将作为键值对添加到 UDM 中的 security_result.detection_fields 数组。 |
logdata.COMMUNITY_STRING |
security_result.detection_fields |
原始日志的 logdata.COMMUNITY_STRING 字段将作为键值对添加到 UDM 中的 security_result.detection_fields 数组。 |
logdata.DOMAIN |
principal.administrative_domain |
原始日志的 logdata.DOMAIN 字段会映射到 UDM。 |
logdata.FILENAME |
target.file.full_path |
原始日志的 logdata.FILENAME 字段会映射到 UDM。 |
logdata.HOSTNAME |
principal.asset.hostname |
如果 logdata.HOSTNAME 字段不是 IP 地址,则会映射到 UDM。还映射到 principal.hostname 。 |
logdata.HOSTNAME |
principal.asset.ip |
如果 logdata.HOSTNAME 字段是 IP 地址,则会映射到 UDM。还映射到 principal.ip 。 |
logdata.HOSTNAME |
principal.hostname |
如果 logdata.HOSTNAME 字段不是 IP 地址,则会映射到 UDM。还映射到 principal.asset.hostname 。 |
logdata.HOSTNAME |
principal.ip |
如果 logdata.HOSTNAME 字段是 IP 地址,则会映射到 UDM。还映射到 principal.asset.ip 。 |
logdata.LOCALNAME |
principal.asset.hostname |
原始日志的 logdata.LOCALNAME 字段会映射到 UDM。还映射到 principal.hostname 。 |
logdata.LOCALNAME |
principal.hostname |
原始日志的 logdata.LOCALNAME 字段会映射到 UDM。还映射到 principal.asset.hostname 。 |
logdata.LOCALVERSION |
principal.platform_version |
原始日志的 logdata.LOCALVERSION 字段会映射到 UDM。 |
logdata.PASSWORD |
extensions.auth.mechanism |
logdata.PASSWORD 字段的存在会触发解析器将 UDM 中的 extensions.auth.mechanism 设置为 USERNAME_PASSWORD 。 |
logdata.PATH |
network.http.referral_url |
原始日志的 logdata.PATH 字段会映射到 UDM。 |
logdata.REMOTENAME |
target.asset.hostname |
原始日志的 logdata.REMOTENAME 字段会映射到 UDM。还映射到 target.hostname 。 |
logdata.REMOTENAME |
target.hostname |
原始日志的 logdata.REMOTENAME 字段会映射到 UDM。还映射到 target.asset.hostname 。 |
logdata.REMOTEVERSION |
target.platform_version |
原始日志的 logdata.REMOTEVERSION 字段会映射到 UDM。 |
logdata.SMBVER |
network.application_protocol |
logdata.SMBVER 字段的存在会触发解析器将 UDM 中的 network.application_protocol 设置为 SMB 。 |
logdata.USERAGENT |
network.http.parsed_user_agent |
原始日志的 logdata.USERAGENT 字段会转换为已解析的用户代理,并映射到 UDM。 |
logdata.USERAGENT |
network.http.user_agent |
原始日志的 logdata.USERAGENT 字段会映射到 UDM。 |
logdata.USERNAME |
target.user.userid |
原始日志的 logdata.USERNAME 字段会映射到 UDM。 |
loglevel |
security_result.severity |
原始日志的 loglevel 字段决定了 UDM 中的 security_result.severity 。WARNING 映射到 HIGH ,INFO /INFORMATION 映射到 LOW 。 |
logtype |
security_result.detection_fields |
原始日志的 logtype 字段将作为键值对添加到 UDM 中的 security_result.detection_fields 数组。 |
node_id |
principal.asset.asset_id |
原始日志的 node_id 字段会添加“id:”前缀并映射到 UDM。 |
src_host |
principal.asset.ip |
原始日志的 src_host 字段会映射到 UDM。还映射到 principal.ip 。 |
src_host |
principal.ip |
原始日志的 src_host 字段会映射到 UDM。还映射到 principal.asset.ip 。 |
src_port |
principal.port |
原始日志的 src_port 字段会转换为整数并映射到 UDM。 |
utc_time |
security_result.detection_fields |
原始日志的 utc_time 字段将作为键值对添加到 UDM 中的 security_result.detection_fields 数组。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。