概略
Windowsのイベントログ(.evtx)は、OSやアプリケーションの動作を時系列で記録する、フォレンジックや監査に欠かせない情報源です。 しかし、標準のイベントビューアーでは膨大なログを横断的に分析するのが難しく、効率的な調査には不向きです。
そこで登場するのが、エリック・ジマーマン(Eric Zimmerman)氏が開発したツール群「Zimmerman Tools」のひとつ、EvtxECmd です。コマンドラインベースで軽快に動作し、イベントログを構造化データ(CSVやJSONなど)に変換して解析を容易にします。
本稿では、EvtxECmdの概要から環境準備、基本操作、そしてmapファイルによるデータの意味づけまで、実務やCTF、デジタルフォレンジックの現場で活用できる入門情報を整理します。
EvtxECmdの概要
EvtxECmd(Event Log Parser)は、Windowsイベントログ(*.evtx)を解析して、イベントごとの属性(EventID、Provider、UserName、ProcessNameなど)を展開し、CSVやJSON形式で出力するツールで、次のような特徴があります。
主な特徴
- コマンドラインで軽量に動作(GUI不要)
- CSV / JSON / XML / JSONL 形式での出力に対応
- EventIDごとに定義された mapファイル に基づく柔軟な構造化解析
- フォルダ再帰処理・タイムゾーン指定・大量ログ処理に対応
- 同一フォーマットのイベントログを一括処理できる
これにより、調査者は数万件規模のイベントログでも、表計算ソフトやスクリプトで自在に解析可能な形 に変換できます。
EvtxECmdの動作環境
Zimmerman氏の公式サイトによると、CLIツール群(EvtxECmd含む)は以下のランタイム向けにビルドされています。
All CLI tools will continue to be built for both .NET 4.6.2, .NET 6 and .NET 9 (for now)
※GUIツールの更新は今後 .NET 9 専用
対応ランタイムと推奨環境
| ランタイム | 状況 | 備考 |
|---|---|---|
| .NET Framework 4.6.2 | 対応 | 旧環境向け、オフライン互換性あり |
| .NET 6 (EOL) | 対応 | CLI版は動作可、GUIツール更新は終了 |
| .NET 9 (最新) | 推奨 | 今後の更新対象。GUIツールとの親和性が高い |
今後のことを考えると .NET 9 を使うのが良いですが、対応する.NETランタイムが含まれていれば問題ありません。導入されている .NETランタイムを確認するには次のコマンドを実行します。
dotnet --list-runtimes
EvtxECmdのダウンロードとセットアップ
公式サイトやGitHubページには複数の.NETビルドが用意されていますが、ファイル名はどのバージョンでも同じ EvtxECmd.zip です。そのため、ダウンロード先のURLを間違えないよう注意が必要です。1
| 対応ランタイム | ダウンロードURL |
|---|---|
| .NET 4.6.2 | https://download.ericzimmermanstools.com/EvtxECmd.zip |
| .NET 6 | https://download.ericzimmermanstools.com/net6/EvtxECmd.zip |
| .NET 9 | https://download.ericzimmermanstools.com/net9/EvtxECmd.zip |
セットアップ手順
- 上記リンクから
EvtxECmd.zipをダウンロード - 任意のフォルダ(例:
C:\Tools\EvtxECmd)に展開 -
EvtxECmd.exeが存在することを確認 -
.NET Runtimeが未導入の場合はMicrosoft公式サイトからインストール
EvtxECmdはインストール不要のポータブル形式です。PowerShellやコマンドプロンプトから直接実行できます。
EvtxECmdの基本的な使い方
単一ファイルの解析
EvtxECmd.exe -f "C:\Windows\System32\winevt\Logs\Security.evtx" --csv "C:\Output"
出力先フォルダに、解析済みのCSVファイルが生成されます。
フォルダ再帰処理
EvtxECmd.exe -d "C:\Forensics\Logs" --csv "C:\Output"
-d オプションでフォルダを指定すると、配下の .evtx ファイルを再帰的に処理します。
出力形式
出力形式はCSV、JSONなどを次のように指定します。
| オプション | 出力形式 |
|---|---|
--csv |
CSV形式(一般的な解析に最適) |
--json |
JSON形式 |
--jsonl |
JSON Lines形式(スクリプト処理向け) |
--xml |
XML形式(map作成時などに使用) |
出力ファイル名指定
出力するファイル名の指定は必須ではありませんが、次のオプションで指定することもできます。
| オプション | 出力形式 |
|---|---|
--csvf |
CSV形式 |
--jsonf |
JSON形式 |
--jsonlf |
JSON Lines形式 |
--xmlf |
XML形式 |
EvtxECmd.exe -f "C:\Windows\System32\winevt\Logs\Security.evtx" --csv "C:\Output" --csvf "SecurityLog.csv"
mapファイルの概要とカスタマイズ
mapファイルの必要性
Windowsのイベントログは、イベントIDごとに構造が異なり、同じチャネル(例: Security.evtx)でも「ログオン」「ログオフ」「サービス起動」などで含まれるフィールドがまったく違います。このためEvtxECmdは、CSV出力時にすべての項目を固定列として持つことができません。
そこで、EvtxECmdは PayloadData1~PayloadData6 という汎用カラムを設け、イベントIDごとに異なる内容をこれらの列に割り当てます。たとえば、ログオンイベント(4624)では「ユーザー名やドメイン情報」、システムイベント(6005)では「起動したコンピューター名」などが同じ PayloadData1 に入る場合があります。
この「どのイベントで、どのデータを、どの列に入れるか」を定義しているのが mapファイル です。EvtxECmdは、mapファイルを参照して EventData のXML構造を解析し、PayloadData列に格納すべき値を抽出して可読化します。
mapファイルの構造と具体例
mapファイルは YAML形式 で記述され、対象チャネル・イベントID・プロバイダーを識別するヘッダーと、値抽出のためのXPath指定を含みます。
例1: Security_Microsoft-Windows-Security-Auditing_4624.Map
Author: Eric Zimmerman
Description: Security 4624 event
EventId: 4624
Channel: Security
Provider: Microsoft-Windows-Security-Auditing
Maps:
-
Property: PayloadData1
PropertyValue: "Target: %TargetDomainName%\%TargetUserName%"
Values:
-
Name: TargetDomainName
Value: "/Event/EventData/Data[@Name=\"TargetDomainName\"]"
-
Name: TargetUserName
Value: "/Event/EventData/Data[@Name=\"TargetUserName\"]"
この例では、Securityログ(EventID 4624)からターゲットユーザー情報を PayloadData1 に整形して出力します。TargetDomainName と TargetUserName の2つの値を抽出し、「Target: ドメイン\ユーザー」という形式でCSVに表示されます。
例2: System_EventLog_6005.Map
Author: Eric Zimmerman
Description: System 6005 event
EventId: 6005
Channel: System
Provider: EventLog
Maps:
-
Property: PayloadData1
PropertyValue: "Computer: %Computer%"
Values:
-
Name: Computer
Value: "/Event/System/Computer"
この場合、SystemログのEventID 6005("Event log service started")に対して、イベント内の <System><Computer> 要素からコンピューター名を取得し、CSV出力の PayloadData1 に「Computer: ホスト名」という形式で表示します。
Lookup機能(変換表)
mapファイルには、数値コードを人間が読みやすい文字列に変換するための Lookup 定義を含めることもできます。
Lookups:
-
Name: WakeSourceType
Default: Unknown code
Values:
0: Unknown
1: Power button
3: Hibernate resume
5: Device
6: Timer
EvtxECmdは、ログ中の数値をこの表に基づいて置き換えます。単に数字だけで出力されるよりも、人が理解しやすくなります。
カスタムmapファイルの作り方
-
.evtxファイルをXML形式で出力EvtxECmd.exe -f Security.evtx --xml C:\Temp\xml - XMLを開いて対象EventIDの
<EventData>内にあるData Name="..."を確認 - 既存のmapファイルをコピーし、先頭に
1_を付けてカスタム名に変更
例:1_Security_Microsoft-Windows-Security-Auditing_4624.Map - 抽出対象のXPathを編集して保存
- EvtxECmdを再実行して結果を確認
mapファイルはファイル名順に読み込まれるため、1_ 付きのカスタムmapが標準版より優先されます。これにより、アップデートで既存mapが更新されても、自分の定義が上書きされません。
最後に
EvtxECmdは、Windowsイベントログを高速かつ柔軟に構造化できる強力なCLIツールです。特にmapファイルの存在により、イベントIDごとに異なるデータ構造を理解し、汎用的なPayload列を意味づけのあるデータ(ユーザー名、ホスト名、ログオン種別など)に変換できます。
フォレンジック、脅威ハンティング、SOC運用などの現場では、この「mapによるデータの再構造化」が分析の効率を大きく向上させます。まずは標準のmapを確認し、必要に応じてカスタマイズしてみましょう。
-
その他の Zimmerman Toolsを含めて一括インストールする
Get-ZimmermanToolsというスクリプトが用意されていますが、本稿では扱いません。 ↩