0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EvtxECmd 入門 ― Windowsイベントログを自在に解析する

Last updated at Posted at 2025-11-25

概略

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

セットアップ手順

  1. 上記リンクから EvtxECmd.zip をダウンロード
  2. 任意のフォルダ(例: C:\Tools\EvtxECmd)に展開
  3. EvtxECmd.exe が存在することを確認
  4. .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 に整形して出力します。TargetDomainNameTargetUserName の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ファイルの作り方

  1. .evtx ファイルをXML形式で出力
    EvtxECmd.exe -f Security.evtx --xml C:\Temp\xml
    
  2. XMLを開いて対象EventIDの <EventData> 内にある Data Name="..." を確認
  3. 既存のmapファイルをコピーし、先頭に 1_ を付けてカスタム名に変更
    例: 1_Security_Microsoft-Windows-Security-Auditing_4624.Map
  4. 抽出対象のXPathを編集して保存
  5. EvtxECmdを再実行して結果を確認

mapファイルはファイル名順に読み込まれるため、1_ 付きのカスタムmapが標準版より優先されます。これにより、アップデートで既存mapが更新されても、自分の定義が上書きされません。

最後に

EvtxECmdは、Windowsイベントログを高速かつ柔軟に構造化できる強力なCLIツールです。特にmapファイルの存在により、イベントIDごとに異なるデータ構造を理解し、汎用的なPayload列を意味づけのあるデータ(ユーザー名、ホスト名、ログオン種別など)に変換できます。

フォレンジック、脅威ハンティング、SOC運用などの現場では、この「mapによるデータの再構造化」が分析の効率を大きく向上させます。まずは標準のmapを確認し、必要に応じてカスタマイズしてみましょう。

  1. その他の Zimmerman Toolsを含めて一括インストールする Get-ZimmermanToolsというスクリプトが用意されていますが、本稿では扱いません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?