Google SecOps:SIEM によるセキュリティログ分析【基礎編】
はじめに
こんにちは、クラウドエースの SRE 部に所属している潘です。
今回は Google Security Operations(以下 Google SecOps)における SIEM 検索の基本的な機能についてご説明していきます。
Google SecOps の概要については以前別記事でご紹介しているので、そちらをご覧ください。
概要
Google SecOps における SIEM 検索は、セキュリティイベントの調査の中核を担う機能で、大量のセキュリティログの中から特定のイベントやパターンを検出するために使用されます。
SIEM 検索には大きく分けて以下の 3 つの検索方法があります。
手法 | 概要 | ユースケース |
---|---|---|
UDM 検索 | 標準データ構造を使った高速な検索 | 通常時 |
未加工ログ検索 | 未加工ログを検索するシンプルな手法 | ログが取り込まれているか確認したい時 |
YARA-L | YARA-L 言語で書かれたイベントパターンの検索 | より高度な検知ルールの定義 |
UDM 検索の活用
Google SecOps に取り込んだログを検索したい場合、まずは UDM 検索 を使います。
本トピックでは UDM の概念説明から入り、どのような機能が提供されているかご紹介していきます。
UDM(統合データモデル)とは
図:生のログデータを UDM に標準化
UDM(Unified Data Model)は、ソースから取り込んだデータに関する情報を保存する Google SecOps の標準データ構造です。
様々な環境から取得された形式の異なるログは、UDM の構造に標準化されることにより個別に解析する必要がなくなり、統一的に分析することが可能になりました。
UDM 検索のメリット
画像:UDM 変換イメージ
異なる製品のログも UDM の形式に統一されるため、一つのクエリで複数製品のログイベントを検索できます。
SIEM 検索では、未加工のログを検索することも可能ですが、UDM の形式に標準化することで、より高速で正確な検索を実施できます。
UDM の詳細なデータ構造については以下ドキュメントをご参照ください。
主要な UDM の項目
Google SecOps では、取り込んだログイベントをあらかじめ用意されている UDM フィールドに分類します。
UDM フィールドとは、ログイベントの属性(例:ユーザーのログインに関するイベント、どこかの IP アドレスにアクセスしたイベントなど)を表したもので、数千種類存在します。
事前定義された UDM フィールドに基づいてイベントを分類することで、データの検索をすばやく開始することができます。
以下に主要な UDM フィールドをいくつか紹介します。
フィールド名 | ユースケース | 例 |
---|---|---|
metadata.event_type |
分類されたイベント タイプを表す。 | USER_LOGIN |
metadata.event_timestamp |
イベントが生成された時間を表す。 | 2024-08-29T14:30:00Z |
src.ip |
ネットワーク系ログにおける通信の発信元 IP アドレスを表す。 | 0.0.0.0 |
target.ip |
ネットワーク系ログにおける通信先 IP アドレスを表す。 | x.x.x.x |
全ての UDM フィールドは以下の統合データフィールドリストから確認できます。
UDM 検索の使い方
以下では実際の操作画面と共に、UDM 検索の基本的な実施方法について説明します。
UDM 検索画面へのアクセス
UDM 検索にアクセスするには、メニューバーで SIEM Search をクリックします。
画像:UDM 検索画面へのアクセス
UDM 検索の実行方法
画像:UDM 検索手順
検索クエリの入力
画像:UDM クエリ
UDM 検索に用いるクエリのことを UDM クエリといいます。
UDM クエリは UDM フィールドに基づいています。
UDM クエリの入力手順は以下の通りです。
- 有効な UDM フィールドを入力
- 有効な演算子を入力
- 検索するログデータを入力
UDM クエリについての細かなルールについては以下をご参照ください。
検索クエリ生成の補助機能
上記でご説明したような UDM クエリを生成する上で役立つ機能を以下で紹介します。
グループ化されたフィールドを検索
Google SecOps では、関連する個別の UDM フィールドをグループ化したフィールドが用意されています。
個別のフィールドレベルではなく、もっと大きな粒度でまとめて検索したい時に便利な機能になっています。
画像:グループ化されたフィールド
例えば、IP アドレスに関するフィールド(observer.ip
, src.ip
, target.ip
など)は ip
というグループ化されたフィールドで一括検索できます。
グループフィールドの種類とそれに含まれる個別フィールドについては以下をご参照ください。
UDM Lookup の活用
UDM 検索クエリの作成中に、どの UDM フィールドを含めるべきか判断しづらい場合があります。
UDM Lookup を使用すると、「特定の文字列を含むログデータ(Value)」 か、 「特定の文字列値を含む UDM フィールド名」 をすばやく見つけることができます。
例えば、以下のように Audit という文字列を値(Values)に含むログを検索することができます。
画像:UDM Lookup Values で検索
Values で検索した場合、文頭、文末に該当の文字列を含む値がハイライトされ、それ以外で一致する文字列が見つかった場合は、Possible value match として表示されます。
また、UDM Fields で検索した場合は、以下のように該当の文字列が UDM フィールドに含まれているものがハイライトされます。
画像:UDM Lookup UDM Fields で検索
UDM Lookup の使用方法の詳細については以下をご参照ください。
Gemini による検索クエリの生成
画像:Gemini によるクエリ生成
画面右上の Gemini のアイコンをクリックすると、Gemini に対して自然言語で質問することができます。
質問すると UDM 検索で使用できるクエリを生成してくれます。
上の例では 3 日以内にユーザーログインが失敗したイベントを検索しています。
UDM 検索結果の分析
UDM 検索が完了した後も、結果のログイベントを絞りやすくするために、Google SecOps ではさまざまな機能が用意されています。
フィルタ機能や関数によるグルーピングなどを用いて、効率的に分析を進めることができます。
フィルタの活用
一致するログイベントが多く、探したいログが見つけづらい時、検索クエリを変更して再実行しなくても、結果をフィルタリングして絞り込むことができます。
画像:検索結果をフィルタ
ADD FILTER を押下することで特定の UDM フィールドと値を持つイベントをフィルタ(もしくはフィルタアウト)して表示できます。
Aggregation の使用方法
Aggregation を使用すると、UDM 検索結果をさらに絞り込むことができます。
Aggregation とはログイベントを UDM フィールド毎に集計したものです。
どのようなタイプのイベントがどれだけ存在しているかを把握でき、関心のあるログイベントに絞って閲覧したい場合に有益です。
画像:Aggregation
Aggregation エリアに表示される UDM フィールドは、UDM 検索で一致したイベントに含まれる属性の一覧です。
各 UDM フィールドのリストの右側の数字は、そのフィールドを含むイベントの合計数を表しています。
プルダウンを開くと、そのフィールドを含むイベントの概要が表示されます。
ピボットテーブルを使った分析
ピボット テーブルでは、式や関数を使用して、UDM 検索の結果に対してイベントを分析できます。
画像:ピボットテーブルによるログイベントへの関数適用
例えば上で示したように Group By
関数を使用して、フィールド欄で about.user.user_display_name
を指定すると、「検索したイベントの中からユーザーのディスプレイネームを抽出して表示させる」というようなことが可能になります。
ピボットテーブルの細かな仕様については以下をご参照ください。
タイムライングラフの活用
タイムライングラフには、UDM 検索の結果一致したイベントとアラートの数がグラフィカルに表示されます。
画像:タイムライングラフ
イベントとアラートは、同じタイムライン グラフに表示されます。
タイムライングラフは、イベントタブとアラートタブの両方に表示されます。
白い線をスライドさせて期間を絞ることができ、直感的に操作できます。
アラート発生時のイベントの分析
検索したログイベントにおいて、アラートが発生していた場合、Overview の画面では Gemini による要約と検出されたエンティティの概要が確認できます。
画像:アラートタイムライン
イベントタイムライングラフにはアラート件数が以下のように赤文字で表示されます。
これにより特にアラート件数が多い日に期間を絞ってログを調査する、というようなことが簡単にできます。
画像:アラート時のイベントタイムライン
またアラートタイムラインでは、以下のようにアラートが発生したイベントのみが表示され、どのルールにより検知されたか(Rule)や重大度(Severity)によりフィルタできるようになります。
画像:アラートタイムライン
検索の保存と共有
Google SecOps では、検索クエリがアカウント内で保存され、他のチームメンバーに共有できるようになっています。
以下のように Run Search ボタンの横にある 3 点ボタンから、Save Search をクリックすることでクエリの保存ができます。
また、Search Manager という機能にアクセスすることで組織内でのクエリの共有が可能になります。
画像:検索クエリの保存・共有 へのアクセス
クエリの検索と保存を用いて、チーム全体における分析の効率化を図ることができます。
チームメンバーとの検索共有
Search Manager にアクセスすると、以下のような画面が表示され、共有されたクエリの一覧が見れます。
フィルタや並び替えをしてクエリを絞ったり、+ ボタンから新たなクエリを保存することも可能です。
Load Search をクリックすると、選択したクエリが UDM 検索フィールドに反映されます。
画像:Search Manager 画面
また Save Search で保存したクエリについては、以下のようにクエリ右のメニューバーから Share With Your Organization をクリックし、Share ボタンを押すことで組織内でクエリの共有が可能になります。
画像:組織内でのクエリの共有
画像:Share クリック
未加工ログ検索の活用
Google SecOps において、SIEM で取り込んだログは UDM に変換する前の未加工の状態でも保存されます。
未加工ログ検索は正規化されていない状態なので検索速度は遅くなりますが、新規に取り込んだログがきちんと Google SecOps 内に存在しているかをチェックしたい場合に有用です。
未加工のログを検索したい場合は、raw =
と入力することで、一致する文字列があるログイベントを表示できます。
例えば、example.com
というドメイン名を含むイベントを検索する際は、以下のように検索フィールドに入力します。
raw = "example.com"
以下は実際に検索した際の画像です。
画像:未加工ログ検索
未加工のログでも、SIEM 検索によりヒットするイベントが表示されました。
より高度なイベントパターン検出
UDM 検索によって検索・分析できるのはあくまで UDM フィールドを軸としたシンプルな検索結果のみになります。
YARA-L という言語を用いて、以下のようなより高度なイベントパターンを検出するルールを作成することができます。
- 5 分以内にアクセスされた送信元 IP アドレスが安全な IP アドレスと一致しないログインイベント
- 5 分未満で特定のユーザーから 10 回以上ログインの試行があるログイベント
高度な脅威分析については後日別記事にてご紹介する予定です。
YARA-L の概要は以下をご参照ください。
まとめ
本記事では、Google SecOps における SIEM 検索の基本的な機能について解説しました。
Google SecOps の SIEM 検索は、UDM 検索、未加工ログ検索によるシンプルな手法と、YARA-L による高度な検索手法の 3 つの方法を提供しています。
特に UDM 検索は、異なるソースからのログデータを統一的に扱える点で非常に有用です。
Google SecOps の基本的な SIEM 検索機能を適切に活用するだけでも、セキュリティ運用の効率化を図ることができるので、ぜひ本記事を参考にしていただければと思います。
Discussion