evtx ログの説明#
Windows の evtx ログの保存場所
%SystemRoot%\System32\Winevt\Logs\
主なログには、アプリケーション、セキュリティ、システムログなどが含まれます。ログのデフォルトサイズは 20484K(20M)であり、超過した部分は期限切れのログを上書きします。
Windows に付属のイベントビューアを使用して、対応するログを表示できます。
ID が 4624 のイベントをランダムにクリックすると、次のような内容が表示されます。XML ビューに切り替えると、XML 形式のログを表示できます。
evtx_dump#
evtx ログを解析するためのツール
A Fast (and safe) parser for the Windows XML Event Log (EVTX) format
対応するバージョンをダウンロードしてください:
https://github.com/omerbenamram/evtx/releases
evtx_dump <evtx_file> XML形式でダンプする
evtx_dump -o json <evtx_file> JSON形式でダンプする
evtx_dump -f <output_file> -o json <input_file> 指定したファイルに出力する
fdと組み合わせて使用すると、一括処理が容易になります
fd -e evtx -x evtx_dump -o jsonl evtx拡張子のファイルを個別のjsonファイルにダンプする
fd -e evtx -x evtx_dump '{}' -f '{.}.xml evtxに対応するxmlファイルを作成し、内容を対応するxmlファイルに保存する
fd -a -e evtx | xargs -I input sh -c "evtx_dump -o jsonl input | jq --arg path "input" '. + {path: \$path}'"
-e:ファイルの拡張子
-a:隠しファイルやディレクトリを検索する
xargs -I input sh -c “command”:input変数を渡し、commandを実行する
jq --arg path “input” ‘. + {path: \$path}’:path変数を出力のjsonファイルに追加する
抽出#
evtx ファイルから EventID を抽出する
evtx_dump temp_scheduled_task_4698_4699.evtx -o jsonl | jq '.Event.System.EventID'
EventID をソートして数を集計する
evtx_dump Security.evtx -o jsonl | jq '.Event.System.EventID' | sort | uniq
イベント ID を確認することで、現在のログに含まれるほとんどのログの状態がわかります。上記の 5379 は Microsoft Windows Defender アンチウイルスソフトウェアに関連するイベントを示しており、このイベントは Windows Defender の対応するポリシー情報を記録し、Defender の定期的なスキャンや更新の状況を示します。4625 はログインの失敗を示し、ログが 1 つしかない場合、ログインのブルートフォース攻撃の試みは存在しないことを意味します。4672 は管理者のログインを示し、管理者としての操作も記録されます。これは Linux の sudo に似ており、1 回の sudo につき 1 つのログが記録されます。
イベント ID との対比により、関連するイベントの影響を判断できます。
複数のフィールドを抽出する
evtx_dump temp_scheduled_task_4698_4699.evtx -o jsonl | jq '.Event.System.EventID','.Event.System.Computer'
EvtxECmd#
EvtxECmd はイベントレコードファイル(evtx)の解析ツール(Windows 用)であり、標準の CSV、XML、および json 形式の出力を生成できます!カスタムマッピング機能もサポートしており、ロックされたファイルを処理し、その他の機能も提供しています!
使用法#
内容を json ファイルにエクスポートする
EvtxECmd.exe -f C:\Users\lca\Desktop\Security.evtx --json .
上記の図のように、Security.evtx を解析し、出力の末尾にイベント ID の数も集計されています。
現在のディレクトリに json ファイルが生成され、次に jq ツールを使用して json ファイルの内容を解析できます。
cat 20240813012115_EvtxECmd_Output.json | jq . -c | jq '. | select(.EventId==4624)'
# . -c : . is a jq filter that represents the entire input. -c compresses the output into a compact JSON string format.
# . | : . represents the entire JSON object passed in earlier
指定したフィールドを抽出する場合、例えば 4624 のログから MapDescription フィールドの内容を抽出する場合は次のようになります。
cat 20240813012115_EvtxECmd_Output.json | jq . -c | jq '. | select(.EventId==4624) | "\(.MapDescription)"'
# \(.MapDescription):抽出されたJSONオブジェクトからMapDescriptionフィールドの値を抽出し、文字列として出力します。
このような jq フィルタは、jq の構文に慣れることが主な目的です。
イベント ID の参考:Windows 応急対応マニュアルのメモ