
Analisador de arquivos de log de rastreamento de eventos em Python puro
Leitor de arquivos de log Event Trace Log em Python puro
etl-parser é uma biblioteca de análise em Python puro 3 para arquivos de log ETL do Windows. ETL é o formato padrão para ETW assim como o formato padrão para o Kernel logger.
etl-parser não tem dependências de sistema e funcionará bem tanto no Windows quanto no Linux.
Como este formato não é documentado, combinamos informações do blog de Geoff Chappel e atividades de engenharia reversa realizadas pela equipe da Airbus CERT.
O que é ETL e por que é um incômodo trabalhar com ele? Considere ETL como um contêiner, assim como AVI é para arquivos de vídeo. Ler ETL é igualmente frustrante quanto ler um arquivo AVI sem o codec correto.
etl-parser tenta resolver esse problema incluindo analisadores (parsers) para os seguintes formatos de log bem conhecidos:
etl-parser?etl-parser oferece dois scripts.
O primeiro script, etl2xml transforma todos os eventos ETL conhecidos em XML:
etl2xml -i example.etl -o example.xml
O segundo script, etl2pcap transforma capturas de rede criadas através do netsh no formato de arquivo pcap:
netsh trace start capture=yes
netsh trace stop
etl2pcap -i NetTrace.etl -o NetTrace.pcap
Você também pode 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á disponível via pip:
pip install etl-parser
Alternativamente, você pode instalar o etl-parser usando setup.py:
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
Se você encontrar um erro de análise, por favor abra uma issue no repositório GitHub da Airbus CERT.
O formato de log EVTX é bastante bem documentado, com muitas bibliotecas e ferramentas disponíveis atualmente. Isso não é verdade para ETL: no momento do desenvolvimento, não há nenhum projeto open-source significativo que conheçamos e o formato ETL não é bem documentado.
ETL é massivamente usado por programadores de sistema do Windows para registrar artefatos úteis:
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl via netshC:\Windows\System32\WDI\<GUID>\<GUID>\snapshot.etlMuitas novas APIs, como Tracelogging ou WPP, são baseadas em ETW. Essas APIs são amplamente utilizadas pelos desenvolvedores da Microsoft para o Windows. Tracelogging é tratado pelo etl-parser, WPP será tratado em uma versão futura.
A Microsoft oferece muitos consumidores que criam rastros ETL, como xperf.exe, logman.exe, netsh.exe, etc.
Acreditamos que seja uma mina de ouro para analistas de DFIR.
etl-parser é lançado sob a licença Apache 2.0.