DHS IOC のログを収集する
パーサーのバージョン: 1.0
このドキュメントでは、Google Cloud Storage V2 を使用して国土安全保障省(DHS)の IOC ログを Google Security Operations に取り込む方法について説明します。
DHS は、自動インジケーター共有(AIS)プログラムを通じて脅威インテリジェンスを配布し、悪意のある IP アドレス、ドメイン、URL、ファイルハッシュなどのセキュリティ侵害インジケーターを STIX/TAXII 形式で提供しています。AIS は IOC データをダウンロード可能な STIX バンドルとして提供するため、これらのファイルを Google Cloud Storage(GCS)バケットにエクスポートしてから、Google SecOps フィードを構成して取り込む必要があります。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Cloud Storage API が有効になっている Google Cloud プロジェクト
- GCS バケットを作成および管理する権限
- GCS バケットの IAM ポリシーを管理する権限
- TAXII サーバーまたは AIS ポータルにアクセスできる有効な DHS AIS 参加者アカウント
- TAXII サーバー認証用の AIS クライアント証明書と秘密鍵ファイル
Google Cloud Storage バケットを作成する
- Google Cloud コンソールに移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( dhs-ioc-logsなど)を入力します。ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション Google SecOps インスタンスに最も近いロケーションを選択します(例: us-central1)。ストレージ クラス Standard(アクセス頻度の高いログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
DHS IOC データの GCS への自動エクスポートを構成する
DHS は、AIS TAXII サーバーを介して STIX 形式の IOC データを配布します。スケジュールに従ってインジケーターを pull し、GCS に直接書き込むように自動化パイプラインを構成します。
オプション 1: Cloud Build を使用した Cloud Scheduler(推奨)
Cloud Scheduler によってトリガーされる Cloud Build を使用して、AIS TAXII サーバーから STIX バンドルを取得し、GCS に書き込むコンテナ化されたジョブを実行します。
AIS クライアント証明書と鍵を Secret Manager に保存します。
- GCP コンソールで、[セキュリティ> Secret Manager] に移動します。
- [シークレットの作成] をクリックします。
- 2 つの Secret を作成します。
- 名前:
ais-client-cert、値: AIS クライアント証明書 PEM ファイルの内容。 - 名前:
ais-client-key、値: AIS クライアントの秘密鍵 PEM ファイルの内容。
- 名前:
エクスポート ジョブのサービス アカウントを作成します。
- GCP コンソールで、[IAM と管理>サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成情報を指定します。
- サービス アカウント名: 「
dhs-ioc-export-sa」と入力します。 - サービス アカウントの説明:
Service account for automated DHS IOC export to GCSと入力します。
- サービス アカウント名: 「
- [作成して続行] をクリックします。
- 次のロールを追加します。
- Storage オブジェクト管理者(GCS にファイルを書き込むため)
- Cloud Build 編集者(Cloud Build ジョブを実行するため)
- Secret Manager のシークレット アクセサー(AIS 証明書を読み取るため)
- [完了] をクリックします。
Cloud Build 構成ファイル(
cloudbuild.yaml)を作成します。steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | apt-get update && apt-get install -y curl # Retrieve AIS certificates from Secret Manager gcloud secrets versions access latest --secret=ais-client-cert > /tmp/ais-cert.pem gcloud secrets versions access latest --secret=ais-client-key > /tmp/ais-key.pem # Fetch IOC data from AIS TAXII server TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) FROM=$(date -u -d '-60 minutes' +"%Y-%m-%dT%H:%M:%SZ") curl -s --cert /tmp/ais-cert.pem --key /tmp/ais-key.pem \ -H "Accept: application/taxii+json;version=2.1" \ "https://ais2.cisa.dhs.gov/taxii2/ais2/collections/${_COLLECTION_ID}/objects?added_after=$${FROM}" \ -o /workspace/dhs_ioc_$${TIMESTAMP}.json # Upload to GCS gcloud storage cp /workspace/dhs_ioc_$${TIMESTAMP}.json \ gs://${_BUCKET_NAME}/ioc-data/ # Clean up certificates rm -f /tmp/ais-cert.pem /tmp/ais-key.pem substitutions: _BUCKET_NAME: 'dhs-ioc-logs' _COLLECTION_ID: 'YOUR_AIS_COLLECTION_ID'ビルドをトリガーする Cloud Scheduler ジョブを作成します。
- GCP Console で、[Cloud Scheduler] に移動します。
- [ジョブを作成] をクリックします。
次の構成情報を提供してください。
設定 値 名前 dhs-ioc-export-hourlyリージョン GCS バケットと同じリージョンを選択する 周波数 0 * * * *(1 時間ごと)タイムゾーン UTC(推奨) ターゲット タイプ HTTP URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsHTTP メソッド POST Auth ヘッダー OAuth トークンを追加 サービス アカウント dhs-ioc-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com[作成] をクリックします。
オプション 2: cron を使用する Compute Engine VM(代替)
Cloud Build が使用できない場合は、cron ジョブを含む小規模な Compute Engine VM を使用して IOC データを取得し、GCS に書き込みます。
Compute Engine VM を作成する
- GCP Console で、[Compute Engine] > [VM インスタンス] に移動します。
- [インスタンスを作成] をクリックします。
- 小規模なマシンタイプ(
e2-microなど)を選択します。 - [ID と API へのアクセス] で、Storage オブジェクト管理者ロールを持つサービス アカウントを選択します。
- [作成] をクリックします。
VM に SSH 接続し、エクスポート スクリプト(
/opt/dhs-ioc/export.sh)を作成します。#!/usr/bin/env bash set -euo pipefail TAXII_URL="https://ais2.cisa.dhs.gov/taxii2" API_ROOT="ais2" COLLECTION_ID="YOUR_AIS_COLLECTION_ID" CERT="/etc/ais/client-cert.pem" KEY="/etc/ais/client-key.pem" BUCKET="dhs-ioc-logs" TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) FROM=$(date -u -d '-60 minutes' +"%Y-%m-%dT%H:%M:%SZ") curl -s --cert "$CERT" --key "$KEY" \ -H "Accept: application/taxii+json;version=2.1" \ "${TAXII_URL}/${API_ROOT}/collections/${COLLECTION_ID}/objects?added_after=${FROM}" \ -o "/tmp/dhs_ioc_${TIMESTAMP}.json" gcloud storage cp "/tmp/dhs_ioc_${TIMESTAMP}.json" "gs://${BUCKET}/ioc-data/" rm -f "/tmp/dhs_ioc_${TIMESTAMP}.json"スクリプトを実行可能にして、cron でスケジュールします。
chmod +x /opt/dhs-ioc/export.sh (crontab -l ; echo "0 * * * * /opt/dhs-ioc/export.sh >> /var/log/dhs-ioc-export.log 2>&1") | crontab -
Google SecOps サービス アカウントを取得する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
DHS IOC Feed)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [Department of Homeland Security] を選択します。
- [サービス アカウントを取得する] をクリックします。
一意のサービス アカウントのメールアドレスが表示されます(例:)。
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーして、次のステップで使用します。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者のロールが必要です。
- [Cloud Storage] > [バケット] に移動します。
- バケット名(
dhs-ioc-logsなど)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成情報を指定します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレス(例:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)を貼り付けます。 - ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレス(例:
[保存] をクリックします。
Google SecOps フィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
DHS IOC Feed)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [Department of Homeland Security] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
ストレージ バケットの URL: GCS バケットの URI を入力します。
gs://dhs-ioc-logs/ioc-data/dhs-ioc-logsは、GCS バケット名に置き換えます。ioc-dataは、構成したプレフィックス パスに置き換えます。
Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストにおすすめ)。
転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| entity.application | アプリケーション名または識別子 | |
| observable_id | entity.asset.asset_id | アセット ID |
| object_id | entity.asset.product_object_id | 商品オブジェクト ID |
| hash_value | entity.file.md5 | ファイルの MD5 ハッシュ |
| hash_value | entity.file.sha1 | ファイルの SHA1 ハッシュ |
| hash_value | entity.file.sha256 | ファイルの SHA256 ハッシュ |
| file_size | entity.file.size | ファイルのサイズ(バイト単位) |
| fuzzy_hash_value | entity.file.ssdeep | ファイルの SSDEEP ハッシュ |
| file_path | entity.file.full_path | フルファイルパス |
| ip_address_value | entity.ip | IP アドレス |
| country | entity.location.country_or_region | 国または地域 |
| administrativeArea | entity.location.state | 都道府県 |
| ポート | entity.port | ポート番号 |
| file_name_label | entity.resource.attribute.labels | リソースの属性ラベル |
| URL | entity.url | URL |
| organisationInfo | entity.user.department | 部門 |
| email_address、email | entity.user.email_addresses | メール アドレス |
| organisationName | entity.user.userid | ユーザー ID |
| ioc.domain_and_ports.domain | ドメイン名 | |
| indicator_type、confidence_value | ioc.feed_name | フィード名 |
| ip_address_value、target_ip | ioc.ip_and_ports.ip_address | IP アドレス |
| ポート | ioc.ip_and_ports.ports | ポート |
| description、desc1、ttp_description | metadata.description | 説明 |
| entity_type | metadata.entity_type | エンティティのタイプ |
| start_time | metadata.interval.start_time | インターバルの開始時刻 |
| object_id | metadata.product_entity_id | 商品エンティティ ID |
| sightings_count_label | metadata.source_labels | ソースラベル |
| security_result_data、ttp_security_result | metadata.threat | 脅威に関する情報 |
| metadata.vendor_name | ベンダー名または会社名 | |
| metadata.product_name | 製品名 | |
| address_label、subject_label、file_label | security_result.about.labels | セキュリティ結果に関するラベル |
| indicator_type | security_result_data.category_details | カテゴリの詳細 |
| desc1 | security_result_data.description | 説明 |
| confidence_value | security_result_data.severity | 重大度 |
| host、domain_name | target.hostname | ターゲット ホスト名 |
| target_ip | target.ip | ターゲット IP アドレス |
| domain_name | target.url | ターゲット URL |
| malware_category | ttp_security_result.category_details | TTP のカテゴリの詳細 |
| ttp_id_label | ttp_security_result.detection_fields | TTP の検出フィールド |
| ttp_description | ttp_security_result.description | TTP の説明 |
| ttp_summary | ttp_security_result.summary | TTP の概要 |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。