未加工ログの検索

以下でサポートされています。

検索を実行すると、Google Security Operations はまず、取り込まれ、解析され、正規化されたセキュリティ データを調べます。正規化されたデータで情報が見つからない場合は、未加工ログ検索を使用して、解析されていない未加工のログを調べることができます。また、正規表現を使用して、未加工ログを詳細に調べることもできます。

未加工ログ検索を使用して、次のような、ログに表示されるもののインデックスに登録されていないアーティファクトを調査できます。

  • ユーザー名
  • ファイル名
  • レジストリキー
  • コマンドライン引数
  • 未加工の HTTP リクエスト関連データ
  • 正規表現に基づくドメイン名
  • アセットの名前空間とアドレス

未加工ログ検索は、次のユースケース向けに設計された特殊な調査ツールです。

  • 正規化を確認してパーサーのトラブルシューティングを行う: 生成された UDM イベントと未加工のログエントリを比較して、正規化のギャップを特定し、フィールド マッピングを確認して、解析されていないログを特定します。
  • 詳細なフォレンジック調査と脅威ハンティング: 構造化された UDM フィールドにマッピングされていない、一般的でない、またはインデックスに登録されていないセキュリティ侵害インジケーター(IOC)、コマンドライン引数、レジストリキー、ファイルパス、特定の文字列を検索します。
  • 非構造化データとカスタムデータを調査する: UDM パーサーの開発を待たずに、新しくオンボーディングされたログソースや独自のログソースをすぐにクエリできます。

未加工ログの検索は、ランディング ページまたはメニューバーにある [検索] バーを使用して行います。次のいずれかを行います。

raw= 形式を使用する

raw= 形式を使用して、未加工のログをクエリできます。これはおすすめの方法です。

  • 部分文字列を検索するには、検索キーワードを引用符で囲みます。例: raw = "ABC"
  • 正規表現を使用して検索するには、式をスラッシュ(/)で囲みます(例: raw = /AB*C/)。
  • 省略可: parsed キーワードを使用して、解析ステータスでフィルタします。
    • parsed = false: UDM イベントが生成されなかった解析されていないログを表示します。
    • parsed = true: UDM イベントに正常に解析されたログを表示します。

以前の方法: 未加工ログ検索のプロンプトを使用する

  • [検索] バーに、ワイルドカードを含む 4 文字以上の検索文字列(MD5 ハッシュなど)を入力します。
  • 検索で結果が返されない場合は、[未加工ログ検索] オプションが表示されます。
  • 省略可: [開始時間] と [終了時間] を指定します。デフォルトの範囲は過去 7 日間です。
  • 省略可: [ログソース] リストで、1 つ以上のログソースを選択します。デフォルトの設定は All です。
  • [検索] をクリックします。

検索文字列に関連付けられているイベントが [タイムライン] に表示されます。イベント(または未加工のログアイコン)をクリックして、対応する未加工のログを開きます。検索クエリと適用されたフィルタは、[未加工ログ検索] ページにも表示されます。

未加工ログのクエリを最適化する

未加工ログ検索では、インデックス登録されていないログ ペイロードがスキャンされるため、通常は UDM 検索よりも時間がかかります。検索のパフォーマンスを改善するには、次の検索設定を変更して、クエリを実行するデータの量を制限します。

  • 期間セレクタ: クエリを実行するデータの期間を制限します。
  • Log Sources selector: 未加工ログの検索を、すべてのログソースではなく、特定のソースからのログのみに制限します。[ログソース] メニューで、1 つ以上のログソースを選択します(デフォルトは [すべて])。または、クエリに log_source フィルタを直接追加します(log_source = IN["<var>LOG_SOURCE_NAME</var>"])。
  • Regular expressions: 特定の正規表現を使用します。たとえば、raw = /goo\w{3}\.com/ は google.com、goodle.com、goog1e.com と照合して、未加工ログ検索の範囲をさらに絞り込みます。

ターゲットを絞った未加工ログ検索の例

raw = 接頭辞と log_source フィルタおよび parsed フィルタを組み合わせて、検索を関連するフィードに制限し、大量のログソースによって結果が切り捨てられるのを防ぎます。

  • 1 つのログソースで完全一致の文字列を検索する:

    raw = "<var>SEARCH_TERM</var>" and log_source = IN["<var>LOG_SOURCE_NAME</var>"]
    
  • ログソースのサブセットを検索する:

    raw = "<var>SEARCH_TERM</var>" and log_source = IN["<var>LOG_SOURCE_1</var>", "<var>LOG_SOURCE_2</var>"]
    
  • 正規表現を使用して解析されていないログを検索する:

    raw = /<var>REGULAR_EXPRESSION</var>/ and parsed = false and log_source = IN["<var>LOG_SOURCE_NAME</var>"]
    

傾向の推移

[Trend Over Time] グラフを使用して、検索期間中の未加工ログの分布を把握します。グラフにフィルタを適用して、解析済みログと未加工ログを検索できます。 [詳細を表示](または [折りたたむ])をクリックして、グラフを開閉します。

未加工ログの結果

未加工ログ検索を実行すると、検索に一致する未加工ログによって生成された UDM イベントとエンティティ、および未加工ログが組み合わされた結果が返されます。検索結果をクリックすると、さらに詳しく検索結果を確認できます。

  • UDM イベントまたはエンティティ: UDM イベントまたはエンティティをクリックすると、Google SecOps は関連するイベントとエンティティ、およびそのアイテムに関連付けられた未加工のログを表示します。

  • 未加工ログ: 未加工ログをクリックすると、Google SecOps は未加工ログの行全体と、そのログのソースを表示します。

結果の上限とサンプリング

未加工ログの検索には、次の結果とクエリの上限が適用されます。

  • 大規模バッチの結果の上限: 長期保存の列形式ストレージにエクスポートする前にバッチ ストレージに保存された最近取り込まれたログの場合、1,000 件以上のイベントを含む大規模なログバッチから返される結果は 1,000 件に制限されます。ログが長期の列形式ストレージにエクスポートされると、この 1,000 件の結果バッチの上限は適用されなくなります。
  • UI と CSV の合計エクスポートの上限: Google SecOps コンソールまたは CSV エクスポートでの単一の未加工ログ検索では、クエリされたすべてのログソースで最大 10,000 件の結果が返されます。クエリが 10,000 件を超えるエントリと一致する場合、Google SecOps は 10,000 件の結果の代表サンプルを返します。
  • API の結果の上限: Raw Log Search API(SearchRawLogs)では、クエリ リクエスト(page_size)あたり 10,000 件のエントリの上限が適用されます。
  • 検索クエリの長さ: 生ログ検索の入力フィールドは 150 文字に制限されています。

複数のログソースを同時に検索する場合([ログソース] メニューを [すべて] に設定したままにする)、Google SecOps は、高速なレスポンス時間を維持するために、インメモリ フィルタリングの前に保護クエリの上限を適用して、分散ストレージ シャード全体でクエリを並行して実行します。この分散アーキテクチャにより、次の要因によって、広範なマルチソース クエリとシングルソース クエリの間で返される結果の総数が異なることがあります。

  • 取り込み量の変動: 大量のログソースは、小量のソースよりも早く 1,000 件の結果のバッチ上限に達する大きなバッチを生成します。
  • 分散バッチ サンプリング: 1,000 件以上のイベントを含む大きなバッチは、クエリ サンプリングの全体的な上限である 10,000 件の結果が適用される前に、返される結果が 1,000 件に制限されます。これにより、クエリ間で返されるサンプリングされたログの割合が変化します。
  • 最近のストレージ階層と履歴ストレージ階層: 最近取り込まれたログは、低レイテンシのバッチ ストレージからクエリされ、すぐに検索できます。大規模なバッチには 1,000 件の結果の上限が適用されます。ログが長期の列形式ストレージにエクスポートされると、クエリは 1,000 件の結果バッチ制限(最大 10,000 件の結果の合計クエリ制限)なしで個々のログエントリを直接スキャンするため、過去の検索でより一貫した結果数が得られます。

未加工ログの結果をダウンロードする

未加工ログの結果を CSV ファイルにダウンロードするには、[未加工ログ] の結果テーブルで、 [その他] > [CSV としてダウンロード] をクリックします。

デフォルトでは、CSV ファイルには常に [Raw Log] 列が含まれます。[列] ボタンを使用して [列マネージャー] を開き、[タイムスタンプ] 列と [タイプ] 列を削除または追加できます。他の列を追加すると、表には表示されますが、CSV ファイルにはダウンロードされません。

UDM フィールドをダウンロードするには、UDM 検索を実行し、必要な列を選択して、CSV ファイルとしてダウンロードします。

Google Chrome で Failed to execute 'showSaveFilePicker' エラーが表示された場合は、次の手順を行います。

  1. [デバイス] > [Chrome] > [設定] に移動します。

  2. [ユーザーとブラウザ] を選択します。

  3. [ファイル システムへの書き込みアクセス権] 設定を探します。

  4. 許可サイトのリストに prefix.backstory.chronicle.security を追加します。

正規表現

Google SecOps で正規表現を使用すると、セキュリティ データ内の文字列のセットを検索して照合できます。正規表現を使用すると、完全一致を必要とせずに、情報の断片を使って検索を絞り込むことができます。

正規表現構文を使用して検索を実行するには:

  • [SIEM Search] で、検索フィールドに「raw = /YOUR_REGEX/」と入力し、[検索を実行] をクリックします。
  • 以前の検索バーの場合:
    1. [検索] フィールドに正規表現(4 ~ 66 文字)を入力します。
    2. [Run Query as Regex] チェックボックスをオンにして、[検索](または [Raw Log Search] の結果ページで [検索を更新])をクリックします。

Google SecOps の正規表現インフラストラクチャは、オープンソースの正規表現エンジンである Google RE2 に基づいています。Google SecOps は同じ正規表現構文を使用します。

次の表に、検索に使用できる一般的な正規表現の構文の一部を示します。

任意の文字 .
x 文字 {x}
文字クラス [xyz]
否定文字クラス [^xyz]
英数字([0-9 a-z A-Z]) [[:alnum:]]
英字(A-Za-z) [[:alpha:]]
数字(0-9) [[:digit:]]
小文字(a-z) [[:lower:]]
大文字(A-Z) [[:upper:]]
単語構成文字(0-9A-Za-z_) [[:word:]]
16 進数(0-9A-Fa-f) [[:xdigit:]]
疑問符記号(?) 先行する要素の 0 回または 1 回の出現に一致します。
アスタリスク(*) 直前の文字またはグループが 0 回以上出現する場合に一致します。
プラス記号(+) 直前の文字またはグループの 1 回以上の出現に一致します。

次の例は、正規表現を使用してデータを検索する方法を示しています。

  • goo.le\.com - goo で始まり、任意の 1 文字が続き、le.com が続く文字列(google.com や goo0le.com など)に一致します。
  • goo\w{3}\.com - goo で始まり、3 つの単語文字(\w)が続き、.com で終わる文字列に一致します。たとえば、google.com、goojle.com、goodle.com などがあります。
  • [[:digit:]]\.[[:alpha:]] - 1 桁の数字の後にドット(.)が続き、その後に 1 文字のアルファベット文字(34323.system、23458.office、897.net など)が続く文字列に一致します。

Windows ログを検索する正規表現の例

このセクションでは、一般にモニタリングされる Windows イベントを見つけるために Google SecOps の未加工ログ検索で使用できる正規表現クエリ文字列について説明します。これらの例では、Windows ログメッセージが JSON 形式であることを前提としています。

一般にモニタリングされる Windows イベント ID の詳細については、モニターするイベントをご覧ください。ここで説明する例は、これらのユースケースで説明されているものと同様のパターンに従っています。

ユースケース: EventID 1150 でイベントを返す
正規表現文字列: \"EventID\"\:\s*1150
一致した値 "EventID":1150
ユースケース: イベント ID が 1150 または 1151 のイベントを返します
正規表現文字列 (?:\"EventID\"\:\s*)(?:1150|1151)
一致した値 "EventID":1150 と "EventID":1151
ユースケース: イベント ID が 1150 または 1151 で、ThreadID が 9092 のイベントを返す
正規表現文字列 (?:\"EventID\"\:\s*)(?:1150|1151).*(?:\"ThreadID\"\:\s*9092)
一致した値 "EventID":1150 <...any number of characters...> "ThreadID":9092
および
"EventID":1151 <...any number of characters...> "ThreadID":9092

アカウント管理イベントを見つける

これらの正規表現クエリ文字列は、EventID 属性を使用して一般的なアカウント管理イベントを識別します。

イベントのタイプ 正規表現
ユーザー アカウントが作成されました "EventID\"\:\s*4720
ユーザー アカウントが有効 "EventID\"\:\s*4722
ユーザー アカウントが無効 "EventID\"\:\s*4725
ユーザー アカウントが削除されました "EventID\"\:\s*4726
ユーザー権限の変更 "EventID\"\:\s*4703
セキュリティが有効なグローバル グループに追加されたメンバー "EventID\"\:\s*4728
セキュリティが有効なグローバル グループからメンバーを削除しました "EventID\"\:\s*4729
セキュリティが有効なグローバル グループが削除されました "EventID\"\:\s*4730

ログイン成功イベントを探す

これらの正規表現クエリ文字列は、EventID 属性と LogonType 属性を使用して、成功したログオン イベントのタイプを識別します。

イベントのタイプ 正規表現
ログオンの成功 "EventID\"\:\s*4624
ログオンの成功 - インタラクティブ(LogonType=2) "EventID\"\:\s*4624.*?LogonType\"\:\s*\"2\"
ログオンの成功 - バッチログイン(LogonType=4) "EventID\"\:\s*4624.*?LogonType\"\:\s*\"4\"
ログオンの成功 - サービス ログイン(LogonType=5) "EventID\"\:\s*4624.*?LogonType\"\:\s*\"5\"
ログイン成功 - リモート インタラクティブ ログイン(LogonType=10) "EventID\"\:\s*4624.*?LogonType\"\:\s*\"10\"
ログオンの成功 - インタラクティブ、バッチ、サービス、リモート インタラクティブ (?:"EventID\"\:\s*4624.*?LogonType\"\:\s*\")(?:2|4|5|10)\"

ログイン失敗イベントを探す

これらの正規表現クエリ文字列は、EventID 属性と LogonType 属性を使用して、失敗したログオン イベントのタイプを識別します。

イベントのタイプ 正規表現
ログイン失敗 "EventID\"\:\s*4625
ログイン失敗 - インタラクティブ(LogonType=2) "EventID\"\:\s*4625.*?LogonType\"\:\s*\"2\"
ログオンの失敗 - バッチログイン(LogonType=4) "EventID\"\:\s*4625.*?LogonType\"\:\s*\"4\"
ログイン失敗 - サービス ログイン(LogonType=5) "EventID\"\:\s*4625.*?LogonType\"\:\s*\"5\"
ログオンの失敗 - リモート インタラクティブ ログイン(LogonType=10) "EventID\"\:\s*4625.*?LogonType\"\:\s*\"10\"
ログオンの失敗 - インタラクティブ、バッチ、サービス、リモート インタラクティブ (?:"EventID\"\:\s*4625.*LogonType\"\:\s*\")(?:2|4|5|10)\"

プロセス、サービス、タスクのイベントを探す

これらの正規表現クエリ文字列は、EventID 属性を使用して特定のプロセスとサービス イベントを識別します。

イベントのタイプ 正規表現
プロセスの開始 "EventID\"\:\s*4688
プロセスの終了 "EventID\"\:\s*4689
サービスがインストールされました "EventID\"\:\s*4697
新しいサービスが作成されました "EventID\"\:\s*7045
タスクのスケジュールが作成されました "EventID\"\:\s*4698

これらの正規表現クエリ文字列は、EventID 属性を使用して、さまざまな種類のプロセスとサービス関連のイベントを識別します。

イベントのタイプ 正規表現
監査ログを消去しました "EventID\"\:\s*1102
オブジェクト アクセスが試行されました "EventID\"\:\s*4663
共有アクセス "EventID\"\:\s*5140

トラブルシューティング

次の表を使用して、一般的な未加工ログ検索の問題を解決します。

問題 説明 修正
検索によって結果の数が異なる 複数のログソース([すべて])に対してクエリを実行すると、バッチ ストレージと分散サンプリングの大きなバッチ(1,000 件以上のイベントを含むバッチ)の 1,000 件の結果の上限により、最近取り込まれたログの単一ソースのクエリと比較して、結果の合計数が異なる場合があります。 [ログソース] メニューから特定のログソースを選択するか、log_source = IN["LOG_SOURCE_NAME"] を使用してフィルタし、検索期間を絞り込みます。
結果が切り捨てられたか、サンプリングされた(結果の上限 10,000 件に達した) 検索クエリが UI、CSV エクスポート、または SearchRawLogs API(page_size)全体で 10,000 件を超えるログと一致し、10,000 件の結果のサンプルのみが返されました。 クエリの時間枠を短縮し(1 時間など)、特定の RE2 正規表現または parsed = false フィルタを追加します。
ボリューム取り込みの監査の不一致 保護バッチとシャードの上限がメモリ内フィルタリングの前に適用されるため、未加工のログ検索結果の数が取り込まれたログの合計量と一致しません。 UDM 検索、UDM 検索の統計情報と集計、取り込みの健全性指標を使用して、取り込みの完全性とボリュームのパリティを確認します。
クエリが文字数制限を超えている 検索文字列が、未加工ログクエリの 150 文字の上限を超えています。 正規表現を簡略化するか、個々のログソースを対象とする小さな個別のクエリに分割します。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。