
शुद्ध Python में इवेंट ट्रेस लॉग फ़ाइल पार्सर
शुद्ध Python में Event Trace Log फ़ाइल रीडर
etl-parser एक शुद्ध Python 3 पार्सर लाइब्रेरी है ETL विंडोज लॉग फ़ाइलों के लिए। ETL ETW का डिफ़ॉल्ट प्रारूप है और Kernel लॉगर का भी डिफ़ॉल्ट प्रारूप है।
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 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
वैकल्पिक रूप से, आप setup.py का उपयोग करके etl-parser स्थापित कर सकते हैं:
git clone https://github.com/airbus-cert/etl-parser.git
cd etl-parser
pip install -e .
यदि आपको कोई पार्सिंग त्रुटि आती है, तो कृपया Airbus CERT GitHub रिपॉजिटरी पर एक issue खोलें।
EVTX लॉग प्रारूप काफी अच्छी तरह से प्रलेखित है, आज कई लाइब्रेरी और उपकरण उपलब्ध हैं। यह ETL के लिए सच नहीं है: विकास के समय, हमारी जानकारी में कोई महत्वपूर्ण ओपन-सोर्स प्रोजेक्ट नहीं है और ETL प्रारूप अच्छी तरह से प्रलेखित नहीं है।
ETL का Windows सिस्टम प्रोग्रामर द्वारा उपयोगी आर्टिफैक्ट्स को लॉग करने के लिए बड़े पैमाने पर उपयोग किया जाता है:
C:\Windows\System32\WDI\LogFiles\BootPerfDiagLogger.etlC:\Windows\System32\WDI\LogFiles\ShutdownPerfDiagLogger.etlNetTrace.etl netsh के माध्यम सेC:\Windows\System32\WDI\<GUID>\<GUID>\snapshot.etlबहुत सारे नए APIs जैसे Tracelogging या WPP ETW पर आधारित हैं। इन APIs का उपयोग Microsoft डेवलपर्स द्वारा विंडोज के लिए व्यापक रूप से किया जाता है। Tracelogging को etl-parser द्वारा संबोधित किया गया है, WPP को भविष्य के रिलीज़ में संबोधित किया जाएगा।
Microsoft बहुत सारे उपभोक्ता प्रदान करता है जो ETL ट्रेस बनाते हैं, जैसे xperf.exe, logman.exe, netsh.exe, आदि।
हम मानते हैं कि यह DFIR विश्लेषकों के लिए एक सोने की खान है।
etl-parser Apache 2.0 लाइसेंस के तहत जारी किया गया है।