
Парсер файлов журнала трассировки событий на чистом Python
Читатель файлов Event Trace Log на чистом Python
etl-parser — это библиотека-парсер для файлов журналов ETL Windows, написанная на чистом Python 3. 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
Кроме того, вы можете установить etl-parser с помощью setup.py:
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
Если вы столкнулись с ошибкой парсинга, пожалуйста, создайте issue в репозитории Airbus CERT на GitHub.
Формат журналов EVTX довольно хорошо задокументирован, и сегодня доступно множество библиотек и инструментов для работы с ним. Этого нельзя сказать о ETL: на момент разработки не было известно ни одного значимого проекта с открытым исходным кодом, и формат ETL плохо задокументирован.
ETL широко используется системными программистами Windows для записи полезных артефактов:
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl через 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.