
छेड़छाड़ किए गए syscalls का उपयोग करके रिमोट PE इंजेक्शन के लिए Ghostly-Hollowing को लागू करना
[!NOTE] मूल रिपॉजिटरी में पहले एक गलत लाइसेंस इस्तेमाल किया गया था जिसमें DeceptIQ के संस्थापक, @Rad9800, को श्रेय नहीं दिया गया था, जिनकी TamperingSyscalls रिपॉजिटरी MIT लाइसेंस के अंतर्गत प्रकाशित है। उनके कार्य को पहले से ही पाठ्यक्रम मॉड्यूल (Tampered Syscalls Via Hardware BreakPoints) में श्रेय दिया गया था और यह हमारे सार्वजनिक Third-Party Licenses Page में भी दर्शाया गया है।
इस चूक के बारे में पता चलते ही, हमने तुरंत मूल रिपॉजिटरी को सही किया और उसी दिन रैड से संपर्क करके इस अनदेखी के लिए माफी मांगी। अनजाने में हुई गलती को सुधारने के हमारे पूरे प्रयासों के बावजूद, उन्होंने कोई उत्तर नहीं दिया और आगे संचार अवरुद्ध कर दिया, और पांच महीने बाद हमें DMCA टेकडाउन नोटिस मिला, जिसके परिणामस्वरूप मूल रिपॉजिटरी हटा दी गई।
दुर्भाग्य से, इस दुर्भावनापूर्ण वृद्धि ने हमें मामले को हल करने का कोई व्यावहारिक रास्ता नहीं छोड़ा, इसलिए हमने सही लाइसेंसिंग और श्रेय के साथ रिपॉजिटरी को फिर से अपलोड कर दिया है।
यह कार्यान्वयन Maldev Academy पाठ्यक्रम में हाल के अपडेट में शामिल दो तकनीकों का उपयोग करता है:
Tampered Syscalls Via Hardware BreakPoints: उपयोगकर्तालैंड हुक्स को बायपास करने के साथ-साथ आह्वान किए गए syscall के तर्कों को स्पूफ करने के लिए उपयोग किया जाता है।
Ghostly Hollowing: प्रोसेस हॉलोइंग और प्रोसेस घोस्टिंग के बीच की एक संकर तकनीक।
कार्यान्वयन में आह्वान किए गए सभी syscalls TAMPER_SYSCALL मैक्रो के माध्यम से कॉल किए जाते हैं। यह मैक्रो StoreTamperedSyscallParms फ़ंक्शन को कॉल करता है:
NtQuerySecurityObject syscall स्टब (अर्थात् डिकॉय syscall) के भीतर syscall निर्देश का पता निर्धारित करें, और इस पते पर एक हार्डवेयर ब्रेकपॉइंट सेट करें।TAMPER_SYSCALL मैक्रो को कॉल करते समय, TAMPER_SYSCALL आह्वान किए गए syscall के पहले चार तर्कों को NULL मानों के साथ स्पूफ करेगा। फिर यह NtQuerySecurityObject syscall को कॉल करेगा, जो पहले स्थापित ब्रेकपॉइंट को ट्रिगर करेगा।
हम उठाए गए अपवाद को डिकॉय syscall (NtQuerySecurityObject) के SSN को वास्तविक आह्वान किए गए syscall (जैसे ZwAllocateVirtualMemory का SSN) से प्रतिस्थापित करके संभालते हैं। फिर हम स्पूफ किए गए तर्कों को वास्तविक तर्कों से बदल देते हैं। ये चरण ExceptionHandlerCallbackRoutine VEH फ़ंक्शन में निष्पादित किए जाते हैं।
PE पेलोड प्राप्त करें: कार्यान्वयन PE पेलोड (mimikatz.exe) को डिस्क से लाता है। आदर्श स्थिति में, आपको पेलोड को एन्क्रिप्ट करके संसाधन अनुभाग में संग्रहीत करना चाहिए।
डिस्क पर एक खाली फ़ाइल बनाएं: $env:TMP निर्देशिका में एक अस्थायी फ़ाइल (.tmp) बनाएँ। यह फ़ाइल बाद में PE पेलोड के साथ अधिलेखित कर दी जाएगी।
अस्थायी फ़ाइल से एक घोस्ट सेक्शन बनाएं: ZwCreateSection को कॉल करके एक घोस्ट सेक्शन बनाया जाता है, जो डिलीट-पेंडिंग .tmp फ़ाइल से एक सेक्शन बनाता है, फ़ाइल हैंडल बंद करता है, और फ़ाइल को डिस्क से हटा देता है।
एक रिमोट प्रोसेस बनाएं: CreateProcess WinAPI का उपयोग करके, हम एक रिमोट प्रोसेस बनाते हैं और घोस्ट सेक्शन को उसमें मैप करते हैं।
ImageBaseAddress को पैच करें: PEB संरचना के ImageBaseAddress तत्व को पैच करें ताकि वह मैप किए गए घोस्ट सेक्शन की ओर इंगित करे, और थ्रेड हाईजैकिंग के माध्यम से PE पेलोड के एंट्री पॉइंट को निष्पादित करें।
hasherezade को Ghostly Hollowing और उनकी अन्य सभी दिलचस्प इंजेक्शन तकनीकों को प्रकाशित करने के लिए बहुत-बहुत धन्यवाद।