パッシブ DNS ログを収集する
このドキュメントでは、Google Cloud Storage V2 を使用してパッシブ DNS ログを Google Security Operations に取り込む方法について説明します。
パッシブ DNS は、脅威分析とドメイン調査のために過去の DNS の解決 レコードをキャプチャする DNS インテリジェンス データソースです。通常、データはファイルとして収集、保存されるため、これらのファイルを Google Cloud Storage(GCS)バケットにアップロードし、Google SecOps フィードを構成して取り込む必要があります。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス。
- Cloud Storage API が有効になっている Google Cloud プロジェクト。
- GCS バケットを作成して管理する権限。
- GCS バケットの IAM ポリシーを管理する権限。
- パッシブ DNS データファイル(DNSDB、Farsight、その他のパッシブ DNS プロバイダなど)へのアクセス。
- サポートされている形式(JSON、CSV など)でエクスポートされたパッシブ DNS データ。
Google Cloud Storage バケットを作成する
- Google Cloud コンソール に移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage] > [バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前を入力します(例: passive-dns-logs)ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン) ロケーション Google SecOps インスタンスに最も近いロケーションを選択します(例: us-central1)ストレージ クラス Standard(頻繁にアクセスするログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
パッシブ DNS データを GCS に自動的にエクスポートするように構成する
通常、パッシブ DNS データは、DNS インテリジェンス プロバイダ(Farsight DNSDB、DomainTools、Cisco Umbrella Investigate など)からエクスポートされたファイルとして入手できます。GCS 内のデータを最新の状態に保つには、次のいずれかの方法で自動エクスポート パイプラインを構成します。
オプション 1: Cloud Build を使用した Cloud Scheduler(推奨)
Cloud Scheduler によってトリガーされる Cloud Build を使用して、プロバイダからパッシブ DNS データを取得して GCS に書き込むコンテナ化されたジョブを実行します。
エクスポート ジョブのサービス アカウントを作成します。
- [GCP Console] で、[IAM と管理 > サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成情報を提供します。
- サービス アカウント名:
passive-dns-export-saと入力します。 - サービス アカウントの説明:
Service account for automated Passive DNS data export to GCSと入力します。
- サービス アカウント名:
- [作成して続行] をクリックします。
- 次の役割を追加します。
- ストレージ オブジェクト管理者 (GCS にファイルを書き込むため)
- Cloud Build 編集者 (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 Console] で、[セキュリティ > Secret Manager] に移動します。
- [シークレットの作成] をクリックします。
- シークレット名として「
pdns-api-key」と入力します。 - パッシブ DNS プロバイダの API キーをシークレット値として入力します。
- [作成] をクリックします。
ビルドをトリガーする Cloud Scheduler ジョブを作成します。
- [GCP Console] で、[Cloud Scheduler] に移動します。
- [ジョブを作成] をクリックします。
次の構成情報を提供してください。
設定 値 名前 passive-dns-export-dailyリージョン GCS バケットと同じリージョンを選択します。 周波数 0 3 * * *(毎日午前 3 時(UTC))タイムゾーン UTC(推奨) ターゲット タイプ HTTP URL 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(オンプレミス データストアの場合)
パッシブ DNS データがオンプレミス ファイル システムに保存されている場合は、Storage Transfer Service と転送エージェントを使用します。
- [GCP Console] で、[Storage Transfer Service] に移動します。
- [転送ジョブを作成] をクリックします。
- 転送元として [POSIX ファイル システム] を選択します。
- 手順に沿って、パッシブ DNS データファイルにアクセスできるマシンに Storage Transfer Agent をインストールします。
転送ジョブを構成します。
設定 値 ソース ディレクトリ パッシブ DNS データファイルを含むディレクトリへのパス 宛先バケット passive-dns-logs宛先パス passive-dns/スケジュール 繰り返しのスケジュールを設定します(例: 毎日) [作成] をクリックします。
Google SecOps サービス アカウントを取得する
- [SIEM 設定] > [フィード] に移動します。
- [新しいフィードを追加] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Passive DNS Logs)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [パッシブ DNS] を選択します。
- [サービス アカウントを取得する] をクリックします。
一意のサービス アカウントのメールアドレスが表示されます。例:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーして、次のステップで使用します。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対するストレージ オブジェクト閲覧者 のロールが必要です。
- [Cloud Storage] > [バケット] に移動します。
- バケット名(
passive-dns-logsなど)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成情報を提供します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレス(
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comなど)を貼り付けます。 - ロールを割り当てる: [ストレージ オブジェクト閲覧者] を選択します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレス(
[保存] をクリックします。
Google SecOps フィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しいフィードを追加] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Passive DNS Logs)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [パッシブ DNS] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
Storage Bucket URL : GCS バケット URI を入力します。
gs://passive-dns-logs/passive-dns/passive-dns-logsは、GCS バケット名に置き換えます。passive-dnsは、構成済みのプレフィックス パスに置き換えます。
Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストにおすすめ)。
- 転送されたファイルを削除する: 転送が成功した後にファイルを削除します。
転送されたファイルと空のディレクトリを削除する: 転送が成功した後にファイルと空のディレクトリを削除します。
Maximum File Age: 過去数日間に変更されたファイルを含めます(デフォルトは 180 日)。
アセットの名前空間: アセットの名前空間。
取り込みラベル: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
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 | 「パッシブ DNS」に設定 |
さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。