收集 Google Cloud DNS 威胁检测器日志

支持的平台:

本文档介绍了如何使用 Google Cloud Storage V2 将 Google Cloud DNS 威胁检测器日志注入到 Google Security Operations。

DNS Armor 由 Infoblox 提供支持,是一项全代管式服务,可为您的 Google Cloud 工作负载提供 DNS 层安全性。其高级威胁检测器旨在在攻击链的最早阶段(即 DNS 查询)检测恶意活动,而不会增加运维复杂性或性能开销。检测到威胁后,您可以通过 Cloud Logging 获得有关 DNS 威胁的富有实用价值的分析洞见。

为项目启用 DNS 威胁检测器后,DNS Armor 会安全地将网络绑定 DNS 查询日志发送到由 Infoblox 提供支持的基于 Google Cloud 的分析引擎。该引擎结合使用威胁情报 Feed 和基于 AI 的行为分析来识别威胁。检测到的任何恶意活动都会生成 DNS Armor 威胁日志,然后该日志会发送回您的项目并写入 Cloud Logging,供您查看和采取行动。

准备工作

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

  • Google SecOps 实例。
  • 已启用 Cloud Storage API 的 GCP 项目。
  • 创建和管理 GCS 存储分区的权限。
  • 管理 GCS 存储分区上的 IAM 政策的权限。
  • 您的项目已启用 Network Security API。
  • 启用 DNS 威胁检测器所需的 IAM 角色。
  • 查看 DNS 威胁日志的权限:resourcemanager.projects.getresourcemanager.projects.listnetworksecurity.dnsThreatDetectors.getnetworksecurity.dnsThreatDetectors.list 或角色 roles/networksecurity.dnsThreatDetectorViewerroles/logging.viewer

创建 Google Cloud Storage 存储分区

  1. 转到 Google Cloud Console
  2. 选择您的项目或创建新项目。
  3. 在导航菜单中,依次前往 Cloud Storage > 存储分区
  4. 点击创建存储分区
  5. 提供以下配置详细信息:

    设置
    为存储分区命名 输入一个全局唯一的名称(例如 dns-threat-detector-logs
    位置类型 根据您的需求进行选择(区域级、双区域级、多区域级)
    位置 选择相应位置(例如 us-central1
    存储类别 标准(建议用于经常访问的日志)
    访问权限控制 统一(推荐)
    保护工具 可选:启用对象版本控制或保留政策
  6. 点击创建

创建 DNS 威胁检测器

本部分介绍了如何创建 DNS 威胁检测器,以监控 VPC 网络中是否存在恶意、网络绑定 DNS 活动。

一个项目只能启用一个 DNS 威胁检测器。

使用 Google Cloud 控制台

  1. 在 Google Cloud 控制台中,前往高级威胁检测页面。
  2. 点击创建 DNS 威胁检测器
  3. 输入 DNS 威胁检测器的名称。
  4. 选择项目中的所有 VPC 网络
  5. 点击创建

使用 gcloud 命令行工具

或者,使用 gcloud 命令创建 DNS 威胁检测器:

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--project=PROJECT_ID \
--provider="infoblox"

替换: - my-dns-threat-detector:DNS 威胁检测器的名称。 - PROJECT_ID:您的项目 ID。

配置 Cloud Logging 以将 DNS 威胁检测器日志导出到 GCS

DNS Armor 威胁日志会写入 Cloud Logging。您必须配置日志接收器,才能将这些日志导出到您的 GCS 存储桶。

  1. Google Cloud 控制台中,依次前往 Logging > 日志路由器
  2. 点击创建接收器
  3. 提供以下配置详细信息:
    • 接收器名称:输入一个描述性名称(例如 dns-threat-detector-to-gcs)。
    • 接收器说明:可选说明。
  4. 点击下一步
  5. 选择接收器服务部分中:
    • 接收器服务:选择 Cloud Storage 存储桶
    • 选择 Cloud Storage 存储桶:从下拉菜单中选择存储桶(例如 dns-threat-detector-logs)。
  6. 点击下一步
  7. 选择要包含在接收器中的日志部分中,输入以下过滤条件查询:

    resource.type="networksecurity.googleapis.com/DnsThreatDetector"
    logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"
    

PROJECT_ID 替换为您的 GCP 项目 ID。

  1. 点击下一步
  2. 检查配置,然后点击创建接收器

使用 gcloud 命令行工具

或者,使用 gcloud 命令创建日志接收器:

gcloud logging sinks create dns-threat-detector-to-gcs \
    gs://dns-threat-detector-logs \
    --log-filter='resource.type="networksecurity.googleapis.com/DnsThreatDetector" AND logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"' \
    --project=PROJECT_ID

替换: - dns-threat-detector-logs:您的 GCS 存储桶名称。 - PROJECT_ID:您的 GCP 项目 ID。

检索 Google SecOps 服务账号

Google SecOps 使用唯一的服务账号从您的 GCS 存储分区中读取数据。您必须授予此服务账号对您的存储分区的访问权限。

在 Google SecOps 中配置 Feed 以注入 Google Cloud DNS Threat Detector 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 GCP DNS Threat Detector Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型
  6. 选择 Google Cloud DNS 威胁检测器作为日志类型

  7. 点击获取服务账号

  8. 系统会显示一个唯一的服务账号电子邮件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. 复制此电子邮件地址。您将在下一步骤中用到它。

  10. 点击下一步

  11. 为以下输入参数指定值:

    • 存储分区网址:输入带有前缀路径的 GCS 存储分区 URI:

      gs://dns-threat-detector-logs/
      

      • dns-threat-detector-logs:您的 GCS 存储分区名称。
    • 源删除选项:根据您的偏好选择删除选项:
      • 永不:永不删除转移后的任何文件(建议用于测试)。
      • 删除已转移的文件:在成功转移后删除文件。
      • 删除已转移的文件和空目录:在成功转移后删除文件和空目录。
    • 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签。
  12. 点击下一步

  13. 最终确定界面中查看新的 Feed 配置,然后点击提交

向 Google SecOps 服务账号授予 IAM 权限

Google SecOps 服务账号需要对您的 GCS 存储分区具有 Storage Object Viewer 角色。

  1. 前往 Cloud Storage > 存储分区
  2. 点击您的存储分区名称(例如 dns-threat-detector-logs)。
  3. 前往权限标签页。
  4. 点击授予访问权限
  5. 提供以下配置详细信息:
    • 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址。
    • 分配角色:选择 Storage Object Viewer
  6. 点击保存

UDM 映射表

日志字段 UDM 映射 逻辑
record.jsonPayload.dnsQuery.responseCode, record.jsonPayload.dnsQuery.authAnswer, record.jsonPayload.dnsQuery.queryTime, record.jsonPayload.partnerId, record.jsonPayload.detectionTime, record.logName additional.fields 将值复制到附加映射,然后合并为具有 value.string_value 的映射条目(如果不为空)
record.receiveTimestamp metadata.collected_timestamp 解析为 ISO8601 时间戳
metadata.event_type 如果具有 has_principal 和 has_target,则设置为“NETWORK_CONNECTION”;如果具有 has_principal,则设置为“STATUS_UPDATE”;否则设置为“GENERIC_EVENT”
record.timestamp metadata.event_timestamp 解析为 ISO8601 时间戳
record.insertId metadata.product_log_id 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.rdata network.dns.answers 值已复制到 answer.data,然后合并为数组(如果非空)
record.jsonPayload.dnsQuery.queryName、record.jsonPayload.dnsQuery.queryType network.dns.questions questions.name 来自 queryName,questions.type 从 queryType 字符串映射到整数,然后合并为数组(如果非空)
record.jsonPayload.dnsQuery.responseCode network.dns.response_code 使用预定义表从字符串映射到整数
record.jsonPayload.dnsQuery.protocol network.ip_protocol 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.sourceIp principal.asset.ip 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.sourceIp principal.ip 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.location principal.location.country_or_region 如果值不为空,则直接复制
record.resource.labels.location principal.location.name 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.vmProjectNumber, record.jsonPayload.dnsQuery.projectNumber principal.resource.attribute.labels 将值复制到附加映射,然后合并为映射条目(如果值不为空)
record.jsonPayload.dnsQuery.vmInstanceId principal.resource.id 如果值不为空,则直接复制
record.resource.labels.id principal.resource.product_object_id 如果值不为空,则直接复制
record.resource.type principal.resource.type 如果值不为空,则直接复制
security_result 从内置的 security_result 地图合并
record.jsonPayload.threatInfo.confidence security_result.confidence 如果匹配 (?i)Low,则映射到 LOW_CONFIDENCE;如果匹配 (?i)Medium,则映射到 MEDIUM_CONFIDENCE;如果匹配 (?i)High,则映射到 HIGH_CONFIDENCE
record.jsonPayload.threatInfo.threatDescription security_result.description 如果值不为空,则直接复制
record.jsonPayload.threatInfo.threatIndicatorType, record.jsonPayload.threatInfo.threatIndicator, record.jsonPayload.threatInfo.threatFeed, record.jsonPayload.threatInfo.category, record.jsonPayload.threatInfo.type, record.jsonPayload.threatInfo.threat, record.jsonPayload.threatInfo.severity, record.resource.labels.resource_container security_result.detection_fields 将值复制到附加映射,然后合并为映射条目(如果值不为空)
record.severity security_result.severity 如果为 (?i)Low,则映射到 LOW;如果为 (?i)(Informational|Info),则映射到 INFORMATIONAL;如果为 (?i)Medium,则映射到 MEDIUM;如果为 (?i)Critical,则映射到 CRITICAL;如果为 (?i)High,则映射到 HIGH
record.jsonPayload.threatInfo.threatId security_result.threat_id 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.destinationIp target.asset.ip 如果值不为空,则直接复制
record.jsonPayload.dnsQuery.destinationIp target.ip 如果值不为空,则直接复制
metadata.vendor_name 设置为“Google Cloud”
metadata.product_name 设置为“Google Cloud DNS 威胁检测器”

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