收集 DNSFilter 日志

支持的平台:

本文档介绍了如何配置 DNSFilter,以使用 HTTP 事件收集器 (HEC) 协议通过 Webhook 将日志推送到 Google Security Operations。

DNSFilter 是一款 AI 赋能的 DNS 安全解决方案,可提供威胁防护、内容过滤和网络可见性。借助数据导出功能,您可以通过 HTTP 事件收集器 (HEC) API 将 DNS 查询日志数据自动导出到 SIEM 平台,从而支持实时安全监控和合规性报告。

准备工作

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

  • Google SecOps 实例
  • 拥有管理员权限或更高级别的权限,可访问 DNSFilter 信息中心
  • 已启用 DNSFilter 数据导出附加服务功能(作为付费附加服务提供,适用于 Basic、Pro 和 Enterprise 方案)
  • 对 Google Cloud Console 的访问权限(用于创建 API 密钥)

在 Google SecOps 中创建 Webhook Feed

创建 Feed

  1. 依次前往 SIEM 设置> Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 DNSFilter HEC Feed)。
  5. 选择 Webhook 作为来源类型
  6. 选择 DNSFILTER 作为日志类型
  7. 点击下一步
  8. 为以下输入参数指定值:
    • 拆分分隔符(可选):留空,因为每个 HEC 请求都包含格式正确的事件
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签
  9. 点击下一步
  10. 最终确定界面中查看新的 Feed 配置,然后点击提交

生成并保存密钥

创建 Feed 后,您必须生成用于身份验证的密钥:

  1. 在 Feed 详情页面上,点击生成密钥
  2. 系统会显示一个包含密钥的对话框。
  3. 复制并妥善保存此密钥。

获取 Feed 端点网址

  1. 前往相应 Feed 的详细信息标签页。
  2. 端点信息部分,复制 Feed 端点网址
  3. 网址格式为:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. 保存此网址以供后续步骤使用。

  5. 点击完成

创建 Google Cloud API 密钥

Google SecOps 需要使用 API 密钥进行身份验证。在 Google Cloud Console 中创建受限 API 密钥。

创建 API 密钥

  1. 前往 Google Cloud 控制台的“凭据”页面
  2. 选择您的项目(与您的 Google SecOps 实例关联的项目)。
  3. 点击创建凭据 > API 密钥
  4. 系统会创建一个 API 密钥,并在对话框中显示该密钥。
  5. 点击修改 API 密钥以限制密钥。

限制 API 密钥

  1. API 密钥设置页面中:名称:输入描述性名称(例如 Google SecOps DNSFilter Webhook API Key
  2. API 限制下:
    1. 选择限制密钥
    2. 选择 API 下拉菜单中,搜索并选择 Google SecOps API(或 Chronicle API)。
  3. 点击保存
  4. 从页面顶部的 API 密钥字段复制 API 密钥值。
  5. 安全地保存 API 密钥。

配置 DNSFilter 数据导出

构建 HEC 端点网址

  • 将 Google SecOps 端点网址和 API 密钥组合在一起,以创建 HEC 网址:

    <ENDPOINT_URL>?key=<API_KEY>
    
  • 示例:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
    

在 DNSFilter 中配置数据导出

  1. 登录 DNSFilter 信息中心
  2. 依次前往工具 > 数据导出
  3. 导出目的地部分中,选择 HTTP Event Collector (HEC)
  4. HEC 配置部分中,输入以下内容:
    • HTTP 事件收集器网址:粘贴上一步中的完整端点网址(包含 API 密钥)。
    • 有效事件收集器令牌:粘贴在创建 Google SecOps Feed 期间生成的密钥。
  5. 点击保存配置
  6. DNSFilter 将测试连接,如果配置正确,则会显示一条成功消息。

验证数据注入

  1. DNSFilter 信息中心中,依次前往工具 > 数据导出
  2. 验证状态是否显示为有效已连接
  3. 在 Google SecOps 控制台中,依次前往 SIEM 设置 > Feed
  4. 找到您的 DNSFilter Feed,并验证状态是否显示为有效
  5. 点击 Feed 名称即可查看详情。
  6. 检查已注入的日志指标,确认数据正在流动。
  7. 如需搜索 DNSFilter 事件,请前往搜索,然后运行以下查询:

    metadata.log_type = "DNSFILTER"
    

身份验证方法参考

Google SecOps Webhook Feed 支持多种身份验证方法。DNSFilter HEC 集成使用混合方法。

使用的方法:混合(网址 + 标头)

DNSFilter 会在网址中发送 API 密钥,并在请求标头中发送密钥(HEC 令牌)。

  • 请求格式

    POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1
    Content-Type: application/json
    Authorization: Splunk <SECRET_KEY>
    
    {
        "event": "data",
        "timestamp": "2025-01-15T10:30:00Z"
    }
    

替代方法:自定义标头

如果配置自定义应用以将日志发送到 Google SecOps,请使用此方法以提高安全性。

  • 请求格式

    POST <ENDPOINT_URL> HTTP/1.1
    Content-Type: application/json
    x-goog-chronicle-auth: <API_KEY>
    x-chronicle-auth: <SECRET_KEY>
    
    {
        "event": "data",
        "timestamp": "2025-01-15T10:30:00Z"
    }
    
  • 优点:

    • API 密钥和密文在网址中不可见
    • 更安全(标头不会记录在 Web 服务器访问日志中)
    • 供应商支持时的首选方法

身份验证标头名称

Google SecOps 接受以下用于身份验证的 HTTP 标头名称:

  • 对于 API 密钥

    • x-goog-chronicle-auth(推荐)
    • X-Goog-Chronicle-Auth(不区分大小写)
  • 对于密钥

    • x-chronicle-auth(推荐)
    • X-Chronicle-Auth(不区分大小写)
    • Authorization: Splunk <TOKEN>(HEC 兼容性)

Webhook 限制和最佳实践

请求限制

限制
最大请求大小 4 MB
最大 QPS(每秒查询次数) 15000
请求超时 30 秒
重试行为 自动(使用指数退避算法

最佳做法

  • 监控导出状态:定期检查 DNSFilter 信息中心内的数据导出状态,以确保数据持续流动。
  • API 密钥轮替:定期轮替 Google Cloud API 密钥,以确保安全。
  • 密钥管理:安全地存储 Google SecOps 密钥,并在密钥泄露时重新生成。
  • 数据保留:在 DNSFilter 和 Google SecOps 中配置适当的数据保留政策。
  • 提醒配置:在 Google SecOps 中针对关键 DNS 安全事件设置提醒。

问题排查

连接测试失败

如果 DNSFilter 数据导出配置测试失败:

  1. 验证 HEC 网址是否正确,以及是否包含 API 密钥参数。
  2. 验证密钥(HEC 令牌)是否已正确复制,没有多余的空格。
  3. 检查 Google Cloud API 密钥是否已启用 Chronicle API 访问权限。
  4. 验证 Google SecOps Feed 是否处于有效状态。
  5. 检查从 DNSFilter 到 Google Cloud 端点的网络连接。

Google SecOps 中未显示任何数据

如果连接成功,但未显示任何数据,请执行以下操作:

  1. 验证 DNS 查询是否正在 DNSFilter 部署中生成。
  2. 检查 DNSFilter 查询日志,确认流量正在处理。
  3. 在 Google SecOps 中,搜索 metadata.log_type = "DNSFILTER" 以验证注入。
  4. 在 Google SecOps 中查看 Feed 的提取的日志指标。
  5. 查看 Feed 的错误日志,了解是否存在任何注入错误。

数据导出返回错误消息

常见错误原因:

  • 凭据无效:API 密钥或密钥不正确或已过期。
  • 区域不匹配:Google SecOps 端点网址区域与您的实例不匹配。
  • 权限:API 密钥未启用 Chronicle API 访问权限。
  • 网络问题:防火墙或代理阻止出站 HTTPS 连接。

UDM 映射表

日志字段 UDM 映射 逻辑
时间 metadata.collected_timestamp 使用日期格式 yyyy-MM-dd HH:mm:ss Z UTC 进行转换
metadata.event_type 如果 principal_ip_present、principal_hostname_present 或 principal_mac_present 为 true,则设置为“STATUS_UPDATE”,否则设置为“GENERIC_EVENT”
question_type network.dns.questions 使用 DNS 记录类型映射将 question_type 转换为 question.type,然后合并到数组中
代码 network.dns.response_code 使用 DNS 响应代码映射进行转换
协议 network.ip_protocol 使用 IP 协议映射进行转换
客户端 principal.hostname 直接复制值
request_address、ip4、ip6、source_addresses principal.ip 合并自 request_address(提取的 IP)、ip4(提取的 IP)、ip6(提取的 IP)以及从 source_addresses 数组中提取的 IP
区域 principal.location.country_or_region 直接复制值
clientMac principal.mac 如果与 MAC 正则表达式匹配,则直接复制值
clientID principal.resource.product_object_id 直接复制值
用户名 principal.user.user_display_name 直接复制值
user_id principal.user.userid 直接复制值
code, original_code, clientType, collection, network_name, networkID, collectionID, policy, policyID, scheduled_policy, scheduled_policyID, sec_cats, sec_allow_cats, block_cats, block_allow_cats, threat, allowed, method, 组织, organizationID, applicationID, application_name, application_categoryID, application_category_name security_result.detection_fields 来自各种源字段的合并标签(以键值对形式表示)
域名 target.administrative_domain 直接复制值
fqdn target.domain.name 直接复制值
metadata.product_name 设置为“DNSFILTER”
metadata.vendor_name 设置为“DNSFILTER”

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