收集 OpenCanary 日志

支持的语言:

概览

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

准备工作

确保您满足以下前提条件:

  • Google SecOps 实例。
  • 对 OpenCanary 的特权访问权限。

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed
  • 内容中心 > 内容包

通过“SIEM 设置”>“Feed”设置 Feed

如需配置 Feed,请按以下步骤操作:

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

设置来自内容中心的 Feed

为以下字段指定值:

  • 拆分分隔符:用于分隔日志行的分隔符,例如 \n

高级选项

  • Feed 名称:用于标识 Feed 的预填充值。
  • 来源类型:用于将日志收集到 Google SecOps 中的方法。
  • 资源命名空间:与 Feed 关联的命名空间。
  • 提取标签:应用于相应 Feed 中所有事件的标签。

  • 点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。

  • 复制并存储密钥。您将无法再次查看此密钥。如有需要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥失效。

  • 详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。

为 Webhook 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 数组。

需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。