UEBA のリスク分析
このドキュメントでは、UEBA カテゴリのリスク分析のルールセットの概要、必要なデータ、各ルールセットによって生成されるアラートの調整に使用できる構成について説明します。これらのルールセットは、サポートされているログソースを評価して脅威を特定するのに役立ちます。
ルールセットの説明
Risk Analytics for UEBA カテゴリでは、次のルールセットを使用できます。これらのルールセットは、検出されたパターンのタイプごとにグループ化されています。
認証
- New Login by User to Device: ユーザーが新しいデバイスにログインしました。
- ユーザー別の異常な認証イベント: 過去の使用状況と比較して、最近、単一のユーザー エンティティで異常な認証イベントが発生しました。
- デバイス別の認証失敗: 単一デバイス エンティティで、過去の使用状況と比較して、最近ログイン失敗の試行回数が多くなっています。
- Failed Authentications by User(ユーザーによる認証の失敗): 単一ユーザー エンティティで、過去の使用状況と比較して、最近ログイン試行の失敗が多数発生しています。
ネットワーク トラフィックの分析
- デバイス別の異常な受信バイト数: 過去の使用状況と比較して、最近単一のデバイス エンティティにアップロードされたデータ量が大幅に増加しています。
- デバイス別の異常なアウトバウンド バイト数: 過去の使用状況と比較して、最近 1 つのデバイス エンティティからダウンロードされたデータ量が大幅に増加しています。
- デバイス別の異常な合計バイト数: デバイス エンティティが、過去の使用量と比較して、最近大量のデータをアップロードおよびダウンロードしました。
- ユーザー別の異常な受信バイト数: 単一ユーザー エンティティが、過去の使用状況と比較して、最近大量のデータをダウンロードしました。
- ユーザー別の異常な合計バイト数: ユーザー エンティティが、過去の使用状況と比較して、最近大量のデータをアップロードおよびダウンロードした。
- ブルート フォース攻撃の後にユーザーがログインに成功: 1 つの IP アドレスからの単一ユーザー エンティティが、特定のアプリケーションに対して認証の失敗を複数回試みた後、ログインに成功しました。
ピアグループに基づく検出
新規作成されたユーザーの異常または過剰なログイン: 最近作成されたユーザーの異常または過剰な認証アクティビティ。これは、AD コンテキストデータの作成時間を使用します。
新規作成されたユーザーの異常または過剰な不審なアクティビティ: 最近作成されたユーザーの異常または過剰なアクティビティ(HTTP テレメトリー、プロセス実行、グループの変更など)。これは、AD コンテキストデータの作成時間を使用します。
疑わしいアクション
- デバイスによるアカウントの過剰な作成: デバイス エンティティが複数の新規ユーザー アカウントを作成しました。
- ユーザー別の過剰なアラート: ウイルス対策デバイスまたはエンドポイント デバイスからの多数のセキュリティ アラート(接続がブロックされた、マルウェアが検出されたなど)が報告されました。これは、過去のパターンよりもはるかに大きなデータです。これは、
security_result.actionUDM フィールドがBLOCKに設定されているイベントです。
データ損失防止に基づく検出
- データ引き出し機能を持つ異常なプロセスまたは過剰なプロセス: キーロガー、スクリーンショット、リモート アクセスなどのデータ引き出し機能に関連するプロセスの異常なアクティビティまたは過剰なアクティビティ。これは、VirusTotal のファイル メタデータ拡充を使用します。
UEBA カテゴリのリスク分析に必要なデータ
このセクションでは、最適なパフォーマンスを実現するために各ルールセット カテゴリで必要なデータについて詳しく説明します。UEBA 検出は、サポートされているすべてのデフォルト パーサーで動作するように設計されていますが、次の特定のデータ型を使用すると、そのメリットを最大限に活用できます。サポートされているデフォルト パーサーの完全なリストについては、サポートされているログタイプとデフォルト パーサーをご覧ください。
認証
これらのルールセットのいずれかを使用するには、Azure AD ディレクトリ監査(AZURE_AD_AUDIT)または Windows イベント(WINEVTLOG)からログデータを収集します。
WINEVTLOG の場合、Security イベントログ Channel に次の Windows Event IDs を含めるようにデータの収集構成を構成する必要があります。これらのイベントは、検出エンジンで使用される Event types(USER_LOGIN や PROCESS_LAUNCH など)に直接マッピングされます。
Windows イベント ID の要件
| イベントタイプ | Windows イベント ID |
|---|---|
| USER_LOGIN | 529, 4624, 4625, 4626, 4648, 4672, 4768, 4769, 4770, 4771, 4777, 4820, 4821, 4964 |
| USER_CREATION | 4720 |
| NETWORK_CONNECTION | 4096, 4097, 4321, 5156, 5632, 5633, 5157 |
| GROUP_MODIFICATION | 4728, 4729, 4732, 4733, 4735, 4737, 4745, 4746, 4747, 4750, 4751, 4752, 4755, 4756, 4757, 4760, 4761, 4762, 4764, 4784, 4785, 4786, 4787, 4788, 4791 |
| PROCESS_LAUNCH | 4688 |
| PROCESS_OPEN | 4663, 4670, 4691, 8002 |
ネットワーク トラフィックの分析
これらのルールセットを使用するには、ネットワーク アクティビティをキャプチャするログデータを収集します。例: FortiGate(FORTINET_FIREWALL)、Check Point(CHECKPOINT_FIREWALL)、Zscaler(ZSCALER_WEBPROXY)、CrowdStrike Falcon(CS_EDR)、Carbon Black(CB_EDR)などのデバイスから。
ピアグループに基づく検出
これらのルールセットのいずれかを使用するには、Azure AD ディレクトリ監査(AZURE_AD_AUDIT)または Windows イベント(WINEVTLOG)からログデータを収集します。
疑わしいアクション
このグループのルールセットは、それぞれ異なる種類のデータを使用します。
デバイスによる過剰なアカウント作成ルールセット
このルールセットを使用するには、Azure AD ディレクトリ監査(AZURE_AD_AUDIT)または Windows イベント(WINEVTLOG)からログデータを収集します。
ユーザー ルールセットによる過剰なアラート
このルールセットを使用するには、CrowdStrike Falcon(CS_EDR)、Carbon Black(CB_EDR)、Azure AD ディレクトリ監査(AZURE_AD_AUDIT)によって記録されたエンドポイントアクティビティや監査データなど、エンドポイントのアクティビティをキャプチャするログデータを収集します。
データ損失防止に基づく検出
これらのルールセットを使用するには、CrowdStrike Falcon(CS_EDR)、Carbon Black(CB_EDR)、SentinelOne EDR(SENTINEL_EDR)などで記録されたプロセスとファイル アクティビティをキャプチャするログデータを収集します。
フィールドの依存関係
このセクションでは、Google SecOps UEBA ルールで使用される指標とディメンション フィールドについて説明します。
指標の依存関係
次の表に、指標と、各指標に寄与するイベントを定義する対応する UDM 検索クエリを示します。
| 指標 | 指標に貢献するイベントの UDM 検索クエリ |
|---|---|
AUTH_ATTEMPTS_FAIL |
metadata.event_type = "USER_LOGIN" |
AUTH_ATTEMPTS_SUCCESS |
metadata.event_type = "USER_LOGIN" |
AUTH_ATTEMPTS_TOTAL |
metadata.event_type = "USER_LOGIN" |
DNS_BYTES_OUTBOUND |
network.sent_bytes > 0 |
DNS_QUERIES_FAIL |
network.dns.id > 0 |
DNS_QUERIES_SUCCESS |
network.dns.id > 0 |
DNS_QUERIES_TOTAL |
network.dns.id > 0 |
FILE_EXECUTIONS_FAIL |
metadata.event_type = "PROCESS_LAUNCH" |
FILE_EXECUTIONS_SUCCESS |
metadata.event_type = "PROCESS_LAUNCH" |
FILE_EXECUTIONS_TOTAL |
metadata.event_type = "PROCESS_LAUNCH" |
HTTP_QUERIES_FAIL |
network.http.method != "" |
HTTP_QUERIES_SUCCESS |
network.http.method != "" |
HTTP_QUERIES_TOTAL |
network.http.method != "" |
NETWORK_BYTES_INBOUND |
network.received_bytes > 0 |
NETWORK_BYTES_OUTBOUND |
network.sent_bytes > 0 |
NETWORK_BYTES_TOTAL |
(network.received_bytes > 0 AND network.received_bytes < 1000000000000000) |
NETWORK_FLOWS_INBOUND |
network.received_bytes > 0 |
NETWORK_FLOWS_OUTBOUND |
network.sent_bytes > 0 |
NETWORK_FLOWS_TOTAL |
(network.received_bytes > 0 AND network.received_bytes < 1000000000000000) |
RESOURCE_READ_FAIL |
(metadata.event_type = "FILE_OPEN" OR metadata.event_type = "RESOURCE_READ") |
RESOURCE_READ_SUCCESS |
(metadata.event_type = "FILE_OPEN" OR metadata.event_type = "RESOURCE_READ") |
RESOURCE_READ_TOTAL |
(metadata.event_type = "FILE_OPEN" OR metadata.event_type = "RESOURCE_READ") |
RESOURCE_WRITTEN_FAIL |
(metadata.event_type = "FILE_CREATION" OR metadata.event_type = "RESOURCE_CREATION") |
RESOURCE_WRITTEN_SUCCESS |
(metadata.event_type = "FILE_CREATION" OR metadata.event_type = "RESOURCE_CREATION") |
RESOURCE_WRITTEN_TOTAL |
(metadata.event_type = "FILE_CREATION" OR metadata.event_type = "RESOURCE_CREATION") |
ディメンションの依存関係
次の表に、フィルタリングまたはグループ化に使用できるディメンションと対応する UDM フィールド オプションを示します。
| ディメンション | フィールド オプション |
|---|---|
| プリンシパル デバイス | principal.asset.asset_idprincipal.asset.hostnameprincipal.asset.ipprincipal.asset.macprincipal.asset.product_object_id |
| 対象デバイス | target.asset.asset_idtarget.asset.hostnametarget.asset.iptarget.asset.mactarget.asset.product_object_id |
| プリンシパル ユーザー | principal.user.email_addressesprincipal.user.employee_idprincipal.user.product_object_idprincipal.user.useridprincipal.user.windows_sid |
| ターゲット ユーザー | target.user.email_addressestarget.user.employee_idtarget.user.product_object_idtarget.user.useridtarget.user.windows_sid |
| ターゲット サービス | target.application |
| ターゲット IP | target.ip |
| プリンシパル プロセスのファイルパス | principal.process.file.full_path |
| プリンシパル プロセス ファイル ハッシュ | principal.process.file.sha256 |
| プリンシパル ファイル ハッシュ | principal.file.sha256 |
| 主な国 | principal.ip_geo_artifact.location.country_or_region |
| セキュリティ カテゴリ | security_result.category |
| Principal Network Organization Name(プリンシパル ネットワーク組織名) | principal.ip_geo_artifact.network.organization_name |
| ターゲット ネットワークの組織名 | target.ip_geo_artifact.network.organization_name |
| クライアント証明書のハッシュ | network.tls.client.certificate.sha256 |
| DNS クエリタイプ | network.dns.questions.type |
| DNS ドメイン | network.dns_domain |
| HTTP ユーザー エージェント | network.http.user_agent |
| イベントタイプ | metadata.event_type |
| オペレーティング システム | principal.platform |
このカテゴリのルールセットによって返されるアラートを調整する
ルール除外を使用して、ルールまたはルールセットが生成する検出数を減らすことができます。
ルールの除外では、ルールセットまたはルールセット内の特定のルールによる評価対象からイベントを除外するために使用される条件を定義します。1 つ以上のルールの除外を作成して、検出の量を減らします。これを行う方法については、ルール除外を構成するをご覧ください。
UEBA カテゴリのリスク分析のルールの例
次の例は、リスクスコアが 100 より大きいエンティティのホスト名で検出を生成するルールを作成する方法を示しています。
rule EntityRiskScore {
meta:
events:
$e1.principal.hostname != ""
$e1.principal.hostname = $hostname
$e2.graph.entity.hostname = $hostname
$e2.graph.risk_score.risk_window_size.seconds = 86400 // 24 hours
$e2.graph.risk_score.risk_score >= 100
// Run deduplication across the risk score.
$rscore = $e2.graph.risk_score.risk_score
match:
// Dedup on hostname and risk score across a 4 hour window.
$hostname, $rscore over 4h
outcome:
// Force these risk score based rules to have a risk score of zero to
// prevent self feedback loops.
$risk_score = 0
condition:
$e1 and $e2
}
この例のルールでは、一致セクションを使用して自己重複除去も実行します。ルール検出がトリガーされる可能性がある場合でも、4 時間以内にホスト名とリスクスコアが変更されなければ、新しい検出は作成されません。
エンティティ リスクスコア ルールで設定できるリスク ウィンドウは、24 時間または 7 日間(それぞれ 86,400 秒または 604,800 秒)のみです。リスク ウィンドウ サイズをルールに含めないと、ルールは不正確な結果を返します。
エンティティ リスクスコア データは、エンティティ コンテキスト データとは別に保存されます。両方を 1 つのルールで使用するには、ルールに 2 つの個別のエンティティ イベント、1 つはエンティティ コンテキスト用、もう 1 つはエンティティ リスクスコア用が必要です。次に例を示します。
rule EntityContextAndRiskScore {
meta:
events:
$log_in.metadata.event_type = "USER_LOGIN"
$log_in.principal.hostname = $host
$context.graph.entity.hostname = $host
$context.graph.metadata.entity_type = "ASSET"
$risk_score.graph.entity.hostname = $host
$risk_score.graph.risk_score.risk_window_size.seconds = 604800
match:
$host over 2m
outcome:
$entity_risk_score = max($risk_score.graph.risk_score.normalized_risk_score)
condition:
$log_in and $context and $risk_score and $entity_risk_score > 100
}
次のステップ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。