收集 OpenCanary 日志

支持的平台:

概览

此解析器会从 OpenCanary SYSLOG 和 JSON 日志中提取字段,将其标准化为 UDM 格式,并使用 metadata.event_typesecurity_result.severity 等派生字段丰富数据。它可处理各种日志格式、执行 IP 地址验证,并将字段映射到适当的 UDM 对象(例如 principaltargetnetwork)。

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保您拥有对 OpenCanary 的超级用户访问权限。

在 Google SecOps 中配置 Feed 以注入 OpenCanary 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 OpenCanary 日志)。
  4. 选择Webhook 作为来源类型
  5. 选择 OpenCanary 作为日志类型
  6. 点击下一步
  7. 可选:为以下输入参数指定值:
    • 分隔符:用于分隔日志行(例如 \n)的分隔符。
    • 资源命名空间资源命名空间
    • 提取标签:应用于此 Feed 中的事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看 Feed 配置,然后点击提交
  10. 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
  11. 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
  12. 详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
  13. 点击完成

为该网站钩子 Feed 创建 API 密钥

  1. 依次前往 Google Cloud 控制台 > 凭据

    转到“凭据”页面

  2. 点击创建凭据,然后选择 API 密钥

  3. 限制 API 密钥对 Google Security Operations API 的访问权限。

指定端点网址

  1. 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
  2. 通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    建议:将 API 密钥作为标头指定,而不是在网址中指定。

  3. 如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    替换以下内容:

    • ENDPOINT_URL:Feed 端点网址。
    • API_KEY:用于对 Google Security Operations 进行身份验证的 API 密钥。
    • SECRET:您为对 Feed 进行身份验证而生成的密钥。

为 Google SecOps 设置 OpenCanary Webhook

  1. 找到 OpenCanary 配置文件 config.json

  2. 使用文本编辑器打开 config.json 文件。

  3. 在配置文件中找到标记为 alerters 的部分。

  4. 如果 webhook 提醒程序已存在,请对其进行修改。否则,请为 webhook 提醒程序添加新条目。

  5. 使用以下配置(将 ENDPOINT_网址SECRETAPI_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>"
         }
    }
}
  1. 保存 config.json 文件。
  2. 重启 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.severityWARNING 映射到 HIGHINFO/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

  • 新创建的解析器。