
Analizador de archivos de registro de traza de eventos en Python puro
Lector de archivos de registro Event Trace Log en Python puro
etl-parser es una biblioteca de análisis pura de Python 3 para archivos de registro ETL de Windows. ETL es el formato predeterminado para ETW así como el formato predeterminado para el registrador del kernel.
etl-parser no tiene dependencias del sistema y funcionará bien tanto en Windows como en Linux.
Dado que este formato no está documentado, combinamos información del blog de Geoff Chappel y actividades de ingeniería inversa realizadas por el equipo Airbus CERT.
¿Qué es ETL y por qué es un dolor de cabeza trabajar con él? Considere ETL como un contenedor, similar a AVI para archivos de video. Leer ETL es igualmente frustrante que leer un archivo AVI sin el códec adecuado.
etl-parser intenta resolver este problema incluyendo analizadores para los siguientes formatos de registro conocidos:
etl-parser?etl-parser ofrece dos scripts.
El primer script, etl2xml, transforma todos los eventos ETL conocidos en XML:
etl2xml -i example.etl -o example.xml
El segundo script, etl2pcap, transforma las capturas de red creadas mediante netsh al formato de archivo pcap:
netsh trace start capture=yes
netsh trace stop
etl2pcap -i NetTrace.etl -o NetTrace.pcap
También puedes usar etl-parser como biblioteca:
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 está disponible desde pip:
pip install etl-parser
Alternativamente, puedes instalar etl-parser usando setup.py:
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
Si encuentras un error de análisis, por favor abre un issue en el repositorio de GitHub de Airbus CERT.
El formato de registro EVTX está bastante bien documentado, con muchas bibliotecas y herramientas disponibles hoy en día. Esto no es cierto para ETL: en el momento del desarrollo, no hay ningún proyecto significativo de código abierto que conozcamos y el formato ETL no está bien documentado.
ETL es utilizado masivamente por programadores de sistemas de Windows para registrar artefactos útiles:
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl mediante netshC:\Windows\System32\WDI\<GUID>\<GUID>\snapshot.etlMuchas API nuevas como Tracelogging o WPP se basan en ETW. Estas API son utilizadas extensamente por los desarrolladores de Microsoft para Windows. Tracelogging es abordado por etl-parser, WPP se abordará en una futura versión.
Microsoft ofrece muchos consumidores que crean trazas ETL, como xperf.exe, logman.exe, netsh.exe, etc.
Creemos que es una mina de oro para los analistas de DFIR.
etl-parser se publica bajo la licencia Apache 2.0.