エンティティ コンテキスト データを検索する
検索のエンティティ コンテキスト機能を使用すると、Google Security Operations アカウント内のエンティティに関連するコンテキスト イベントを検索して表示できるため、セキュリティ調査とインシデント対応を強化できます。標準の統合データモデル(UDM)イベント スキーマに限定された検索とは異なり、この機能は UDM イベントデータ(UDM エンティティ コンテキストを含む)を超えて検索し、セキュリティ インシデントに関する詳細な分析情報を取得する必要性に対応します。
主なメリット
- セキュリティ アナリストと脅威ハンターは、エンティティに関するコンテキスト情報をクエリできます。
- 根本原因の分析、脅威ハンティング、フォレンジックに役立ちます。
- ユーザーは、エンティティのコンテキストで統計検索を実行して、テレメトリー分析を通じてテレメトリー パターンと影響を受けるエンティティを把握できます。
エンティティ コンテキストを使用した検索
エンティティ コンテキストを使用すると、次の方法で検索結果から分析情報を取得できます。
- UDM エンティティ フィールド名を使用して検索する: UDM エンティティ フィールド名を使用して検索クエリを作成します。たとえば、特定のホスト名に関連付けられたすべてのコンテキスト イベントを検索するには、
graph.entity.hostname
を使用して検索を作成します。 - [概要] タブにアクセスする: [概要] タブには、検索で見つかったエンティティの概要が表示されます。ユーザーが入力したクエリの情報に基づいて、情報が表示されます。[概要] ページには、
DOMAIN_NAME
、IP_ADDRESS
、ASSET
、USER
、FILE
、GROUP
、RESOURCE
などのエンティティ タイプの情報が表示されます。 - [Entity] タブを使用する: [Entity] タブには、受信したすべてのエンティティ コンテキスト イベントが一覧表示されます。これには、[Trend Over Time]、[Snapshot Filter]、[Aggregations]、[Events] などのサブコンポーネントが含まれます。エンティティは、[時間指定あり] エンティティと [時間指定なし] エンティティに分類され、別々のタブに表示されます。
- 集計を表示する: UDM イベント検索と同様に、フィールドの集計が表示されます。集計は、エンティティ コンテキスト、派生コンテキスト、グローバル コンテキストというコンテキスト タイプにさらに分類されます。
ユースケース: 不正使用されたユーザー アカウントを調査する
セキュリティ アナリストが、不正使用された可能性のあるユーザー アカウント(email@company.com)を調査する必要があるシナリオを考えてみましょう。調査の手順は次のとおりです。
不正使用されたユーザーを特定する: アラートで、ユーザー email@company.com が不審なアカウントとして特定されたことが通知されます。
エンティティ コンテキスト情報を収集する: ユーザーに関するコンテキスト データを取得して、範囲と影響を把握します。
クエリを実行する: エンティティ コンテキストを使用した検索を使用して、次のクエリを実行します。
graph.entity.user.email_addresses = "email@company.com"
を使用してユーザーに関する情報を取得します。graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context"
を使用して、プロダクト名やその他のメタデータを確認します。
[Overview] タブを分析する: [Overview] タブには、ユーザーのエンティティの概要が表示されます。
First Seen Hour
とLast Seen Hour
のタイムスタンプを確認します。
- ホスト名、IP アドレス、MAC アドレス(利用可能な場合)を確認します。
- ハードウェア モデル、OS プラットフォーム、プラットフォーム バージョンを検査します。
[イベント] タブを確認する: このユーザーに関連付けられたイベント(ログイン試行や異常など)を表示します。
集計を確認する: エンティティ コンテキスト データ(エンティティ コンテキスト、派生コンテキスト、グローバル コンテキストに分散)のパターンと異常を特定します。
検索の例
エンティティ コンテキスト データを検索するには、検索クエリで UDM エンティティ フィールド名を使用します。
graph.entity.hostname
graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
検索結果には、エンティティに関する次の主な情報が表示されます。
- エンティティ メタデータ
- 指標(
First Seen Hour
、Last Seen Hour
) - 関係(
Entity
、Direction
、Entity_label
、Entity_type
、Relationship
) - エンティティ タイプに応じて、アセットの
Principal_ip
、ユーザーのMail_id
、ハッシュ/ファイルのFile_name
、ドメインのDomain_name
とIP_address
などの特定のフィールド。
検索結果に表示されたエンティティ コンテキストの例
このセクションでは、UDM エンティティ コンテキスト機能を活用してエンティティ統計情報を分析する実践的な例を示します。
UDM エンティティの統計情報の検索
使用可能なコンテキスト ソースとタイプを表示するには、UDM 検索で次の UDM エンティティ統計検索を実行します。
graph.metadata.source_type = $sourceType
graph.metadata.entity_type = $entityType
match:
$sourceType, $entityType
outcome:
$total = count(graph.metadata.product_entity_id)
order:
$sourceType, $total desc
limit:
100
タイム ピッカーには、コンテキスト データが取り込まれた日時ではなく、エンティティ グラフ内のアクティブなデータが表示されます。
UDM エンティティ検索では標準の UDM 検索インターフェースが使用されるため、[集計] パネル(上位または下位の値の表示)、結果テーブル、UDM 統計情報の拡張結果などの機能を使用できます。
例: 個別の ENTITY_TYPE
を表示する
UDM エンティティ検索を拡張するには、次のようにログソース、名前空間、結果配列を含めて、観測された個別の ENTITY_TYPE
を表示します。
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper(graph.metadata.event_metadata.base_labels.log_types)
$namespace = strings.to_upper(graph.metadata.event_metadata.base_labels.namespaces)
match:
$logType, $namespace
outcome:
$total = count(graph.metadata.product_entity_id)
$entityTypes = array_distinct(graph.metadata.entity_type)
order:
$logType, $total desc
limit:
100
例: エンティティ セットを絞り込む
UDM 検索のピボット機能を使用して、特定のエンティティ セットを絞り込むことができます。この絞り込みにより、次のような YARA-L クエリが生成されます。
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper( graph.metadata.event_metadata.base_labels.log_types )
$namespace = strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces )
AND strings.to_upper( graph.metadata.event_metadata.base_labels.log_types ) = "WINDOWS_AD"
AND strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces ) = "ACME"
派生コンテキスト
Google SecOps は、次のタイプの派生コンテキストを提供します。
- 各
ENTITY_TYPE
のfirst_seen
とlast_seen
のタイムスタンプ Prevalence
: 特定のENTITY_TYPE
にアクセスしたアセットの数
First Seen Hour
と Last Seen Hour
のタイムスタンプ
Google SecOps は、受信したデータの統計分析を実行し、first_seen
と last_seen
のタイムスタンプでエンティティ コンテキスト レコードを拡充します。
first_seen_hour
フィールドには、エンティティがお客様の環境で最初に検出された時刻が記録されます。last_seen_hour
フィールドには、そのエンティティの最新の観測時刻が記録されます。
初回アクセスが過去 7 日以内のユーザー:
graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
過去 7 日以内に初めて検出されたドメイン:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^([a-zA-Z0–9]([a-zA-Z0–9-]{0,61}[a-zA-Z0–9])?\.)+[a-zA-Z]{2,}$/
graph.entity.domain.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
過去 7 日以内に確認されたファイル(ハッシュ):
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "FILE"
//graph.entity.file.md5 != ""
//graph.entity.file.sha1 != ""
graph.entity.file.sha256 != ""
graph.entity.file.first_seen_time.hours >= timestamp.current_hours() - (86400 * 7)
ENTITY_TYPE
は FILE
ハッシュを表します(例: entity.file.hash
)。hash
オブジェクト内のタイプは、次のいずれかになります。
md5
sha1
sha256
特定のハッシュを検索するには、指定されたハッシュタイプの UDM エンティティ検索を実行します。
// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"
IP アドレス
IP_ADDRESS
の派生 ENTITY_TYPES
は、内部エンティティまたは外部エンティティを表すことができます。
次の UDM エンティティ統計検索は、最近検出された IP_ADDRESSES
を特定し、集計関数(結果セクション)を使用して CIDR ブロックごとにカウントします。
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
//note, for IP addresses the first seen is under artifact, not ip
graph.entity.artifact.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
outcome:
$total = count(graph.metadata.product_entity_id)
$classA = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.0.0.0/8"),1,0))
$classB = sum(if(net.ip_in_range_cidr(graph.entity.ip, "172.16.0.0/12"),1,0))
$classC = sum(if(net.ip_in_range_cidr(graph.entity.ip, "192.168.0.0/16"),1,0))
$classD = sum(if(net.ip_in_range_cidr(graph.entity.ip, "224.0.0.0/4"),1,0))
// we shouldn't see results here…
$classE = sum(if(net.ip_in_range_cidr(graph.entity.ip, "240.0.0.0/4"),1,0))
$thisNetwork = sum(if(net.ip_in_range_cidr(graph.entity.ip, "0.0.0.0/8"),1,0))
$loopback = sum(if(net.ip_in_range_cidr(graph.entity.ip, "127.0.0.0/8"),1,0))
$linklocal = sum(if(net.ip_in_range_cidr(graph.entity.ip, "169.254.0.0/16"),1,0))
$benchmark = sum(if(net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15"),1,0))
$cgnat = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.64.0.0/10"),1,0))
異常な範囲や予期しない範囲をさらに調査するには、UDM エンティティ検索を実行します。
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15")
普及率
Prevalence は常に DERIVED_CONTEXT
型です。
次の UDM エンティティ検索では、ほとんど観測されないドメイン名が特定されます。これらのドメインは、クエリの期間(day_max = 1
)中に 1 日あたり最大 1 つの異なるアセット、過去 10 日間(rolling_max = 1
)で最大 1 つの異なるアセットにのみ関連付けられます。
このパターンは、環境全体でインタラクションが制限されているドメインを検出するのに役立ちます。
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return specific TLDs where the FQDN is more than X characters
//graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
graph.entity.domain.prevalence.rolling_max = 1
graph.entity.domain.prevalence.day_max = 1
または、これを集計 UDM エンティティ統計検索に変換して、結果を集計することもできます。
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
$domain = graph.entity.domain.name
$length = strings.length(graph.entity.domain.name)
$tld = strings.extract_domain(graph.entity.domain.name)
graph.entity.domain.prevalence.day_max = 1
graph.entity.domain.prevalence.rolling_max = 1
match:
$domain, $tld, $length
limit:
10
基本的な UDM エンティティ フィールド検索
使用可能なソースに基づいて、Google SecOps の検索機能でエンティティ コンテキストを使用するその他の例を次に示します。
graph.entity.hostname
graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
principal.ip
principal.hostname="baz"
principal.ip="1.2.3.4"
network.dns.questions.name="youtube.com"
エンティティ フィールドからピボットする
エンティティ フィールドを使用して、関連データをピボットして探索します。ピボット フィールドの例を次に示します。
network.email.to
network.email.cc
principal.process.file.fileMetadata.pe.importHash
principal.process.file.sha256
network.dns.questions.name
動的フィールドについて
ソースは、additional
などの接頭辞が付いた動的構造化フィールドを参照します。これらのフィールドは UDM イベント内で検索できます。
アクセス制御に関する考慮事項
グローバル コンテキスト データに 50 個のイベントの制限が課され、アクセス制御への参照が削除されます。
次のソースはグローバル コンテキストをサポートしています。
- セーフ ブラウジング
- VirusTotal の関連性
- WHOIS
- Uppercase
- オープンソースの Intel IOC(
OPEN_SOURCE_INTEL_IOC
) - Mandiant Active Breach IoC(
MANDIANT_ACTIVE_BREACH_IOC
) - Mandiant Fusion IoC(
MANDIANT_FUSION_IOC
)
制限事項
- ボリュームの上限: 時間指定データと時間指定なしデータの両方で、累積結果の上限は 100 万です。
- グローバル コンテキスト データ: グローバル データ アクセス スコープを持つユーザーに表示される、大文字の VT_PROTECTED、MANDIANT_ACTIVE_BREACH_IOC、MANDIANT_FUSION_IOC、VIRUS_TOTAL_CONNECTIONS などの機密性の高いグローバル コンテキスト データには、50 行の制限があります。
- データの整合性: 最終確認データは最大 2 時間遅れることがあります。関連エンティティには、イベントに記載されているエンティティのサブセットのみが表示される場合があります。
サポートされていない機能:
- エンティティ フィールドの逆引き、グループ化されたフィールド検索、低頻度、ヒートマップ。
- エンティティ コンテキストとイベント クエリの間で結合することはできません。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。