TrollDump
- setwindowshook का उपयोग करके x64 managed DLL को x64 managed/unmanaged प्रोसेस में inject करता है (प्रोसेस में GUI होना आवश्यक है क्योंकि हम उसका windows handle प्राप्त करते हैं)
- यहाँ एक TROLL के रूप में, हम hidden window taskmgr में inject करते हैं ताकि lsass dump बिना पकड़े किया जा सके (नीचे Test Case अनुभाग देखें)
- injector DLL और injected DLL एक ही DLL होते हैं इसलिए किसी अतिरिक्त DLL की आवश्यकता नहीं होती
- लक्ष्य प्रोसेस का Integrity level injector प्रोसेस के समान या उससे कम होना चाहिए
क्रेडिट्स (प्रोजेक्ट का उन्नयन/पुनर्लेखन)
मूल प्रोजेक्ट: https://github.com/enkomio/ManagedInjector
- कोड को 64 बिट बाइनरी में inject करने के लिए port किया गया ---> मूल प्रोजेक्ट केवल 32 बिट बाइनरी में dll injection की अनुमति देता है
- IPC लॉजिक हटा दिया क्योंकि यह अत्यधिक था
- boilerplate कोड बनाया ताकि आप अपने payload को सीधे RunOnRemoteProcess() फ़ंक्शन में चला सकें, पिछले जटिल तरीके के बजाय
- प्रोजेक्ट अब भी DLLExport का उपयोग करता है ताकि .NET DLL फ़ंक्शन export कर सके
- ध्यान दें: यह प्रोजेक्ट की निर्भरता नहीं है, बल्कि एक postprocessing जैसा है। DLLExport आपके अंतिम .NET DLL को संशोधित करके एक फ़ंक्शन export करेगा।
- यदि चाहें तो फ़ंक्शन exporting मैन्युअल रूप से कर सकते हैं https://blog.xpnsec.com/rundll32-your-dotnet/
संकलन
- प्रोजेक्ट डाउनलोड करें और solution को X64, Release के रूप में Compile करें
- कोई बाहरी निर्भरता आवश्यक नहीं है
उपयोग
> Requires High Integrity depending on use case
> [System.Reflection.Assembly]::LoadFrom("C:\Users\public\TrollDump.dll")
> [TrollDump.ForFun]::Main("C:\windows\system32\taskmgr.exe")
- इस POC में, हम lsass dump करते हैं, आप RunOnRemoteProcess() फ़ंक्शन को संशोधित करके और recompile करके जो चाहें "DLL exported function logic" चला सकते हैं।
- जैसा पहले बताया गया है, यह कोड dll injection के लिए boilerplate का काम करता है, इसके बाद आप जो करना चाहें वह c# managed code में आसानी से लिखा जा सकता है।
टेस्ट केस
- Win 2019 build 17763.737 नवीनतम windefender patches के साथ
- दोनों dllinject + lsass dump
- अन्य AVs (अनाम)
- dllinject ठीक काम करता है
- स्वाभाविक रूप से, lsass dump काम करता है या नहीं यह इस बात पर निर्भर करता है कि AV taskmgr को lsass dump करने की अनुमति देता है या नहीं
- किसी भी EDR पर परीक्षण नहीं किया गया -> मुझे संदेह है कि dll injection विशिष्ट EDRs पर फिर भी काम करेगा
OPSEC
- DLL को डिस्क पर होना आवश्यक है इसलिए इसे obfuscated होना चाहिए
- DLL का उपयोग केवल injection करने के लिए किया जाना चाहिए, वास्तविक payload को कभी भी DLL में embed नहीं किया जाना चाहिए और उसे reflectively load किया जाना चाहिए
- स्पष्ट रूप से, unmanaged process में CLR inject करना संदिग्ध है, लेकिन हे!
- setwindowshook हालांकि एक क्लासिक तकनीक है, इसे अक्सर keylogging से जोड़ा जाता है, हमारे उपयोग के मामले से नहीं
- आप जिस भी GUI प्रोसेस में inject करना चाहें, उसके साथ बहुत रचनात्मक हो सकते हैं (यदि system के रूप में चल रहा है, तो dwm.exe में भी inject कर सकते हैं)
इच्छा सूची - प्रोजेक्ट सप्ताहांत में पूरा किया गया था और मेरे पास निम्नलिखित पर काम करने का समय/इरादा नहीं है:
- gui-less प्रोसेस में inject करना
- वर्तमान में setwindowshook के लिए यह WH_CALLWNDPROC का उपयोग करता है, आप इसे WH_GETMESSAGE उपयोग करने के लिए संशोधित कर सकते हैं, लेकिन लक्ष्य प्रोसेस को message loop (GetMessage()) चला रहा होना चाहिए
- यदि आप कोई non-GUI बाइनरी ढूंढ सकते हैं जो message loop लागू करता है (मुझे संदेह है कि ऐसा संभव नहीं है) तो आप guiless बाइनरी में भी inject कर सकते हैं
- GUI प्रक्रियाओं के लिए GetMessage() चलाना सामान्य है
- पूर्ण रूप से reflective और डिस्क पर drop करने की आवश्यकता नहीं
- setwindowshook के आधार पर, ऐसा लगता है कि DLL डिस्क पर होना अनिवार्य है?
- मैंने export किए गए DLL फ़ंक्शन के बजाय चलाने के लिए फ़ंक्शन pointer पास करने हेतु c# delegates का उपयोग करने की कोशिश की और वह काम नहीं किया (यह स्थानीय प्रोसेस के लिए क्लासिक c# keylogger तकनीक है, लेकिन हम remote process कर रहे हैं)
- आप अन्य तकनीकों को शामिल करके इसे आज़मा सकते हैं, मुझे लगता है यह संभव है
- Taskmgr स्वचालित रूप से High Integrity के रूप में spawn होगा, भले ही हमारी वर्तमान प्रक्रिया Medium हो (इसलिए तकनीकी रूप से यदि हम इसमें DLL inject करते हैं, तो यह UAC bypass है)
- WIN API रिटर्न परिणामों के अनुसार injection ठीक काम करता प्रतीत होता है
- हालाँकि, taskmgr export किए गए फ़ंक्शन को कॉल करने में विफल रहता है
अस्वीकरण
केवल शैक्षिक उद्देश्यों के लिए उपयोग किया जाना चाहिए!