
純粋なPythonで書かれたイベントトレースログファイルパーサー
純粋なPythonで書かれたイベントトレースログファイルリーダー
etl-parser は、ETL Windowsログファイルのための純粋なPython 3パーサーライブラリです。ETL は ETW のデフォルト形式であり、カーネルロガーのデフォルト形式でもあります。
etl-parser にはシステム依存関係がなく、Windows と Linux の両方で問題なく動作します。
この形式は文書化されていないため、Geoff Chappel のブログの情報と、Airbus CERTチームによるリバースエンジニアリング活動を統合しました。
ETL とは何か、そしてなぜ扱いにくいのでしょうか? ETL をコンテナと考えてください。動画ファイルにおける AVI のようなものです。ETL の読み取りは、適切なコーデックなしで AVI ファイルを読み取るのと同じくらいイライラさせられます。
etl-parser は、次のよく知られたログ形式のパーサーを含めることで、この問題を解決しようとしています。
etl-parser の使い方は?etl-parser は2つのスクリプトを提供します。
最初のスクリプト etl2xml は、既知のすべてのETLイベントをXMLに変換します。
etl2xml -i example.etl -o example.xml
2番目のスクリプト etl2pcap は、netsh で作成されたネットワークキャプチャを pcap ファイル形式に変換します。
netsh trace start capture=yes
netsh trace stop
etl2pcap -i NetTrace.etl -o NetTrace.pcap
etl-parser をライブラリとして使用することもできます。
from etl.etl import IEtlFileObserver, build_from_stream
from etl.system import SystemTraceRecord
from etl.perf import PerfInfo
from etl.event import Event
from etl.trace import Trace
from etl.wintrace import WinTrace
class EtlFileLogger(IEtlFileObserver):
def on_system_trace(self, event: SystemTraceRecord):
"""Mof kernel message with Process Id and Thread Id"""
mof = event.get_mof() # Invoke MOF parser
def on_perfinfo_trace(self, event: PerfInfo):
"""Mof kernel message with timestamp"""
mof = event.get_mof() # Invoke MOF parser
def on_trace_record(self, event: Trace):
"""unknown"""
def on_event_record(self, event: Event):
"""ETW event this is what you search"""
# Choose the "parse_" function which corresponds to your event
message = event.parse_tracelogging() # Invoke TraceLogging parser
message = event.parse_etw() # Invoke Manifest based parser
def on_win_trace(self, event: WinTrace):
"""unknown"""
etw = event.parse_etw()
with open("example.etl", "rb") as etl_file:
etl_reader = build_from_stream(etl_file.read())
etl_reader.parse(EtlFileLogger())
etl-parser は pip から入手できます。
pip install etl-parser
あるいは、setup.py を使用して etl-parser をインストールすることもできます。
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
解析エラーが発生した場合は、Airbus CERT GitHub リポジトリで Issue を開いてください。
EVTX ログ形式はかなりよく文書化されており、現在多くのライブラリやツールが利用可能です。しかし、ETL についてはそうではありません。開発時点では、既知の重要なオープンソースプロジェクトは存在せず、ETL 形式は十分に文書化されていません。
ETL は、Windows システムプログラマーによって有用なアーティファクトをログに記録するために広く使用されています。
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl via netshC:\Windows\System32\WDI\<GUID>\<GUID>\snapshot.etlTracelogging や WPP などの多くの新しい API は ETW に基づいています。これらの API は、Microsoft の開発者によって Windows で広く使用されています。Tracelogging は etl-parser で対応していますが、WPP は将来のリリースで対応予定です。
Microsoft は、xperf.exe、logman.exe、netsh.exe など、ETL トレースを作成する多くのコンシューマーを提供しています。
DFIR アナリストにとっての宝の山だと私たちは考えています。
etl-parser は Apache 2.0 ライセンスの下でリリースされています。