纯Python的事件跟踪日志文件读取器
etl-parser 是一个纯 Python 3 解析库,用于解析 ETL Windows 日志文件。ETL 是 ETW 的默认格式,也是内核日志记录器的默认格式。
etl-parser 没有系统依赖,在 Windows 和 Linux 上都能良好运行。
由于该格式没有文档记录,我们结合了 Geoff Chappel 博客中的信息以及 Airbus CERT 团队进行的逆向工程成果。
什么是 ETL,为什么处理它很麻烦?可以将 ETL 视为容器,就像 AVI 对于视频文件一样。读取 ETL 的体验与在没有正确编解码器的情况下读取 AVI 文件类似令人沮丧。
etl-parser 通过包含以下知名日志格式的解析器来尝试解决这个问题:
etl-parser?etl-parser 提供了两个脚本。
第一个脚本 etl2xml 将所有已知的 ETL 事件转换为 XML:
etl2xml -i example.etl -o example.xml
第二个脚本 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.etl许多新的 API,如 Tracelogging 或 WPP,都基于 ETW。这些 API 被 Microsoft 开发人员广泛用于 Windows。Tracelogging 已由 etl-parser 处理,WPP 将在未来的版本中处理。
Microsoft 提供了许多可以创建 ETL 追踪的消费者,例如 xperf.exe、logman.exe、netsh.exe 等。
我们相信这是 DFIR 分析师的金矿。
etl-parser 在 Apache 2.0 许可证下发布。