收集 Passive DNS 日志

支持的平台:

本文档介绍了如何使用 Google Cloud Storage V2 将被动 DNS 日志注入到 Google Security Operations。

被动 DNS 是一种 DNS 情报数据源,可捕获历史 DNS 解析记录,用于威胁分析和网域调查。由于数据通常以文件形式收集和存储,因此您必须将这些文件上传到 Google Cloud Storage (GCS) 存储桶,然后配置 Google SecOps Feed 以注入这些文件。

准备工作

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

  • Google SecOps 实例。
  • 启用了 Cloud Storage API 的 Google Cloud 项目。
  • 创建和管理 GCS 存储桶的权限。
  • 管理 GCS 存储桶的 IAM 政策的权限。
  • 对被动 DNS 数据文件的访问权限(例如,DNSDB、Farsight 或其他被动 DNS 提供商)。
  • 以支持的格式(例如 JSON 或 CSV)导出的被动 DNS 数据。

创建 Google Cloud Storage 存储桶

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

    设置 值
    为存储桶命名 输入一个全局唯一的名称(例如 passive-dns-logs)
    位置类型 根据您的需求进行选择(区域级、双区域级、多区域级)
    位置 选择离您的 Google SecOps 实例最近的位置(例如 us-central1)
    存储类别 标准(建议用于频繁访问的日志)
    访问权限控制 均匀(推荐)
    保护工具 可选:启用对象版本控制或保留政策
  6. 点击创建。

配置将被动 DNS 数据自动导出到 GCS

被动 DNS 数据通常以 DNS 情报提供商(例如 Farsight DNSDB、DomainTools 或 Cisco Umbrella Investigate)导出的文件形式提供。如需使 GCS 中的数据保持最新状态,请使用以下方法之一配置自动化导出流水线。

使用由 Cloud Scheduler 触发的 Cloud Build 来运行容器化作业,该作业会从您的提供商处提取被动 DNS 数据并将其写入 GCS。

  1. 为导出作业创建服务账号:

    1. 在 GCP 控制台中,依次前往 IAM 和管理 > 服务账号。
    2. 点击创建服务账号。
    3. 提供以下配置详细信息:
      • 服务账号名称:输入 passive-dns-export-sa
      • 服务账号说明:输入 Service account for automated Passive DNS data export to GCS
    4. 点击创建并继续。
    5. 添加以下角色:
      • Storage Object Admin(用于将文件写入 GCS)
      • Cloud Build 编辑者(用于运行 Cloud Build 作业)
    6. 点击完成。
  2. 创建 Cloud Build 配置文件 (cloudbuild.yaml):

    steps:
      - name: 'gcr.io/cloud-builders/gcloud'
        entrypoint: 'bash'
        args:
          - '-c'
          - |
            apt-get update && apt-get install -y curl jq
            # Fetch Passive DNS data from your provider
            # Replace with the actual API call for your provider
            # Example for Farsight DNSDB:
            TIMESTAMP=$(date -u +%Y%m%d_%H%M%S)
            curl -s -H "X-API-Key: $${PDNS_API_KEY}" \
              "https://api.dnsdb.info/dnsdb/v2/lookup/rrset/name/*.example.com" \
              -o /workspace/passive_dns_$${TIMESTAMP}.json
            # Upload to GCS
            gcloud storage cp /workspace/passive_dns_$${TIMESTAMP}.json \
              gs://${_BUCKET_NAME}/passive-dns/
    substitutions:
      _BUCKET_NAME: 'passive-dns-logs'
    
  3. 将 API 密钥存储为 Secret Manager Secret:

    1. 在 GCP 控制台中,依次前往安全性 > Secret Manager。
    2. 点击创建 Secret。
    3. 输入 pdns-api-key 作为密文名称。
    4. 输入您的被动 DNS 提供商 API 密钥作为密钥值。
    5. 点击创建。
  4. 创建 Cloud Scheduler 作业以触发构建:

    1. 在 GCP 控制台中,前往 Cloud Scheduler。
    2. 点击创建作业。
    3. 提供以下配置详细信息:

      设置 值
      名称 passive-dns-export-daily
      区域 选择与您的 GCS 存储桶相同的区域
      频率 0 3 * * *(每天凌晨 3:00 [世界协调时间])
      时区 世界协调时间 (UTC)(推荐)
      目标类型 HTTP
      网址 https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/builds
      HTTP 方法 POST
      身份验证标头 添加 OAuth 令牌
      服务账号 passive-dns-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
    4. 点击创建。

方法 2:Storage Transfer Service(适用于本地数据存储区)

如果被动 DNS 数据存储在本地文件系统中,请使用带有 Transfer Agent 的 Storage Transfer Service。

  1. 在 GCP 控制台中,前往 Storage Transfer Service。
  2. 点击创建转移作业。
  3. 选择 POSIX 文件系统作为来源。
  4. 按照说明在有权访问被动 DNS 数据文件的机器上安装 Storage Transfer Agent。
  5. 配置转移作业:

    设置 值
    源目录 包含被动 DNS 数据文件的目录的路径
    目标存储桶 passive-dns-logs
    目标路径 passive-dns/
    时间表 设置周期性时间表(例如每天)
  6. 点击创建。

检索 Google SecOps 服务账号

  1. 前往 SIEM 设置 > Feed。
  2. 点击添加新 Feed。
  3. 点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Passive DNS Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型。
  6. 选择被动 DNS 作为日志类型。
  7. 点击获取服务账号。
  8. 系统会显示一个唯一的服务账号电子邮件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. 复制此电子邮件地址,以便在下一步中使用。

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

Google SecOps 服务账号需要您的 GCS 存储桶的 Storage Object Viewer 角色。

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

配置 Google SecOps Feed

  1. 前往 SIEM 设置 > Feed。
  2. 点击添加新 Feed。
  3. 点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Passive DNS Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型。
  6. 选择被动 DNS 作为日志类型。
  7. 点击下一步。
  8. 为以下输入参数指定值:

    • 存储桶网址:输入 GCS 存储桶 URI:

      gs://passive-dns-logs/passive-dns/
      
      • 将 passive-dns-logs 替换为您的 GCS 存储桶名称。
      • 将 passive-dns 替换为您配置的前缀路径。
    • 来源删除选项:根据您的偏好选择删除选项:

      • 永不:转移后永不删除任何文件(建议用于测试)。
      • 删除已转移的文件:成功转移后删除文件。
      • 删除已转移的文件和空目录:成功转移后删除文件和空目录。

    • 文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)。

    • 资源命名空间:资源命名空间。

    • 注入标签:要应用于此 Feed 中事件的标签。

  9. 点击下一步。

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

UDM 映射表

日志字段 UDM 映射 逻辑
主机名 intermediary.hostname 直接复制值
timestamp_s metadata.event_timestamp 解析为 UNIX 时间戳
metadata.event_type 设置为“NETWORK_DNS”
network.application_protocol 设置为“DNS”
答案 network.dns.answers.data 移除末尾的点号后答案中的值
ttl network.dns.answers.ttl 已转换为整数
class network.dns.questions.class 映射到数值(1 表示印度,3 表示瑞士,4 表示西班牙)
查询 network.dns.questions.name 移除末尾的点后,查询中的值
类型 network.dns.questions.type 使用 DNS 类型映射从类型(大写)映射到数值
客户端 principal.ip 直接复制值
服务器 target.ip 直接复制值
metadata.product_name 设置为“Passive DNS”

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