
Parser für Event-Trace-Log-Dateien in reinem Python
Event Trace Log Dateileser in reinem Python
etl-parser ist eine reine Python-3-Parser-Bibliothek für ETL-Windows-Protokolldateien. ETL ist das Standardformat für ETW sowie das Standardformat für den Kernel-Logger.
etl-parser hat keine Systemabhängigkeiten und funktioniert sowohl unter Windows als auch unter Linux einwandfrei.
Da dieses Format nicht dokumentiert ist, haben wir Informationen aus dem Blog von Geoff Chappel und Reverse-Engineering-Aktivitäten des Airbus CERT-Teams zusammengeführt.
Was ist ETL und warum ist die Arbeit damit mühsam? Betrachten Sie ETL als einen Container, ähnlich wie AVI für Videodateien. Das Lesen von ETL ist ähnlich frustrierend wie das Lesen einer AVI-Datei ohne den richtigen Codec.
etl-parser versucht, dieses Problem zu lösen, indem es Parser für die folgenden bekannten Protokollformate enthält:
etl-parser?etl-parser bietet zwei Skripte an.
Das erste Skript, etl2xml, wandelt alle bekannten ETL-Ereignisse in XML um:
etl2xml -i example.etl -o example.xml
Das zweite Skript, etl2pcap, wandelt Netzwerkerfassungen, die mit netsh erstellt wurden, in das pcap-Dateiformat um:
netsh trace start capture=yes
netsh trace stop
etl2pcap -i NetTrace.etl -o NetTrace.pcap
Sie können etl-parser auch als Bibliothek verwenden:
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 ist über pip verfügbar:
pip install etl-parser
Alternativ können Sie etl-parser mit setup.py installieren:
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
Wenn Sie auf einen Parsing-Fehler stoßen, eröffnen Sie bitte ein Issue im Airbus CERT GitHub-Repository.
Das EVTX-Protokollformat ist recht gut dokumentiert, mit vielen Bibliotheken und Tools, die heute verfügbar sind. Dies gilt nicht für ETL: Zum Zeitpunkt der Entwicklung gibt es unseres Wissens kein nennenswertes Open-Source-Projekt, und das ETL-Format ist nicht gut dokumentiert.
ETL wird von Windows-Systemprogrammierern massiv genutzt, um nützliche Artefakte zu protokollieren:
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl via netshC:\Windows\System32\WDI\<GUID>\<GUID>\snapshot.etlViele neue APIs wie Tracelogging oder WPP basieren auf ETW. Diese APIs werden von Microsoft-Entwicklern für Windows intensiv genutzt. Tracelogging wird von etl-parser unterstützt, WPP wird in einer zukünftigen Version behandelt.
Microsoft bietet viele Konsumenten an, die ETL-Ablaufverfolgungen erstellen, wie z. B. xperf.exe, logman.exe, netsh.exe usw.
Wir glauben, dass dies eine Goldgrube für DFIR-Analysten ist.
etl-parser wird unter der Apache 2.0-Lizenz veröffentlicht.