收集 OpenCanary 日志
支持的平台:
Google SecOps
SIEM
概览
此解析器会从 OpenCanary SYSLOG 和 JSON 日志中提取字段,将其标准化为 UDM 格式,并使用 metadata.event_type
和 security_result.severity
等派生字段丰富数据。它可处理各种日志格式、执行 IP 地址验证,并将字段映射到适当的 UDM 对象(例如 principal
、target
和 network
)。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有对 OpenCanary 的超级用户访问权限。
在 Google SecOps 中配置 Feed 以注入 OpenCanary 日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在Feed 名称字段中,输入 Feed 的名称(例如 OpenCanary 日志)。
- 选择Webhook 作为来源类型。
- 选择 OpenCanary 作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 分隔符:用于分隔日志行(例如
\n
)的分隔符。 - 资源命名空间:资源命名空间。
- 提取标签:应用于此 Feed 中的事件的标签。
- 分隔符:用于分隔日志行(例如
- 点击下一步。
- 在最终确定界面中查看 Feed 配置,然后点击提交。
- 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
- 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
为该网站钩子 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 数组。 |
变化
2024-03-11
- 移除了 JSON 日志末尾的无效字符,以解析未解析的日志。
- 使“principal.ip”和“principal.asset.ip”映射保持一致。
- 对齐了“target.ip”和“target.asset.ip”映射。
2024-02-08
- 新创建的解析器。