
محلل ملف سجل تتبع الأحداث بلغة بايثون النقية
قارئ ملفات سجل تتبع الأحداث (Event Trace Log) بلغة بايثون الخالصة
etl-parser هي مكتبة محلل بلغة Python 3 خالصة لملفات سجلات ETL الخاصة بنظام ويندوز. ETL هو التنسيق الافتراضي لـ ETW وكذلك التنسيق الافتراضي لمسجل النواة (Kernel logger).
etl-parser لا تعتمد على أي تبعيات للنظام، وستعمل بشكل جيد على كل من ويندوز ولينكس.
نظرًا لأن هذا التنسيق غير موثق، قمنا بدمج المعلومات من مدونة 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 مع معرف العملية ومعرف الخيط"""
mof = event.get_mof() # استدعاء محلل MOF
def on_perfinfo_trace(self, event: PerfInfo):
"""رسالة MOF kernel مع طابع زمني"""
mof = event.get_mof() # استدعاء محلل MOF
def on_trace_record(self, event: Trace):
"""غير معروف"""
def on_event_record(self, event: Event):
"""حدث ETW، هذا ما تبحث عنه"""
# اختر دالة "parse_" التي تتوافق مع حدثك
message = event.parse_tracelogging() # استدعاء محلل TraceLogging
message = event.parse_etw() # استدعاء المحلل القائم على المانيفست
def on_win_trace(self, event: WinTrace):
"""غير معروف"""
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 بشكل كبير من قبل مبرمجي نظام ويندوز لتسجيل القطع الأثرية المفيدة:
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 لنظام ويندوز. يتم التعامل مع Tracelogging بواسطة etl-parser، وسيتم التعامل مع WPP في إصدار مستقبلي.
تقدم Microsoft العديد من المستهلكين الذين ينشئون تتبعات ETL، مثل xperf.exe و logman.exe و netsh.exe، إلخ.
نعتقد أنها منجم ذهب لمحللي DFIR.
etl-parser صدر بموجب ترخيص Apache 2.0.