
Parser di file di log di traccia eventi in puro Python
Lettore di file di log Event Trace Log in puro Python
etl-parser è una libreria di parsing pura Python 3 per file di log ETL di Windows. ETL è il formato predefinito per ETW così come il formato predefinito per il logger del kernel.
etl-parser non ha dipendenze di sistema e funzionerà bene sia su Windows che su Linux.
Poiché questo formato non è documentato, abbiamo unito le informazioni dal blog di Geoff Chappel e le attività di reverse engineering condotte dal team Airbus CERT.
Cos'è ETL e perché è un problema lavorarci? Considera ETL come un contenitore, simile a AVI per i file video. Leggere ETL è altrettanto frustrante quanto leggere un file AVI senza il codec giusto.
etl-parser cerca di risolvere questo problema includendo parser per i seguenti formati di log ben noti:
etl-parser?etl-parser offre due script.
Il primo script, etl2xml trasforma tutti gli eventi ETL conosciuti in XML:
etl2xml -i example.etl -o example.xml
Il secondo script, etl2pcap trasforma le catture di rete create tramite netsh nel formato file pcap:
netsh trace start capture=yes
netsh trace stop
etl2pcap -i NetTrace.etl -o NetTrace.pcap
Puoi anche usare etl-parser come libreria:
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):
"""Messaggio kernel MOF con Process Id e Thread Id"""
mof = event.get_mof() # Invoca parser MOF
def on_perfinfo_trace(self, event: PerfInfo):
"""Messaggio kernel MOF con timestamp"""
mof = event.get_mof() # Invoca parser MOF
def on_trace_record(self, event: Trace):
"""sconosciuto"""
def on_event_record(self, event: Event):
"""Evento ETW questo è ciò che cerchi"""
# Scegli la funzione "parse_" corrispondente al tuo evento
message = event.parse_tracelogging() # Invoca parser TraceLogging
message = event.parse_etw() # Invoca parser basato su Manifest
def on_win_trace(self, event: WinTrace):
"""sconosciuto"""
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 è disponibile tramite pip:
pip install etl-parser
In alternativa, puoi installare etl-parser usando setup.py:
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
Se incontri un errore di parsing, per favore apri un problema nel repository GitHub di Airbus CERT.
Il formato di log EVTX è abbastanza ben documentato, con molte librerie e strumenti disponibili oggi. Questo non è vero per ETL: al momento dello sviluppo, non esiste alcun progetto open-source significativo che conosciamo e il formato ETL non è ben documentato.
ETL è massicciamente utilizzato dai programmatori di sistema Windows per registrare artefatti utili:
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl tramite netshC:\Windows\System32\WDI\<GUID>\<GUID>\snapshot.etlMolte nuove API come Tracelogging o WPP sono basate su ETW. Queste API sono utilizzate estensivamente dagli sviluppatori Microsoft per Windows. Tracelogging è gestito da etl-parser, WPP sarà gestito in una versione futura.
Microsoft offre molti consumatori che creano tracce ETL, come xperf.exe, logman.exe, netsh.exe, ecc.
Crediamo che sia una miniera d'oro per gli analisti DFIR.
etl-parser è rilasciato sotto licenza Apache 2.0.