收集 Passive DNS 日志

支持的环境:

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

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

准备工作

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

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

创建 Google Cloud Storage 存储桶

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

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

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

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

使用由 Cloud Scheduler 触发的 Cloud Build 运行容器化作业,该作业从您的提供商处提取 Passive 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 Editor (用于运行 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 密钥:

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

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

      设置
      名称 passive-dns-export-daily
      区域 选择与您的 GCS 存储桶相同的区域
      频率 0 3 * * *(世界协调时间 (UTC) 凌晨 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(适用于本地数据存储区)

如果 Passive DNS 数据存储在本地文件系统上,请使用 Storage Transfer Service 和转移代理。

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

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

检索 Google SecOps 服务帐号

  1. 前往 SIEM 设置 > Feed
  2. 点击 Add New Feed (添加新 Feed)。
  3. 点击配置单个 Feed
  4. Feed 名称 字段中,输入 Feed 的名称(例如 Passive DNS Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型
  6. 选择 Passive DNS 作为日志类型
  7. 点击 Get Service Account (获取服务账号)。
  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. 点击 Add New Feed (添加新 Feed)。
  3. 点击配置单个 Feed
  4. Feed 名称 字段中,输入 Feed 的名称(例如 Passive DNS Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型
  6. 选择 Passive DNS 作为日志类型
  7. 点击下一步
  8. 为以下输入参数指定值:

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

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

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

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

    • 资产命名空间资产命名空间

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

  9. 点击下一步

  10. 最终确定 屏幕中检查新 Feed 配置,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
hostname intermediary.hostname 直接复制值
timestamp_s metadata.event_timestamp 解析为 UNIX 时间戳
metadata.event_type 设置为“NETWORK_DNS”
network.application_protocol 设置为“DNS”
answer network.dns.answers.data 从答案中获取值,并移除尾随句点
ttl network.dns.answers.ttl 转换为整数
class network.dns.questions.class 映射到数值(IN 为 1,CH 为 3,HS 为 4)
query network.dns.questions.name 从查询中获取值,并移除尾随句点
type network.dns.questions.type 使用 DNS 类型映射从类型(大写)映射到数值
client principal.ip 直接复制值
server target.ip 直接复制值
metadata.product_name 设置为“Passive DNS”

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