
CobaltWhispers एक आक्रामक स्क्रिप्ट है जो Cobalt Strike के लिए Beacon Object Files (BOF) के संग्रह का उपयोग करती है, ताकि प्रोसेस इंजेक्शन, पर्सिस्टेंस और अधिक कार्य किए जा सकें, जो सीधे syscalls (SysWhispers2) का लाभ उठाकर EDR/AV को बायपास करती है।
लेखक: @Cerbersec
CobaltWhispers एक एग्रेसर स्क्रिप्ट है जो Cobalt Strike के लिए Beacon Object Files के संग्रह का उपयोग करके प्रोसेस इंजेक्शन, पर्सिस्टेंस और अधिक कार्य करती है, EDR/AV को बायपास करने के लिए डायरेक्ट syscalls का लाभ उठाती है।
CobaltWhispers SysWhispers2 और InlineWhispers2 द्वारा संचालित है
CobaltWhispers StayKit तथा Hasherezade और Forrest Orr के कार्य पर आधारित है।
CobaltWhispers NVISO Security की Red Team में इंटर्नशिप के हिस्से के रूप में बनाया गया था। संबंधित ब्लॉगपोस्ट यहाँ (process-injection) और यहाँ (kernel karnage) पाए जा सकते हैं।
CobaltWhispers को कंपाइल करने के लिए कई टूल्स की आवश्यकता होती है:
apt install mingw-w64apt install makeप्रत्येक प्रोजेक्ट को कार्य करने के लिए SysWhispers2 / InlineWhispers2 द्वारा उत्पन्न 3 फाइलों की आवश्यकता होती है:
इन फाइलों को InlineWhispers2 प्रलेखन के अनुसार उत्पन्न किया जा सकता है, हालाँकि यह सर्वोत्तम तरीका नहीं है क्योंकि इसमें बहुत सारा अप्रयुक्त कोड शामिल होगा:
git clone https://github.com/Sh0ckFR/InlineWhispers2 && cd InlineWhispers2
cd SysWhispers2/ && python3 syswhispers.py --preset all -o syscalls_all && cd ..
python3 InlineWhispers2.py
इसके बजाय, केवल आवश्यक APIs के लिए आउटपुट फाइलें उत्पन्न करने हेतु SysWhispers2 का उपयोग करें, फिर उन्हें मैन्युअल रूप से (या स्क्रिप्ट द्वारा) InlineWhispers2 को दें जो उन्हें उचित प्रारूप में बदल देगा। अतिरिक्त जानकारी के लिए शामिल makefile देखें या शामिल फाइलों का उपयोग अपने जोखिम पर करें।
| पेलोड प्रकार | लक्ष्य | विश्वसनीयता (0-5) | एलिवेटेड | टिप्पणियाँ |
|---|---|---|---|---|
| - | - | 5 | नहीं | पैरेंट प्रक्रिया से अनुमतियाँ इनहेरिट करता है |
कोड इंटीग्रिटी गार्ड (CIG) सक्षम के साथ एक नई निलंबित प्रक्रिया स्पॉन करता है ताकि गैर-माइक्रोसॉफ्ट हस्ताक्षरित बाइनरी ब्लॉक हो सकें। निर्दिष्ट पैरेंट प्रक्रिया को स्पूफ करता है। PID लौटाया जाता है।
पैरेंट प्रक्रिया: पैरेंट के रूप में सेट करने के लिए प्रक्रिया का नाम
एक्ज़िक्यूटेबल स्थान: नई प्रक्रिया स्पॉन करने के लिए डिस्क पर एक्ज़िक्यूटेबल का पूरा पथ
| पेलोड प्रकार | लक्ष्य | विश्वसनीयता (0-5) | एलिवेटेड | टिप्पणियाँ |
|---|---|---|---|---|
| Shellcode/Raw | PID | 5 | नहीं | - |
NtCreateThreadEx का उपयोग करके एक रिमोट प्रोसेस में पेलोड इंजेक्ट करता है।
प्रक्रिया PID: रिमोट प्रक्रिया का प्रोसेस आईडी
पेलोड स्थान: डिस्क पर बाइनरी रूप में पेलोड का स्थान (सशर्त | वैकल्पिक)
पेलोड b64: बेस64 एन्कोडेड स्ट्रिंग प्रारूप में रॉ शेलकोड (सशर्त | वैकल्पिक)
लिसनर: पेलोड उत्पन्न करने के लिए लिसनर (सशर्त)
Beacon पेलोड उत्पन्न करने के लिए एक लिसनर निर्दिष्ट किया जाना चाहिए। यदि मैन्युअल पेलोड चाहिए, तो इसे डिस्क पर रॉ बाइनरी के पथ के माध्यम से, या बेस64 एन्कोडेड शेलकोड के रूप में प्रदान किया जाना चाहिए।
| पेलोड प्रकार | लक्ष्य | विश्वसनीयता (0-5) | एलिवेटेड | टिप्पणियाँ |
|---|---|---|---|---|
| Shellcode/Raw | PID | 2 | नहीं | संभावित रूप से लक्ष्य प्रक्रिया को क्रैश कर सकता है |
NtQueueApcThread का उपयोग करके एक रिमोट प्रोसेस में पेलोड इंजेक्ट करता है।
प्रक्रिया PID: रिमोट प्रक्रिया का प्रोसेस आईडी
थ्रेड्स: उन थ्रेड्स की संख्या जिनमें APC कॉल जोड़नी है
पेलोड स्थान: डिस्क पर बाइनरी रूप में पेलोड का स्थान (सशर्त | वैकल्पिक)
पेलोड b64: बेस64 एन्कोडेड स्ट्रिंग प्रारूप में रॉ शेलकोड (सशर्त | वैकल्पिक)
लिसनर: पेलोड उत्पन्न करने के लिए लिसनर (सशर्त)
Beacon पेलोड उत्पन्न करने के लिए एक लिसनर निर्दिष्ट किया जाना चाहिए। यदि मैन्युअल पेलोड चाहिए, तो इसे डिस्क पर रॉ बाइनरी के पथ के माध्यम से, या बेस64 एन्कोडेड शेलकोड के रूप में प्रदान किया जाना चाहिए।
| पेलोड प्रकार | लक्ष्य | विश्वसनीयता (0-5) | एलिवेटेड | टिप्पणियाँ |
|---|---|---|---|---|
| Shellcode/Raw | सरोगेट प्रोसेस | 5 | नहीं | - |
NtMapViewOfSection का उपयोग करके एक सरोगेट प्रोसेस में पेलोड इंजेक्ट करता है।
पैरेंट प्रक्रिया: पैरेंट के रूप में सेट करने के लिए प्रक्रिया का नाम
एक्ज़िक्यूटेबल स्थान: डिस्क पर एक्ज़िक्यूटेबल का स्थान जिसका उपयोग नई प्रक्रिया स्पॉन करने के लिए किया जाएगा
पेलोड स्थान: डिस्क पर बाइनरी रूप में पेलोड का स्थान (सशर्त | वैकल्पिक)
पेलोड b64: बेस64 एन्कोडेड स्ट्रिंग प्रारूप में रॉ शेलकोड (सशर्त | वैकल्पिक)
लिसनर: पेलोड उत्पन्न करने के लिए लिसनर (सशर्त)
Beacon पेलोड उत्पन्न करने के लिए एक लिसनर निर्दिष्ट किया जाना चाहिए। यदि मैन्युअल पेलोड चाहिए, तो इसे डिस्क पर रॉ बाइनरी के पथ के माध्यम से, या बेस64 एन्कोडेड शेलकोड के रूप में प्रदान किया जाना चाहिए।
| पेलोड प्रकार | लक्ष्य | विश्वसनीयता (0-5) | एलिवेटेड | टिप्पणियाँ |
|---|---|---|---|---|
| PE | सरोगेट प्रोसेस | 5 | नहीं | x64 PE पेलोड की आवश्यकता है |
ट्रांज़ैक्टेड सेक्शन और मैप्ड व्यू का उपयोग करके एक सरोगेट प्रोसेस में पेलोड इंजेक्ट करता है। रिमोट एंट्री पॉइंट और PEB अपडेट किए जाते हैं, कोई असामान्य मेमोरी सेक्शन या मेमोरी अनुमतियाँ नहीं होतीं। अधिक जानकारी के लिए यहाँ देखें।
पैरेंट प्रक्रिया: पैरेंट के रूप में सेट करने के लिए प्रक्रिया का नाम
एक्ज़िक्यूटेबल स्थान: डिस्क पर एक्ज़िक्यूटेबल का स्थान जिसका उपयोग नई प्रक्रिया स्पॉन करने के लिए किया जाएगा
पेलोड स्थान: डिस्क पर x64 PE पेलोड का स्थान (सशर्त | वैकल्पिक)
पेलोड b64: बेस64 एन्कोडेड स्ट्रिंग प्रारूप में x64 PE पेलोड (सशर्त | वैकल्पिक)
लिसनर: पेलोड उत्पन्न करने के लिए लिसनर (सशर्त)
Beacon पेलोड उत्पन्न करने के लिए एक लिसनर निर्दिष्ट किया जाना चाहिए। यदि मैन्युअल पेलोड चाहिए, तो इसे डिस्क पर x64 PE के पथ के माध्यम से, या बेस64 एन्कोडेड x64 PE के रूप में प्रदान किया जाना चाहिए।
वर्तमान में कार्यान्वित नहीं किया गया है
| पेलोड प्रकार | लक्ष्य | विश्वसनीयता (0-5) | एलिवेटेड | टिप्पणियाँ |
|---|---|---|---|---|
| Position Independent Shellcode (PIC) | सरोगेट प्रोसेस | 5 | हाँ | सिस्टम DLL को लेखन अनुमतियों के साथ खोलने के लिए एलिवेटेड अनुमतियों की आवश्यकता होती है |
ट्रांज़ैक्टेड सेक्शन का उपयोग DLL हॉलोइंग के साथ संयोजन में करके एक सरोगेट प्रोसेस में पेलोड इंजेक्ट करता है। अधिक जानकारी के लिए यहाँ देखें।
पैरेंट प्रक्रिया: पैरेंट के रूप में सेट करने के लिए प्रक्रिया का नाम
एक्ज़िक्यूटेबल स्थान: डिस्क पर एक्ज़िक्यूटेबल का स्थान जिसका उपयोग नई प्रक्रिया स्पॉन करने के लिए किया जाएगा
पेलोड स्थान: डिस्क पर बाइनरी रूप में पेलोड का स्थान (सशर्त | वैकल्पिक)
पेलोड b64: बेस64 एन्कोडेड स्ट्रिंग प्रारूप में रॉ शेलकोड (सशर्त | वैकल्पिक)
लिसनर: पेलोड उत्पन्न करने के लिए लिसनर (सशर्त)
Beacon पेलोड उत्पन्न करने के लिए एक लिसनर निर्दिष्ट किया जाना चाहिए। यदि मैन्युअल पेलोड चाहिए, तो इसे डिस्क पर रॉ बाइनरी के पथ के माध्यम से, या बेस64 एन्कोडेड शेलकोड के रूप में प्रदान किया जाना चाहिए।
निर्दिष्ट स्थान पर एक रजिस्ट्री कुंजी बनाएँ या संशोधित करें।