13章
2 イベントログのファストフォレンジック
イベントログの種類(カテゴリー)やイベント内容は多岐にわたり、蓄積される情報量も膨大です。効率的に調査を行うためには、必要なイベントに的を絞った抽出作業が必須となります。
ここでは、インシデントレスポンスの主な調査対象となるイベントを一括して抽出できるイベントログ解析ツールとして、Microsoft社が提供している「 Log Parser Studio」を紹介します。
イベントログ解析ツール:Log Parser Studio
「Log Parser Studio」は、GUIで感覚的に使いやすいログ解析ツールです。Microsoft社が提供するCUIツールの「Log Parser」をパーサーのエンジンとして使用します。Windowsイベントログのほか、IISログ、XML・CSV・TSV・W3C等の汎用的なログ形式、Windowsレジストリなど、多種多様な形式に対応しています。
セットアップする際は、まず「Log Parser」をインストールした後、「 Log Parser Studio」のZIPファイルを解凍して任意のフォルダへ展開して下さい。展開したフォルダ内の「LPS.exe」をダブルクリックすると、「Log Parser Studio」が起動します。
- Log Parser 2.2 (CUI)日本語版 ※インストールが必要
- Log Parser Studio(GUI) ※解凍のみで実行可能(Log Parserのインストールが前提)
Log Parser Studioは、各種イベントログファイル(.evtx)を入力データとして指定し、あらかじめ準備した「クエリ」と呼ばれる抽出条件により必要なイベントを抽出します。抽出結果はGUI画面に表示され、検索/並べ替えなどの分析作業を行うことができます。また、抽出したイベントをCSVファイルに出力して、表計算アプリケーション等で分析することもできます。
「クエリ」は、Microsoft社が作成したスタンダードな抽出条件がデフォルトで標準提供されます。また、ユーザーが自分で抽出条件を作成し、「カスタムクエリ」としてインポートすることもできます。
サイバーディフェンス研究所のCDIR-Aでは、Log Parser Studioをファストフォレンジックで活用するため、インシデントレスポンスに特化した内容のカスタムクエリ・ライブラリを提供しています。カスタムクエリ・ライブラリの詳細については後述します。
以下は、Log Parser Studioで、Security.evtxからログオンのイベント(イベントID:4624)を抽出するクエリを実行した結果の画面例です。

カスタムクエリのセットアップ
セットアップ直後のLog Parser Studioを起動した初期画面では、「Library」タブ画面が開き、Microsoft社から標準提供されるクエリのリストが表示されます。

標準提供のクエリは、イベントログ以外のログを対象とするものも多く、一般的なトラブルシューティングやセキュリティ監査を主眼としたものが中心です。これだけでは、インシデントレスポンスの調査に必要なイベントをカバーできません。
サイバーディフェンス研究所のCDIR-Aでは、インシデントレスポンスに特化した内容のカスタムクエリ・ライブラリを、日本語で提供しています。以後は、このカスタムクエリを活用した、Log Parser Studioによる解析方法を紹介します。
以下は、CDIR-Aが提供するカスタムクエリを、Log Parser Studioにインポートした後の画面例です。

CDIR-Aのカスタムクエリで提供されるイベントの抽出条件は、以下の39パターンです。数が少し多いですが、どのようなパターンがあるか、一通り確認しておくことをお勧めします。
| クエリの抽出対象 | 抽出条件 |
|---|---|
| 【AD】Kerberosサービスチケット(ST)要求 | ソース Microsoft-Windows-Security-Auditing、イベントID 4769のレコードを抽出する。 |
| 【AD】Kerberos事前認証失敗 | ソース Microsoft-Windows-Security-Auditing、イベントID 4771のレコードを抽出する。 |
| 【AD】Kerberos認証チケット(TGT)要求 | ソース Microsoft-Windows-Security-Auditing、イベントID 4768のレコードを抽出する。 |
| 【Misc】ネットワーク共有 | ソース Microsoft-Windows-Security-Auditing、イベントID 5140のレコードを抽出する。デフォルトでは有効になっていないため出力されない可能性が高い。同ソース、イベントIDでも出力するフィールドの内容が異なるパターンがあることを確認しているため、レコードによっては正しく出力されない可能性がある。 |
| 【Misc】プロセス生成 | イベントID 4688のレコードを抽出する。デフォルトでは有効になっていないため出力されない可能性が高い。 |
| 【Misc】ログオフイベントのないログオン | SIDを基準にして、イベントID 4624があり、4634が残っていないレコードを抽出する。to_dateを解析したい日付に変更する必要がある。 |
| 【Misc】ログ消去 | ソース Microsoft-Windows-Eventlog、イベントID 104(Security以外)と1102(Security)のレコードを抽出する。ユーザ名と消去イベントログファイル名を表示する。 |
| 【Misc】全レコード | 指定イベントログファイルの全レコード、全カラムを抽出する。 |
| 【PowerShell】プロバイダの開始 | ソース PowerShell、イベントID 600のレコードを抽出する。 |
| 【PowerShell】全レコード | ソース PowerShellとMicrosoft-Windows-PowerShellのレコードを抽出する。 |
| 【RDP】リモートデスクトップユーザ認証 | ソース Microsoft-Windows-TerminalServices-RemoteConnectionManager、イベントID 1149のレコードを抽出する。 |
| 【RDP】リモートデスクトップログオン | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 10のレコードを抽出する。 |
| 【RDP】リモートデスクトップ全般 | ソース Microsoft-Windows-TerminalServices-LocalSessionManager、イベントID 21(ログオン)、23(ログオフ)、24(切断)、25(再接続)のレコードを抽出する。 |
| 【アカウント】ユーザ作成 | イベントID 4722、イベントタイプ Success Audit eventのレコードを抽出する。 |
| 【アカウント】ユーザ削除 | イベントID 4726、イベントタイプ Success Audit eventのレコードを抽出する。 |
| 【サービス】インストール | イベントID 7045のレコードを抽出する。 |
| 【サービス】開始の種類変更 | イベントID 7040のレコードを抽出する。サービスの開始の種類の変更がわかる。 |
| 【サービス】強制終了 | イベントID 7034のレコードを抽出する。強制終了したサービス名と終了回数がわかる。 |
| 【サービス】状態変更 | ソース Service Control Manager、イベントID 7036のレコードを抽出する。 |
| 【サービス】登録/実行(リモート) | イベントID 4697のレコードを抽出する。デフォルトでは有効になっていないため出力されない可能性が高い。 |
| 【タスク】タスク/ジョブ関連 | イベントID 100, 106, 140, 141, 200のレコードを抽出する。処理内容(開始、登録、更新、削除)とジョブ名、ユーザ名、プログラム名を表示する。 |
| 【稼働状況】システム異常終了 | ソース EventLog、イベントID 6008のレコードを抽出する。 |
| 【稼働状況】システム起動停止 | ソース Microsoft-Windows-Kernel-General、イベントID 12、13のレコードを抽出する。 |
| 【稼働状況】システム時刻変更 | ソース Microsoft-Windows-Kernel-General、イベントID 1のレコードを抽出する。そのうちの時間変更秒数が2秒以上のログを表示する。 |
| 【稼働状況】スリープ/スリープ解除 | ソース Microsoft-Windows-Power-Troubleshooter、イベントID1のレコードを抽出する。 |
| 【稼働状況】ネットワーク接続/切断 | ソース Microsoft-Windows-NetworkProfile、イベントID 10000, 10001のレコードを抽出する。ファイルはMicrosoft-Windows-NetworkProfile%4Operational.evtx |
| 【認証】ネットワークログオン | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 3のレコードを抽出する。そのうちANONYMOUS LOGONと自身からのログオンのレコードを除外して表示する。 |
| 【認証】ネットワークログオン(クリアテキスト) | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 8のレコードを抽出する。パスワードが平文で認証パッケージへ渡されたことを意味する。 |
| 【認証】ネットワークログオン(全ログ) | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 3のレコードを抽出する。 |
| 【認証】ユーザ別ログオン回数 | ソース Microsoft-Windows-Security-Auditing、イベントID 4624のレコードから、SID、ユーザ名を基準にしてログオン回数順に表示する。 |
| 【認証】ログオン(キャッシュ) | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 11のレコードを抽出する。ドメインコントローラに接続せずキャッシュされている認証情報を用いたログオンが該当する。 |
| 【認証】ログオン失敗 | ソース Microsoft-Windows-Security-Auditing、イベントID 4625-4633, 4635のレコードを抽出する。 |
| 【認証】ログオン全般 | ソース Microsoft-Windows-Security-Auditing、イベントID 4624のレコードを抽出する。そのうちANONYMOUS LOGONと自身からのログオンを除外して、タイプ別情報を付加して表示する。 |
| 【認証】ロック解除 | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 7のレコードを抽出する。 |
| 【認証】資格情報の確認(エラー) | ソース Microsoft-Windows-Security-Auditing、イベントID 4776のレコードを抽出する。そのうちエラーコードが0x0(成功)のレコードは除外する。 |
| 【認証】新しい資格情報を指定したログオン | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 9のレコードを抽出する。 |
| 【認証】対話型ログオン | ソース Microsoft-Windows-Security-Auditing、イベントID 4624、ログオンタイプ 2のレコードを抽出する。 |
| 【認証】特権割り当て | ソース Microsoft-Windows-Security-Auditing、イベントID 4672のうち、セキュリティID S-1-5-18を除外して抽出する。 |
| 【認証】別アカウントのログオン | ソース Microsoft-Windows-Security-Auditing、イベントID 4648のレコードを抽出する。そのうちtaskhost, taskengとlocalhostに閉じたレコードを除外して表示する。 |
クエリの実行
保全したイベントログファイルから、カスタムクエリでイベントを抽出する手順を紹介します。
まず、次の手順で、抽出対象のイベントログファイルを指定します。
- ログファイル選択アイコンをクリック →「Add Files」をクリック → ファイル選択画面で対象のイベントログファイルを選択 →「OK」をクリック

上記は、保全された「Security.evtx」ファイルを指定した例です。チェックボックスをオンにすることにより、複数のファイルを一括で指定することも可能です。CDIR-Cで保全した場合は、イベントログが収集された「Evtx」フォルダを「Add Folder」で指定し、すべてのイベントログファイルを対象にすることを推奨します。
次に、「Library」タブに表示されているカスタムクエリの中から、実行したいクエリを選択し、右クリックメニューから「Run Now」をクリックします。CtrlキーやShiftキーを押しながら複数選択することで、複数のクエリを同時に実行することも可能です。
以下は「【認証】ログオン全般」を実行する例です。

クエリが実行され、イベントの抽出結果が新しいタブ「Q1」として表示されます。クエリを実行するたびに、新しいタブ名の番号が「Q2」「Q3」・・・とカウントアップされます。同様に、複数のクエリを同時に実行した場合も、それぞれの抽出結果が複数の新しいタブで表示されます。
以下の例では、「Q1」タブに2件のログオン・イベントが抽出されています。

なお、実行したクエリの構文は、画面下部に表示されます。
上の図では途中までしか表示されていませんが、スクロールすると全文を確認できます。
以下は、上記で実行したクエリの全文です。
SELECT
TimeGenerated AS 日時,
ComputerName AS コンピュータ名,
EventLog AS ファイル名,
EXTRACT_TOKEN(Strings,0,'|') AS 元SID,
EXTRACT_TOKEN(Strings,1,'|') AS 元ユーザ,
EXTRACT_TOKEN(Strings,2,'|') AS 元ドメイン,
EXTRACT_TOKEN(Strings,3,'|') AS 元ログオンID,
EXTRACT_TOKEN(Strings,4,'|') AS 先SID,
EXTRACT_TOKEN(Strings,5,'|') AS 先ユーザ,
EXTRACT_TOKEN(Strings,6,'|') AS 先ドメイン,
EXTRACT_TOKEN(Strings,7,'|') AS 先ログオンID,
EXTRACT_TOKEN(Strings,9,'|') AS ログオンプロセス,
EXTRACT_TOKEN(Strings,10,'|') AS 認証パッケージ,
EXTRACT_TOKEN(Strings,11,'|') AS ワークステーション名,
EXTRACT_TOKEN(Strings,12,'|') AS ログオンGUID,
EXTRACT_TOKEN(Strings,16,'|') AS プロセスID,
EXTRACT_TOKEN(Strings,17,'|') AS プロセス名,
EXTRACT_TOKEN(Strings,18,'|') AS IPアドレス,
CASE TO_INT(EXTRACT_TOKEN(Strings,8,'|'))
WHEN 2 THEN '02_対話型'
WHEN 3 THEN '03_ネットワーク'
WHEN 4 THEN '04_Batch'
WHEN 5 THEN '05_サービス'
WHEN 7 THEN '07_ロック解除'
WHEN 8 THEN '08_NetworkCleartext'
WHEN 9 THEN '09_NewCredentials'
WHEN 10 THEN '10_RemoteInteractive'
WHEN 11 THEN '11_CachedInteractive'
END AS LogonType
FROM
'[LOGFILEPATH]'
WHERE
SourceName = 'Microsoft-Windows-Security-Auditing' AND
EventID = 4624 AND
先ユーザ <> 'ANONYMOUS LOGON' AND
IPアドレス <> '-' AND
IPアドレス <> '::1'
クエリは、上記のようにSQL言語形式で記述されています。
概要は次のとおりです。
SELECT ~
抽出結果に出力する項目を設定します。「AS 〇〇〇」で、項目名を任意に設定できます。また、「CASE ~」句で、出力項目の内容によって表示する説明文等を設定できます。上記の例では、ログオンタイプ(2,3, ...)によって「
02_対話型」「03_ネットワーク」などの説明を表示させています。FROM ~
抽出対象のログファイルを設定します。「Log Parser Studio」を使用する場合は、「
'[LOGFILEPATH]'」と指定することで、選択されたログファイルが自動的に設定されます。WHERE ~
抽出条件を指定します。上記の例では、ソース(SourceName)とイベントID(EventID)のほか、ログインユーザー名が「ANONYMOUS LOGON」の場合は除外する、などの条件が加えられています。
クエリ作成方法の詳細は、CUIツールの「Log Parser」に付属するヘルプファイル(LogParser.chm)を参照して下さい(Log Parserのインストールフォルダに保存されます)。

また、「Log Parser Studio」のHelpメニューから「LP 2.2 Function Reference」を選択すると、簡易的なクエリ構文のリファレンスを見ることができます。
CSVファイルの出力(Export)
イベントの抽出結果は、Log Parser Studioの画面上でも検索や並べ替えができますが、抽出結果が大量である場合などはCSVファイルへ出力し、表計算アプリケーションで分析することもできます。
CSVファイルへ出力する場合は、対象抽出結果のタブ画面から、Exportアイコン(右向き矢印)をクリックします。

ファイル選択画面が表示されるので、出力するフォルダとCSVファイル名を指定します。

出力されたCSVファイルは、表計算アプリケーションで分析することができます。
なお、CSVファイルの先頭行には、クエリの出力項目が列名として表示されます。出力項目は、クエリごとに異なります。

イベントログを解析する際には、一般的にはまず幅広い条件のクエリで抽出し、出力される情報の量や内容によって、徐々に条件を絞っていく方法が合理的でしょう。
一方、管理者権限が奪取されて重要なサーバにアクセスされているなど、被害が具体的に確認されており、ある程度見るべきポイントが絞られているような場合、最初から絞り込んだ条件のクエリを実行して、迅速に調査を進めるべきケースもあります。
イベントログには多種多様で膨大な情報が記録されています。効率的に調査するには、インシデントの状況を冷静に分析し、収集すべき情報を整理することが必要です。