收集 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 存储桶
- 前往 Google Cloud 控制台。
- 选择您的项目或创建一个新项目。
- 在导航菜单中,前往 Cloud Storage > 存储分区。
- 点击创建存储桶 。
提供以下配置详细信息:
设置 值 指定存储桶的名称 输入全局唯一的名称(例如 passive-dns-logs)位置类型 根据您的需求进行选择(区域、双区域、多区域) 位置 选择离您的 Google SecOps 实例最近的位置(例如 us-central1)存储类别 标准(建议用于经常访问的日志) 访问权限控制 统一(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建 。
配置将 Passive DNS 数据自动导出到 GCS
Passive DNS 数据通常以 DNS 情报提供商(例如 Farsight DNSDB、DomainTools 或 Cisco Umbrella Investigate)导出的文件的形式提供。如需使 GCS 中的数据保持最新,请使用以下方法之一配置自动导出流水线。
方法 1:Cloud Scheduler 和 Cloud Build(推荐)
使用由 Cloud Scheduler 触发的 Cloud Build 运行容器化作业,该作业从您的提供商处提取 Passive DNS 数据并将其写入 GCS。
为导出作业创建服务帐号:
- 在 GCP 控制台 中,前往 IAM 和管理 > 服务账号。
- 点击创建服务账号 。
- 提供以下配置详细信息:
- 服务账号名称:输入
passive-dns-export-sa - 服务账号说明:输入
Service account for automated Passive DNS data export to GCS
- 服务账号名称:输入
- 点击创建并继续 。
- 添加以下角色:
- Storage Object Admin (用于将文件写入 GCS)
- Cloud Build Editor (用于运行 Cloud Build 作业)
- 点击完成 。
创建 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'将 API 密钥存储为 Secret Manager 密钥:
- 在 GCP 控制台 中,前往安全性 > Secret Manager。
- 点击创建密钥 。
- 输入
pdns-api-key作为密钥名称。 - 输入您的 Passive DNS 提供商 API 密钥作为密钥值。
- 点击创建 。
创建 Cloud Scheduler 作业以触发构建:
- 在 GCP 控制台 中,前往 Cloud Scheduler。
- 点击创建作业 。
提供以下配置详细信息:
设置 值 名称 passive-dns-export-daily区域 选择与您的 GCS 存储桶相同的区域 频率 0 3 * * *(世界协调时间 (UTC) 凌晨 3:00,每天一次)时区 UTC(推荐) 目标类型 HTTP 网址 https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsHTTP 方法 POST 身份验证标头 添加 OAuth 令牌 服务账号 passive-dns-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com点击创建 。
方法 2:Storage Transfer Service(适用于本地数据存储区)
如果 Passive DNS 数据存储在本地文件系统上,请使用 Storage Transfer Service 和转移代理。
- 在 GCP 控制台 中,前往 Storage Transfer Service 。
- 点击创建转移作业 。
- 选择 POSIX 文件系统 作为来源。
- 按照说明在有权访问 Passive DNS 数据文件的机器上安装 Storage Transfer Agent。
配置转移作业:
设置 值 源目录 包含 Passive DNS 数据文件的目录的路径 目标存储桶 passive-dns-logs目标路径 passive-dns/时间表 设置周期性时间表(例如每天) 点击创建 。
检索 Google SecOps 服务帐号
- 前往 SIEM 设置 > Feed。
- 点击 Add New Feed (添加新 Feed)。
- 点击配置单个 Feed 。
- 在 Feed 名称 字段中,输入 Feed 的名称(例如
Passive DNS Logs)。 - 选择 Google Cloud Storage V2 作为来源类型 。
- 选择 Passive DNS 作为日志类型 。
- 点击 Get Service Account (获取服务账号)。
系统会显示一个唯一的服务帐号电子邮件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此电子邮件地址,以便在下一步中使用。
向 Google SecOps 服务帐号授予 IAM 权限
Google SecOps 服务帐号需要对您的 GCS 存储桶具有 Storage Object Viewer 角色。
- 前往 Cloud Storage > 存储分区。
- 点击您的存储桶名称(例如
passive-dns-logs)。 - 前往权限 标签页。
- 点击授予访问权限 。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务帐号电子邮件地址(例如
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)。 - 分配角色:选择 Storage Object Viewer。
- 添加主账号:粘贴 Google SecOps 服务帐号电子邮件地址(例如
点击保存 。
配置 Google SecOps Feed
- 前往 SIEM 设置 > Feed。
- 点击 Add New Feed (添加新 Feed)。
- 点击配置单个 Feed 。
- 在 Feed 名称 字段中,输入 Feed 的名称(例如
Passive DNS Logs)。 - 选择 Google Cloud Storage V2 作为来源类型 。
- 选择 Passive DNS 作为日志类型 。
- 点击下一步 。
为以下输入参数指定值:
存储桶网址:输入 GCS 存储桶 URI:
gs://passive-dns-logs/passive-dns/- 将
passive-dns-logs替换为您的 GCS 存储桶名称。 - 将
passive-dns替换为您配置的前缀路径。
- 将
来源删除选项:根据您的偏好选择删除选项:
- 永不:转移后永不删除任何文件(建议用于测试)。
- 删除已转移的文件:成功转移后删除文件。
删除已转移的文件和空目录:成功转移后删除文件和空目录。
文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)。
资产命名空间:资产命名空间。
注入标签:要应用于此 Feed 中的事件的标签。
点击下一步 。
在最终确定 屏幕中检查新 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” |