
Cobalt Strike के लिए यादृच्छिक, lint-validated malleable C2 प्रोफाइल उत्पन्न करता है, अनुकूलन योग्य IOC रैंडमाइज़ेशन के साथ HTTP/S, DNS, SMB, और SSH बीकन कॉन्फ़िगरेशन को स्वचालित करता है।
C2concealer एक कमांड लाइन उपकरण है जो Cobalt Strike में उपयोग के लिए यादृच्छिक C2 मैलेबल प्रोफाइल उत्पन्न करता है।
git clone https://github.com/RedSiege/C2concealer.git
cd C2concealer
python3 -m venv .venv
source .venv/bin/activate
pip3 install -e .
Docker निर्देश देखें
Usage:
$ C2concealer --hostname google.com --variant 3
Flags:
(optional)
--hostname
The hostname used in HTTP client and server side settings. Default is None.
--variant
An integer defining the number of HTTP client/server variants to generate.
Recommend between 1 and 5. Max 10.
root@kali:~# C2concealer --variant 1 --hostname google.com
[i] Searching for the c2lint tool on your system (part of Cobalt Strike). Might take 10-20 seconds.
[i] Found c2lint in the /opt/cobaltstrike/c2lint directory.
Choose an SSL option:
1. Self-signed SSL cert (just input a few details)
2. LetsEncrypt SSL cert (requies a temporary A record for the relevant domain to be pointed to this machine)
3. Existing keystore
4. No SSL
[?] Option [1/2/3/4]:
सुझाव: हमेशा SSL प्रमाणपत्र का उपयोग करें। अधिमानतः LetsEncrypt या इसी प्रकार का प्रमाणपत्र। सुझाव: HTTP वेरिएंट आपको विभिन्न बीकन्स पर HTTP ट्रैफ़िक के लिए अलग-अलग IOC चुनने की अनुमति देते हैं। कम से कम 1 का मान अनुशंसित है।
हमने Cobalt Strike दस्तावेज़ीकरण का गहन अध्ययन किया और प्रत्येक प्रोफ़ाइल गुण के लिए समझदार मानों की श्रेणियाँ परिभाषित कीं। कभी-कभी वह डेटा एक निश्चित सीमा के भीतर एक यादृच्छिक पूर्णांक जितना सरल होता है और अन्य बार हमें Python dictionary से एक यादृच्छिक मान चुनने की आवश्यकता होती है। किसी भी तरह, हमने उपकरण निर्माण की शुरुआत उस डेटा को परिभाषित करके की जो एक मान्य प्रोफ़ाइल बनाएगा।
फिर हमने प्रत्येक मैलेबल प्रोफ़ाइल अनुभाग (या ब्लॉक) को एक अलग .py फ़ाइल में विभाजित किया, जिसमें प्रत्येक गुण के लिए यादृच्छिक उपयुक्त मान बनाने और फिर उस प्रोफ़ाइल ब्लॉक के लिए एक स्वरूपित स्ट्रिंग आउटपुट करने का तर्क होता है। हम सभी प्रोफ़ाइल ब्लॉकों को जोड़ते हैं, कुछ त्वरित संगति जांच चलाते हैं और फिर प्रोफ़ाइल को Cobalt Strike लिंटर (c2lint) के माध्यम से चलाते हैं। परिणाम एक प्रोफ़ाइल है जो चाहिए कि आपके अभियानों के लिए काम करे। हम हमेशा किसी अभियान को चलाने से पहले प्रोफ़ाइल का परीक्षण (प्रोसेस इंजेक्शन और स्पॉनिंग सहित) करने की सलाह देते हैं।
यदि आप कोड में देख रहे हैं, तो हम इन दो फ़ाइलों से शुरुआत करने की सलाह देते हैं: /C2concealer/__main__.py और /C2concealer/profile.py। टिप्पणियों की समीक्षा करने के बाद, फ़ोल्डर में व्यक्तिगत प्रोफ़ाइल ब्लॉक जनरेटर देखें: /C2concealer/components।
यह महत्वपूर्ण है। यह एक ओपन सोर्स उपकरण है। विक्रेता इसके द्वारा उत्पन्न प्रोफ़ाइलों के लिए आसानी से हस्ताक्षर लिख सकते हैं। जबकि उपकरण चलाना Cobalt Strike मैलेबल प्रोफ़ाइल बनाने के लिए एक उत्कृष्ट शुरुआत प्रदान करता है, हम उत्पन्न प्रोफ़ाइलों को भरने के लिए उपयोग किए जाने वाले डेटा को अनुकूलित करने के लिए निम्नलिखित क्षेत्रों में गहराई से जाने की सलाह देते हैं:
/C2concealer/data/
इसके अलावा, आप प्रोफ़ाइल निर्माण प्रक्रिया में विभिन्न गुणों को अनुकूलित कर सकते हैं। उदाहरण के तौर पर, फ़ाइल: /C2concealer/components/stageblock.py में, आप उस श्रेणी को बदल सकते हैं जिससे PE छवि आकार मान लिया जाता है (लगभग पंक्तियाँ 73-74)। कृपया कंपोनेंट्स निर्देशिका में सभी विभिन्न फ़ाइलों को देखें।
यदि आप यहाँ तक आ गए हैं, तो हम जानते हैं कि आप इस उपकरण का बहुत उपयोग करेंगे। जिस तरह से हम इस उपकरण को देखने की सलाह देते हैं वह यह है कि हमने इन प्रोफ़ाइलों को स्वचालित रूप से उत्पन्न करने के लिए कंकाल कोड बनाया है। अब यह आप पर निर्भर है कि आप अपने अभियानों के लिए प्रत्येक गुण के लिए क्या मान समझ में आते हैं और डेटा स्रोतों को अपडेट करें।
जबकि हमने मैलेबल C2 प्रोफ़ाइल भाषा के लिए बहुत सारे संभावित विकल्पों को कवर किया है, ऐसे कई विकल्प हैं जिन्हें हम सेट नहीं करते हैं। हम आपको दृढ़ता से सलाह देते हैं कि आप Malleable Command and Control दस्तावेज़ीकरण से परामर्श करें और अपनी प्रोफ़ाइल को संशोधित करें।
निम्नलिखित विकल्प सेट नहीं हैं, या C2concealer द्वारा स्थिर रूप से सेट किए गए हैं और आपको उन्हें बदलने पर विचार करना चाहिए।
http-config ब्लॉक| लापता विकल्प | नोट्स |
|---|---|
set block_useragents | गैर-बीकन UA पैटर्न को अवरुद्ध करें |
set allow_useragents | UA पैटर्न की अनुमति सूची (CS 4.3+) |
stage ब्लॉकprocess-inject ब्लॉकpost-ex ब्लॉक| लापता विकल्प | नोट्स |
|---|---|
set pipename | पोस्ट-एक्स कार्यों के लिए नामित पाइप |
dns-beacon ब्लॉक| लापता विकल्प | नोट्स |
|---|---|
set ns_response | drop/idle/zero NS हैंडलिंग। यदि सेट नहीं है तो डिफ़ॉल्ट drop है। |
set dns_stager_prepend | स्टेज पेलोड में प्रीपेंड डेटा |
| लापता रूपांतरण | नोट्स |
|---|---|
lznt1 | संपीड़न — किसी भी एन्कोड श्रृंखला में नहीं है |
rc4 "key" |
Raphael Mudge को बड़ा शाउटआउट, जिन्होंने मैलेबल प्रोफ़ाइल सुविधा सेट और इसके बारे में सीखने के लिए दस्तावेज़ीकरण में लगातार सुधार किया। साथ ही, @killswitch-GUI को उनके स्क्रिप्ट के लिए बहुत-बहुत धन्यवाद जो CS टीम सर्वर के लिए LetsEncrypt प्रमाणपत्र निर्माण को स्वचालित करता है। अंत में, दो ब्लॉग पोस्ट जिन्होंने जीवन को बहुत आसान बना दिया: @bluescreenofjeff की पोस्ट (https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/) और Joe Vest की पोस्ट (https://posts.specterops.io/a-deep-dive-into-cobalt-strike-malleable-c2-6660e33b0e0b)।
Version 1.0
Version 1.1
| लापता विकल्प | नोट्स |
|---|
set allocator | हार्डकोडेड VirtualAlloc; HeapAlloc, MapViewOfFile रैंडमाइज़ेशन गायब है |
set magic_mz_x86 / magic_mz_x64 | MZ हेडर स्पूफिंग |
set magic_pe | PE मार्कर स्पूफिंग |
set rich_header | कंपाइलर मेटाडेटा स्पूफिंग |
set module_x86 / module_x64 | मॉड्यूल स्टॉम्पिंग |
set copy_pe_header | — |
set data_store_size | — |
set eaf_bypass | EAT जाँच बाईपास |
set syscall_method | कोई नहीं/प्रत्यक्ष/अप्रत्यक्ष (CS 4.8+) |
set rdll_loader | PrependLoader/StompLoader |
set rdll_use_syscalls | — |
set rdll_use_driploading | — |
set rdll_dripload_delay | — |
transform-obfuscate ब्लॉक | base64, lznt1, rc4, xor विकल्प पूरी तरह से अनुपस्थित हैं |
transform-x86/x64 में append | केवल prepend और strrep का उपयोग किया जाता है |
| लापता विकल्प | नोट्स |
|---|
set allocator | हार्डकोडेड VirtualAllocEx; NtMapViewOfSection रैंडमाइज़ेशन गायब है |
set use_driploading | — |
set dripload_delay | — |
transform-x86/x64 में append | केवल prepend का उपयोग किया जाता है |
Execute: NtQueueApcThread | execute ब्लॉक में नहीं |
Execute: NtQueueApcThread-s | execute ब्लॉक में नहीं |
Execute: ObfSetThreadContext | execute ब्लॉक में नहीं |
Execute: SetThreadContext | execute ब्लॉक में नहीं |
| Execute फ़ंक्शन स्पूफिंग | module!function+0x## सिंटैक्स समर्थित नहीं है |
| एन्क्रिप्शन — किसी भी एन्कोड श्रृंखला में नहीं है |
xor "key" | XOR — किसी भी एन्कोड श्रृंखला में नहीं है |
uri-append | समाप्ति कथन — लागू नहीं किया गया |