收集 DNSFilter 日志

解析器版本: 1.0

支持:

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

DNSFilter 是一种由 AI 赋能的 DNS 安全解决方案,可提供威胁防护、内容过滤器和网络可见性。借助数据导出功能,可以通过 HTTP Event Collector (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 后,您必须生成密钥以进行身份验证:

  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 密钥。
    • 有效 Event Collector 令牌:粘贴在 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 接受以下标头名称进行身份验证:

  • 对于 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 专业人士的解答。