收集 DNSFilter 日志

解析器版本:1.0

支持范围:

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

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

准备工作

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

  • Google SecOps 实例
  • 拥有管理员或更高级别权限,可访问 DNSFilter 信息中心
  • DNSFilter 数据导出插件功能已启用(作为付费插件,适用于基本版、专业版和企业版方案)
  • 拥有对 Google Cloud Console 的访问权限(用于创建 API 密钥)

在 Google SecOps 中创建 webhook Feed

创建 Feed

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

生成并保存密钥

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

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

获取 Feed 端点网址

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

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    其中,{region} 是 Google SecOps 实例所在的区域(例如 us、europe 或 asia-southeast1),{parent} 是资源路径,格式为 projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>。

  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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...
    

在 DNSFilter 中配置数据导出

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

验证数据注入

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

    metadata.log_type = "DNSFILTER"
    

身份验证方法参考

Google SecOps 网络钩子 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 密钥和 Secret 在网址中不可见
    • 更安全(标头不会记录在 Web 服务器访问日志中)
    • 供应商支持的首选方法

身份验证标头名称

Google SecOps 接受以下标头名称进行身份验证:

  • 对于 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. 验证 DNSFilter 部署中是否正在生成 DNS 查询。
  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 专业人士的解答。