独自の脅威インテリジェンス フィードを統合する
このガイドは、カスタムのセキュリティ侵害インジケーター(IoC)とサードパーティの脅威インテリジェンス フィードを Google Security Operations に統合するセキュリティ エンジニアと検出エンジニアを対象としています。脅威フィードを取り込み、インジケーターを統合データモデル(UDM)エンティティ コンテキスト グラフ(ECG)に正規化し、インジケーター エンティティとストリーミング イベント テレメトリーを関連付ける方法について説明します。この方法を使用すると、環境全体で脅威検出を自動化し、手動での指標検索を排除できます。統合が成功すると、アラートのトリアージ時間が短縮され、リアルタイムの脅威検出と遡及的な脅威検出により、組織のセキュリティ ポスチャーが強化されます。
カスタム脅威インテリジェンス フィードを統合すると、セキュリティ運用チームは外部インジケーター ストリーム(マルウェア情報共有プラットフォーム(MISP)、STIX/TAXII、商用フィードなど)を内部セキュリティ テレメトリーと組み合わせることができます。ECG に正規化されると、脅威エンティティは自動インジケーター照合とカスタム マルチイベント YARA-L 2.0 関連付けルールの両方をサポートします。
主な用語
- エンティティ コンテキスト グラフ(ECG): Google SecOps のコンテキスト ストレージ レイヤ。セキュリティ イベントログとの関連付けのために、ステートフル エンティティ レコード(アセット、ユーザー、脅威指標など)を保持します。
- 統合データモデル(UDM): Google SecOps が未加工のイベントログとコンテキスト エンティティ データを正規化するために使用する標準化されたスキーマ。
- 指標のライフサイクル間隔(
metadata.interval): ECG で脅威指標がアクティブになるタイミングを定義する、時間制限付きの有効期間(start_timeとend_time)。 - 自動 IoC の一致: 受信したセキュリティ イベントが ECG のアクティブなインジケーター エンティティと一致したときに作成されるシステム生成の検出結果。[IoC の一致] ページに表示されます。
- YARA-L レトロハント: 最大 30 日間の過去のセキュリティ テレメトリーに対して YARA-L 2.0 検出ルールを実行するオンデマンドの履歴検索。
一般的なユースケース
次のユースケースは、独自の脅威インテリジェンスを導入することで、一般的なセキュリティ運用の目標を達成する方法を示しています。
自動リアルタイム インジケーター照合
- 目標: カスタム相関ルールを維持することなく、取り込まれたサードパーティの指標に対してストリーミング セキュリティ イベントを自動的に評価します。
- 価値: 大量の脅威フィードのルールを手動でメンテナンスする必要がなくなり、[IoC matches] ページで一致するものがすぐに表示されます。
カスタム YARA-L 関連付けルールとレトロハンティング
- 目標: ECG の脅威インテリジェンス エンティティをマルチイベント テレメトリーと結合し、レトロハントを使用して最大 30 日間の履歴データをスキャンします。
- Value: 複数段階の攻撃を検出し、インジケーターが脅威フィードに追加される前に発生した過去の侵害を特定します。
始める前に
開始する前に、次の前提条件を満たしていることを確認してください。
- 権限: Google SecOps でデータフィードを管理し、検出ルールを作成するには、Identity and Access Management の権限(
Chronicle API AdminやChronicle API Editorなど)が必要です。必要なロールの詳細については、機能アクセスを構成するをご覧ください。 - 環境チェック: 有効な Google SecOps インスタンスと、外部の脅威インテリジェンス プロバイダ(MISP、STIX/TAXII、Cloud Storage バケットなど)の有効な API 認証情報またはエンドポイント URL があることを確認します。
- 検索とルールの機能: UDM 検索では、アクティブ ウィンドウに関係なく、ECG に保存されている未加工のエンティティ レコードを検査できます。一方、YARA-L 検出ルールと自動照合では、
metadata.intervalがイベントのタイムスタンプを囲んでいるインジケーターのみが評価されます。 - ダッシュボードと検索フィールドの接頭辞: UDM 検索、ダッシュボード、YARA-L ルールで脅威インテリジェンス エンティティをクエリする場合は、インジケーター値(
graph.entity.ipなど)にgraph.entity.接頭辞を使用し、脅威属性フィールドにgraph.metadata.threat.接頭辞を使用します。
脅威インテリジェンスのインジケーターを取り込む
外部インジケーター ストリームを Google SecOps に取り込むための取り込みメカニズムを選択して構成します。
フィード取り込みメカニズムを選択する
次のいずれかのサポートされているメカニズムを使用して、脅威インテリジェンス フィードを取り込むことができます。
- 事前構築済みのデフォルト パーサー: Google SecOps には、多くの脅威インテリジェンス プラットフォーム用のデフォルト パーサーが含まれています。IOC に分類されるサポート対象のパーサーのリストについては、サポートされているログタイプとデフォルト パーサーをご覧ください。サポートされているベンダーには、MISP、ThreatConnect、Intel471、Cyjax などがあります。
- Feed Management API: Google SecOps コンソールでフィードを構成するか、Feed Management API を使用して、外部 HTTPS、Cloud Storage、Amazon S3 エンドポイントからインジケーターを定期的に取得します。
- 取り込み API: 取り込み API を使用して、事前構造化されたエンティティ ペイロードを Google SecOps に直接送信します。
- Bindplane エージェント: Bindplane エージェントを使用して、オンプレミス環境またはクラウド環境からインジケーター ログを収集して転送します。
- Cloud Run functions: Cloud Run functions を使用してサーバーレス取り込みスクリプトをデプロイし、外部 API(STIX/TAXII や MISP など)からインジケーターを取得して Google SecOps にストリーミングします。詳細については、Cloud Run functions としてデプロイされた取り込みスクリプトを使用するをご覧ください。
- Google SecOps レスポンス統合: Content Hub コネクタを介してインジケーターを取り込み、自動化されたハンドブックの一部として脅威リストを同期します。詳しくは、コンテンツ ハブを使用するをご覧ください。
脅威インテリジェンス フィードをオンボーディングする
脅威インテリジェンス プロバイダから Google SecOps にインジケーター ログを取り込むには:
特定の脅威フィード形式またはプロバイダのオンボーディング手順は次のとおりです。
- STIX/TAXII: STIX 脅威インテリジェンス ログを収集するを参照するか、Cloud Run functions としてデプロイされた取り込みスクリプトを使用する(STIX/TAXII)でサーバーレス コネクタをデプロイします(ログタイプ
STIX)。 - MISP: MISP IoC ログを収集するまたは Cloud Run functions としてデプロイされた取り込みスクリプトを使用する(MISP)(ログタイプ
MISP_IOC)をご覧ください。 - カスタム CSV フィード: CSV カスタム IoC ファイルを収集する(ログタイプ
CSV_CUSTOM_IOC)を参照してください。 - ThreatConnect: ThreatConnect IoC のログを収集するまたは v3 API を使用して ThreatConnect IoC のログを収集する(ログタイプ
THREATCONNECT_IOCとTHREATCONNECT_IOC_V3)をご覧ください。 - Recorded Future: Recorded Future IoC ログを収集する(ログタイプ
RECORDED_FUTURE_IOC)をご覧ください。 - Anomali ThreatStream: Anomali ThreatStream IoC ログを収集する(ログタイプ
ANOMALI_IOC)をご覧ください。 - CrowdStrike Falcon Intelligence: CrowdStrike IoC ログを収集する(ログタイプ
CROWDSTRIKE_IOC)をご覧ください。 - Proofpoint Emerging Threats Pro: Proofpoint Emerging Threats Pro IoC ログを収集する(ログタイプ
ET_PRO_IOC)をご覧ください。 - その他の商用フィードとオープンソース フィード: ベンダーのオンボーディング ガイドとログタイプについては、サポートされているログタイプとデフォルト パーサーをご覧ください。
- STIX/TAXII: STIX 脅威インテリジェンス ログを収集するを参照するか、Cloud Run functions としてデプロイされた取り込みスクリプトを使用する(STIX/TAXII)でサーバーレス コネクタをデプロイします(ログタイプ
対応する IoC ログタイプ(
STIX、MISP_IOC、CSV_CUSTOM_IOC、THREATCONNECT_IOCなど)を受信フィードデータに割り当てて、デフォルト パーサーがインジケーター属性を UDM エンティティ フィールドに抽出するようにします。[データの取り込み] ダッシュボードを開き、解析されていないログエラーなしで受信ログエントリが表示されることを確認します。
エンティティ コンテキスト グラフを設定して検証する
脅威指標が Google SecOps に入力されると、解析パイプラインによって UDM エンティティ レコードに正規化され、ECG に入力されます。エンティティの拡充の仕組みの詳細については、Google SecOps でイベントとエンティティ データを拡充する方法をご覧ください。
構造化データと非構造化データのデータ マッピング
脅威インテリジェンス データを Google SecOps に送信する方法に応じて、適切なフィールド マッピング ワークフローを行います。
- 構造化データの取り込み: Ingestion API を使用して事前に構造化された UDM エンティティ レコードを直接送信する場合は、取り込み前に UDM
Entityスキーマに従って各ペイロードをフォーマットします。 - 非構造化データと半構造化データの取り込み: フィード、Bindplane エージェント、転送を使用して未加工のログ(CSV、JSON、STIX、CEF など)を送信する場合は、事前構築済みのデフォルト パーサーを割り当てるか、パーサー拡張機能を使用してカスタム フィールド マッピングを作成し、指標値を抽出して必要な UDM エンティティ フィールドにマッピングします。
エンティティが IoC になる条件
ECG のエンティティ レコードが自動照合と検出ルールによって対応可能な IoC として認識されるには、パーサーまたは API ペイロードで次の 5 つの UDM フィールド グループを設定する必要があります。
- エンティティ タイプ(
metadata.entity_type): サポートされているインジケーター エンティティ タイプ(DOMAIN_NAME、IP_ADDRESS、FILE、URLなど)。 - ソースタイプ(
metadata.source_type): データソースの分類。顧客が取り込んだ脅威インテリジェンス フィードの場合はENTITY_CONTEXTに設定する必要があります。 - アーティファクト識別子(
entity.*):graph.entity.ip、graph.entity.hostname、graph.entity.domain.name、graph.entity.file.sha256(またはmd5とsha1)、graph.entity.urlなどのインジケーター値自体。 - 脅威メタデータ(
metadata.threat):threat_feed_name、threat_name、category、severity、confidenceなどの脅威を説明するコンテキスト属性。 ライフサイクル間隔(
metadata.interval):metadata.interval.start_time: インジケーターがアクティブになったときのタイムスタンプ。metadata.interval.end_time: インジケーターの有効期限が切れるタイムスタンプ。
スキーマ定義については、エンティティの UDM フィールド リストと EntityMetadata をご覧ください。
UDM 検索を使用して取り込まれた IoC データを検証する
通常、インジケーターは取り込みと解析から 2 ~ 5 分以内に UDM 検索で検索可能になります。UDM 検索を実行して、インジケーターが ECG に入力されていることを確認します。
- Google SecOps のナビゲーション メニューで、[調査] > [検索] を選択します。
検索フィールドに、取り込まれたインジケーター値のエンティティ グラフをターゲットとするクエリを入力します。
IP アドレス:
graph.entity.ip = "<var>IP_ADDRESS</var>"Domain: (ドメイン)
graph.entity.hostname = "<var>DOMAIN_NAME</var>"ファイルのハッシュ(SHA-256):
graph.entity.file.sha256 = "<var>SHA256_HASH</var>"ソース プロダクト:
graph.metadata.source_product = "<var>SOURCE_PRODUCT_NAME</var>"
[検索] をクリックするか、Enter キーを押します。
返されたエンティティ カードをクリックし、
threatフィールドとintervalフィールドに想定されるメタデータとアクティブなタイムスタンプが含まれていることを確認します。
テレメトリーを関連付けて脅威を検出する
脅威インジケーターが ECG に入力されたら、受信したセキュリティ イベントと過去のセキュリティ イベントを関連付けます。
IoC の自動照合を有効にする
Google SecOps には、カスタム検出ルールとは独立して動作する自動マッチング エンジンが含まれています。イベント テレメトリーが心電図のアクティブな指標と一致した場合:
- システム生成の一致: プラットフォームは、カスタムルールのメンテナンスを必要とせずに、IoC 一致レコードを自動的に作成します。
- 取り込み後の推定タイミング(概算):
- ストリーミング イベント: インジケーターが ECG に入力されると(通常、取り込み後 5 ~ 15 分)、Google SecOps は受信したストリーミング イベントを評価し、5 ~ 15 分以内に [IoC の一致] ページに一致を表示します。
- 履歴イベント: 自動照合エンジンは、新しく取り込まれたインジケーターを履歴テレメトリーに対してバッチ サイクルで遡及的に評価します。通常、最初の照合は 1 ~ 4 時間以内に表示され、履歴全体の関連付けは 24 時間以内に完了します。
- 間隔の適用: マッチング エンジンは、イベントのタイムスタンプが
metadata.interval内にあるアクティブなインジケーターに対してイベントを厳密に評価します。
YARA-L 2.0 相関ルールを作成する
YARA-L 2.0 検出ルールを作成して、イベント テレメトリー(ネットワーク接続、DNS クエリ、プロセス起動など)を ECG のインジケーター エンティティと結合します。カスタムルールでは、指標の一致と行動しきい値、アセット コンテキスト、除外リストを組み合わせることができます。
- Google SecOps のナビゲーション メニューで、[検出] > [ルールと検出] を選択し、[新規] をクリックします。
- ルールの
events:セクションで、UDM イベント フィールド($net.target.ip = $ipなど)を対応する ECG エンティティ フィールド($ioc.graph.entity.ip = $ipなど)と結合するためのプレースホルダ変数を定義します。 エンティティ変数を脅威属性(
$ioc.graph.metadata.threat.categoryなど)でフィルタし、match:セクションで相関関係の時間枠($ip over 5mなど)を指定します。[新しいルールを保存] をクリックします。
レトロハントを実行して過去の侵害を検出する
脅威インテリジェンス フィードには、組織がフィードを取り込む数日前または数週間前に攻撃者が使用した指標が含まれていることがよくあります。ライブルールが新しい受信テレメトリーを評価する一方で、YARA-L レトロハントは、最大 30 日間の過去のセキュリティ イベントに対してルールロジックを遡及的に適用します。
- Google SecOps のナビゲーション メニューで、[検出] > [ルールと検出] を選択します。
- ルールリストでカスタム脅威インテリジェンス ルールを見つけます。
- をクリックしてルールのその他のオプションを表示し、[YARA-L Retrohunt] を選択します。
- [YARA-L Retrohunt] ダイアログで、履歴検索の開始時間と終了時間を選択します。選択した期間が、ルールで指定した一致ウィンドウ以上であることを確認します。
- [実行] をクリックします。
ルールの [検出] タブを開いて、進行状況をモニタリングし、過去の一致を検査します。
詳細については、過去のデータに対してルールを実行するをご覧ください。
一致とアラートを調査する
Google SecOps の専用ビューで、自動照合とカスタム相関ルールによって生成された検出結果を確認します。
[IOC マッチ] ページで自動ヒットを確認する
自動インジケーターの一致を調査するには:
- Google SecOps のナビゲーション メニューで、[検出] > [IoC の一致] を選択します。
- フィルタ コントロールを使用して、インジケーター タイプ(ドメイン、IP アドレス、ファイル ハッシュ、URL)で検出結果の範囲を指定します。
- インジケーターの行をクリックすると、一致の詳細パネルが開き、次の情報が表示されます。
- 関連付けられた内部アセットとユーザー名。
- イベントが最初に確認されたときのタイムスタンプと、最後に確認されたときのタイムスタンプ。
- 脅威インテリジェンス フィードのソースと信頼度の帰属。
- [UDM 検索で表示] をクリックして、指標に関連付けられているすべての未加工のテレメトリー イベントを調べます。
詳細については、Applied Threat Intelligence を使用して IOC を表示するをご覧ください。
[アラート] ページと [検出] ページでルールヒットをトリアージする
カスタム YARA-L ルールによって生成された検出結果は、[アラート] ページと [検出] ページに表示されます。
- Google SecOps のナビゲーション メニューで、[検出] > [アラートと IoC] を選択して、優先順位付けされたルールアラートを表示します。
- アラート名をクリックして [アラートの詳細] ページを開き、相関イベント行と ECG エンティティ属性が一覧表示された [検出] テーブルを確認します。
- サイレント ルール(アラートが無効になっているルール)または完了したレトロハントの場合は、[検出] > [ルールと検出] を開き、ルール名をクリックして [検出] タブを調べます。
カスタム インジケーターを Emerging Threats Center と関連付ける
Emerging Threats Center を使用して、カスタム IoC の一致がより広範な攻撃者のキャンペーンやマルウェア ファミリーとどのように関連しているかを調査することもできます。
- Google SecOps のナビゲーション メニューで、[検出] > [新興の脅威] を選択します。
- 現在展開中の脅威キャンペーンとアドバイザリを確認し、UDM 検索にピボットして、カスタム脅威フィードのインジケーターが観測されたキャンペーン アクティビティと重複しているかどうかを確認します。
詳細については、Emerging Threats Center の概要をご覧ください。
高度なアセットと参照にアクセスする
カスタム脅威インテリジェンス ルールを構築する際は、次の YARA-L 2.0 スニペットとリソースを参照してください。
不正な IP アドレスに一致するアウトバウンド ネットワーク接続
このルールは、アウトバウンド NETWORK_CONNECTION イベントと ECG のアクティブな IP インジケーターを関連付けます。
rule custom_ioc_network_connection {
meta:
author = "Security Operations"
description = "Detects connections to IPs matching custom threat intel"
severity = "HIGH"
priority = "HIGH"
events:
$net.metadata.event_type = "NETWORK_CONNECTION"
$net.target.ip = $ip
$ioc.graph.entity.ip = $ip
$ioc.graph.metadata.threat.category = "SUSPICIOUS_NETWORK"
match:
$ip over 5m
outcome:
$risk_score = max(85)
$threat_name = array_distinct($ioc.graph.metadata.threat.threat_name)
$source_feed = array_distinct($ioc.graph.metadata.source_product)
$principal_hostname = array_distinct($net.principal.asset.hostname)
condition:
$net and $ioc
}
悪意のあるドメインに一致する DNS クエリ
このルールは、取り込まれた脅威フィードで悪意のあるものとしてフラグが設定されたドメインの NETWORK_DNS ルックアップを識別します。
rule custom_ioc_malicious_domain_query {
meta:
author = "Security Operations"
description = "Detects DNS queries for domains matching threat intel"
severity = "MEDIUM"
priority = "MEDIUM"
events:
$dns.metadata.event_type = "NETWORK_DNS"
$dns.network.dns.questions.name = $domain
$ioc.graph.entity.hostname = $domain
match:
$domain over 10m
outcome:
$threat_name = array_distinct($ioc.graph.metadata.threat.threat_name)
$source_feed = array_distinct($ioc.graph.metadata.source_product)
$client_ip = array_distinct($dns.principal.ip)
condition:
$dns and $ioc
}
悪意のある SHA-256 ファイル ハッシュに一致するプロセスの実行
このルールは、PROCESS_LAUNCH イベントが ECG に保存されている既知の悪意のある SHA-256 ファイル ハッシュと一致した場合にトリガーされます。
rule custom_ioc_malicious_file_execution {
meta:
author = "Security Operations"
description = "Detects process launches matching malicious file hashes"
severity = "CRITICAL"
priority = "HIGH"
events:
$process.metadata.event_type = "PROCESS_LAUNCH"
$process.target.process.file.sha256 = $sha256
$ioc.graph.entity.file.sha256 = $sha256
match:
$sha256 over 5m
outcome:
$threat_name = array_distinct($ioc.graph.metadata.threat.threat_name)
$file_path = array_distinct($process.target.process.file.full_path)
$hostname = array_distinct($process.principal.asset.hostname)
$user = array_distinct($process.principal.user.userid)
condition:
$process and $ioc
}
コミュニティ ブログと参考資料
YARA-L ルールの作成とカスタム脅威インテリジェンス フィードの関連付けに関するその他の例については、次の Google Cloud コミュニティ リソースをご覧ください。
- 独自の脅威インテリジェンスを使用してルールを作成する(パート 1)
- 独自の脅威インテリジェンスを使用してルールを作成する(パート 2)
- YARA-L の基本
- YARA-L ルール変数
- YARA-L の演算子と修飾子
- 正規表現を使用した単一のイベントルールの作成
- マルチイベント ルールの作成: イベントの結合
- ルールエディタのナビゲーション
トラブルシューティング
このセクションでは、脅威インテリジェンス フィードのオンボーディング時や相関ルールの構築時に、パフォーマンスの期待値を管理し、一般的な問題を解決する方法について説明します。
レイテンシ、サービス割り当て、上限
- 取り込みと UDM 検索のインデックス登録: 新しく取り込まれたインジケーターは、通常 2 ~ 5 分以内に UDM 検索に表示されます。フィードの取り込み後、5 分以上待ってから、エンティティ レコードが見つからない問題のトラブルシューティングを行います。
- 自動 IoC マッチングのレイテンシ: インジケーターが ECG に入力されると、受信ストリーミング イベントとの一致が 5 ~ 15 分以内に [IoC の一致] ページに表示されます。過去のイベントに対する遡及的なバッチ照合には通常 1 ~ 4 時間かかります(完全な履歴相関関係の場合は最大 24 時間)。
- エンティティ コンテキスト グラフの相関ウィンドウ: 自動 IoC マッチングと YARA-L 相関ルールは、アクティブな
metadata.intervalウィンドウ内でインジケーターを厳密に評価します。end_time値の有効期限が切れたインジケーターは、一致を生成しません。 - Retrohunt 検索ウィンドウ: YARA-L Retrohunt は、実行ごとに最大 30 日間の過去のテレメトリーをスキャンします。完了までの時間は、ルールの複雑さとシステム リソースの可用性によって異なります。
エラーの修復
この表を使用して、脅威インテリジェンスのオンボーディングと検出ルールの作成中に発生した問題を診断して解決します。
| 問題 | 問題の詳細 | 修正 |
|---|---|---|
| 解析されていない IoC ログ | フィードのステータスには受信データが表示されるが、ログを UDM エンティティに解析できない。 | フィードログのタイプがパーサー(STIX、MISP_IOC、CSV_CUSTOM_IOC など)と一致していることを確認します。データの取り込みダッシュボードで、未加工のスキーマエラーを確認します。 |
| UDM 検索結果が表示されない | インジケーター ログはエラーなく解析されますが、UDM 検索でエンティティ レコードが返されません。 | クエリが udm.principal.* イベント フィールドではなく、graph.entity.* フィールド(graph.entity.ip など)をターゲットにしていることを確認します。 |
| 既知のインジケーターでルールがトリガーされない | イベントと指標の両方が UDM 検索に存在しますが、YARA-L ルールでは検出が生成されません。 | インジケーターの metadata.interval.start_time と metadata.interval.end_time がイベントのタイムスタンプを囲んでいることを確認します。 |
| レトロハント中に洪水に関するアラートを生成する | レトロハントを実行すると、数百件の重複する SOAR ケースとアラートが作成されます。 | RetroHunt を開始する前に、ルールの警告切り替えをオフにします。ライブ アラートを再度有効にする前に、[検出] ページで検出を確認します。 |
| 偽陽性の多発 | ノイズの多い指標により、安全な内部スキャナまたは管理ホストで検出がトリガーされます。 | ルールに参照リスト除外(not $net.principal.ip in %benign_scanner_ips など)を追加し、行動イベント コンテキストを必須にします。 |
検証とテスト
カスタム脅威インテリジェンス ルールをライブ アラート モードで有効にする前に、組み込みのルールをテスト機能を使用して、そのロジックを確認します。
- [検出] > [ルールと検出] を開き、ルールをクリックしてルールエディタを開きます。
- 下部のパネルで [ルールをテスト] をクリックして、アラートや SOAR ケースを生成せずに、最近の過去のイベントデータとアクティブな ECG エンティティに対してルールを評価します。
- 返されたテスト検出を検査して、
outcome変数($threat_nameや$source_feedなど)が想定どおりに設定されていることを確認します。
次のステップ
- 詳しくは、検索におけるエンティティ コンテキストをご覧ください。
- YARA-L を使ってみると YARA-L の単一イベント ルールとマルチイベント ルールをご覧ください。
- Applied Threat Intelligence のキュレーテッド検出について理解する。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。