
Cobalt Strike Malleable C2 प्रोफ़ाइलों को यादृच्छिक (रैंडमाइज़) करने और सिग्नेचर-आधारित डिटेक्शन नियंत्रणों द्वारा फ़्लैग किए जाने की संभावनाओं को कम करने के लिए एक स्क्रिप्ट।
यह स्क्रिप्ट Cobalt Strike Malleable C2 प्रोफाइल को एक मेटाभाषा के माध्यम से रैंडमाइज़ करती है, जिससे उम्मीद है कि सिग्नेचर-आधारित डिटेक्शन नियंत्रणों द्वारा फ़्लैग किए जाने की संभावना कम हो जाएगी। संक्षेप में, स्क्रिप्ट दिए गए टेम्पलेट को पार्स करती है, प्रदान की गई या अंतर्निहित वर्डलिस्ट से यादृच्छिक मान के साथ वेरिएबल्स को प्रतिस्थापित करती है, नए टेम्पलेट का c2lint से परीक्षण करती है, और (यदि कोई c2lint त्रुटियाँ नहीं हैं) तो नया Malleable C2 प्रोफाइल आउटपुट करती है।
इस स्क्रिप्ट के साथ संगत नमूना Malleable C2 प्रोफाइल इस रिपॉजिटरी के Sample Templates निर्देशिका में पाए जा सकते हैं।
इस स्क्रिप्ट के बारे में अधिक जानकारी के लिए, मेरी ब्लॉग पोस्ट देखें रैंडमाइज़्ड Malleable C2 प्रोफाइल आसान बनाएं।
python malleable-c2-randomizer.py [-h] -profile PROFILE
[-count COUNT]
[-cobalt COBALT]
[-output OUTPUT]
[-notest]
[-charset CHARSET]
[-wordlist WORDLIST]
[-useragent USERAGENT]
[-spawnto SPAWNTO]
[-pipename PIPENAME]
[-pipename_stager PIPENAME_STAGER]
[-dns_stager_subhost DNS_STAGER_SUBHOST]
| पैरामीटर | विवरण |
|---|---|
| -profile, -p |
यदि कोई वर्डलिस्ट प्रदान नहीं की गई है, तो डिफ़ॉल्ट रूप से एक अंतर्निहित सूची का उपयोग किया जाएगा। इन सूचियों को बनाने के बारे में अधिक जानकारी के लिए, नीचे या इस रिपॉजिटरी में Sample Wordlists फ़ोल्डर देखें।
इनमें से अधिकांश वर्डलिस्ट वेरिएबल सीधे Malleable C2 विकल्पों से संबंधित हैं। इन प्रोफाइल विकल्पों के कार्यों के बारे में अधिक जानकारी के लिए, आधिकारिक दस्तावेज़ देखें।
प्रतिस्थापन मेटाभाषा में विशिष्ट वेरिएबल्स शामिल होते हैं, जिनमें से कुछ वैकल्पिक पुनरावृत्ति गणना की अनुमति देते हैं, और जो दोहरे प्रतिशत चिह्नों में लिपटे होते हैं, जैसे:
%%variable:count%%
एक अन्य उदाहरण के रूप में, निम्नलिखित वेरिएबल के परिणामस्वरूप 20 अल्फ़ान्यूमेरिक वर्ण प्राप्त होंगे:
%%alphanumeric:20%%
वर्डलिस्ट फ़ाइलें केवल लाइन-सेपरेटेड, टैब-सेपरेटेड, या सतत स्ट्रिंग्स होती हैं (वर्डलिस्ट प्रकार के आधार पर) जिन्हें एक टेक्स्ट फ़ाइल में रखा जाता है।
निम्नलिखित वर्डलिस्ट लाइन-सेपरेटेड होनी चाहिए, प्रत्येक प्रविष्टि एक नई पंक्ति पर:
spawnto वर्डलिस्ट थोड़ी अधिक जटिल है। Malleable C2 को सभी प्रोसेस स्पॉनिंग को संशोधित करने के लिए x86 और x64 दोनों विकल्पों की आवश्यकता होती है। इसलिए, वर्डलिस्ट की प्रत्येक पंक्ति में x86 और x64 प्रोसेस पथ दोनों शामिल होने चाहिए, जो एक टैब द्वारा अलग किए गए हों, और x86 प्रोसेस पहले सूचीबद्ध हो। उदाहरण के लिए:
%windir%\\syswow64\\eventvwr.exe %windir%\\sysnative\\eventvwr.exe
यह ध्यान रखना महत्वपूर्ण है कि प्रोसेस पथ में syswow64 और sysnative स्ट्रिंग्स लोअरकेस होनी चाहिए।
अंतिम वर्डलिस्ट प्रकार कस्टम कैरेक्टरसेट है। इस फ़ाइल में स्क्रिप्ट द्वारा यादृच्छिक रूप से प्रतिस्थापित किए जाने वाले कोई भी वर्ण शामिल होने चाहिए। उदाहरण के लिए, AEIOUY की एक कैरेक्टरसेट फ़ाइल और %%custom:5%% का एक वेरिएबल कैरेक्टरसेट स्ट्रिंग से पाँच यादृच्छिक वर्ण आउटपुट करेगा। इस कैरेक्टरसेट को बनाते समय, ध्यान रखें कि कुछ वर्ण URI में दिखाई देने से प्रतिबंधित हैं और Beacon के संचार में हस्तक्षेप कर सकते हैं।
नमूना वर्डलिस्ट के लिए, इस रिपॉजिटरी में Sample Wordlists निर्देशिका देखें।
यहाँ एक संशोधित Amazon प्रोफाइल का अंश दिया गया है:
# This profile has been modified to use with the Malleable C2 Profile Randomizer
#
# Amazon browsing traffic profile
#
# Author: @harmj0y
#
set sleeptime "%%number:2%%00";
set jitter "1%%number%%";
set maxdns "24%%number%%";
set useragent "%%useragent%%";
http-get {
set uri "/s/ref=nb_sb_noss_1/%%number:3%%-%%number:8%%-%%number:7%%/field-keywords=%%word%%";
client {
header "Accept" "*/*";
header "Host" "www.amazon.com";
metadata {
base64;
prepend "session-token=";
prepend "skin=noskin;";
append "csm-hit=s-%%alphanumeric:20%%|%%number:13%%";
header "Cookie";
}
}
}
और यहाँ उसी प्रोफाइल से दो आउटपुट सेट दिए गए हैं:
# This profile has been modified to use with the Malleable C2 Profile Randomizer
#
# Amazon browsing traffic profile
#
# Author: @harmj0y
#
set sleeptime "5600";
set jitter "19";
set maxdns "244";
set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";
http-get {
set uri "/s/ref=nb_sb_noss_1/818-61846941-6716865/field-keywords=number";
client {
header "Accept" "*/*";
header "Host" "www.amazon.com";
metadata {
base64;
prepend "session-token=";
prepend "skin=noskin;";
append "csm-hit=s-UXnlEVYWc36qEuDMFPzW|2872195700726";
header "Cookie";
}
}
}
# This profile has been modified to use with the Malleable C2 Profile Randomizer
#
# Amazon browsing traffic profile
#
# Author: @harmj0y
#
set sleeptime "7400";
set jitter "19";
set maxdns "246";
set useragent "Mozilla/5.0 (Windows NT 10.0; WOW64)";
http-get {
set uri "/s/ref=nb_sb_noss_1/684-10075672-1686806/field-keywords=year";
client {
header "Accept" "*/*";
header "Host" "www.amazon.com";
metadata {
base64;
prepend "session-token=";
prepend "skin=noskin;";
append "csm-hit=s-ub5oBmGd0pnDoImCjDyK|2539750656854";
header "Cookie";
}
}
}
| रैंडमाइज़ करने के लिए Malleable C2 टेम्पलेट का पथ (आवश्यक) |
| -count, -c | बनाए जाने वाले रैंडमाइज़्ड प्रोफाइल की संख्या {डिफ़ॉल्ट = 1} |
| -cobalt, -d | वह निर्देशिका जहाँ Cobalt Strike स्थित है (c2lint के लिए) {डिफ़ॉल्ट = वर्तमान निर्देशिका} |
| -output, -o | आउटपुट आधार नाम {डिफ़ॉल्ट = टेम्पलेट बेसनेम और यादृच्छिक स्ट्रिंग} |
| -notest, -n | c2lint से परीक्षण छोड़ें (फ़्लैग) |
| पैरामीटर | विवरण |
|---|
| -charset | %%customchar%% वेरिएबल के साथ उपयोग करने के लिए कस्टम कैरेक्टरसेट वाली फ़ाइल |
| -wordlist | %%word%% वेरिएबल के साथ उपयोग करने के लिए कस्टम शब्दों की सूची वाली फ़ाइल |
| -useragent | यूज़रएजेंट की सूची वाली फ़ाइल |
| -spawnto | कस्टम spawnto प्रोसेस की सूची वाली फ़ाइल |
| -pipename | कस्टम pipename मानों की सूची वाली फ़ाइल |
| -pipename_stager | कस्टम pipename_stager मानों की सूची वाली फ़ाइल |
| -dns_stager_subhost | कस्टम dns_stager_subhost मानों की सूची वाली फ़ाइल |
| -dns_stager_prepend | कस्टम dns_stager_prepend मानों की सूची वाली फ़ाइल |
| वेरिएबल | विवरण | गणना समर्थित? |
|---|
| alphanumeric | एक यादृच्छिक mixed-case ASCII अक्षर या अंक आउटपुट करता है | हाँ |
| alphanumspecial | एक यादृच्छिक mixed-case ASCII अक्षर, अंक, या विराम चिह्न आउटपुट करता है | हाँ |
| alphanumspecialurl | एक यादृच्छिक mixed-case ASCII अक्षर, अंक, या निम्नलिखित वर्णों में से एक आउटपुट करता है: -._~ | हाँ |
| alphaupper | एक यादृच्छिक अपरकेस ASCII अक्षर आउटपुट करता है | हाँ |
| alphalower | एक यादृच्छिक लोअरकेस ASCII अक्षर आउटपुट करता है | हाँ |
| alphauppernumber | एक यादृच्छिक अपरकेस ASCII अक्षर या अंक आउटपुट करता है | हाँ |
| alphalowernumber | एक यादृच्छिक लोअरकेस ASCII अक्षर या अंक आउटपुट करता है | हाँ |
| alpha | एक यादृच्छिक ASCII अक्षर आउटपुट करता है | हाँ |
| number | एक यादृच्छिक अंक आउटपुट करता है | हाँ |
| hex | एक यादृच्छिक हेक्साडेसिमल अंक आउटपुट करता है | हाँ |
| netbios | एक यादृच्छिक mixed-case ASCII अक्षर, अंक, या निम्नलिखित वर्णों में से एक आउटपुट करता है: !@#$%^&)(.-'_{}~ | हाँ |
| custom | प्रदान की गई charset फ़ाइल में एक यादृच्छिक वर्ण से मैप करता है | हाँ |
| word | प्रदान की गई या अंतर्निहित वर्डलिस्ट से एक यादृच्छिक शब्द आउटपुट करता है | हाँ |
| boolean | एक 'True' या 'False' आउटपुट करता है | हाँ |
| useragent | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक यूज़रएजेंट आउटपुट करता है | नहीं |
| spawnto_x86 | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक x86 प्रोसेस पथ आउटपुट करता है | नहीं |
| spawnto_x64 | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक x64 प्रोसेस पथ आउटपुट करता है | नहीं |
| pipename | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक pipename आउटपुट करता है | नहीं |
| pipename_stager | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक pipename_stager आउटपुट करता है | नहीं |
| dns_stager_subhost | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक dns_stager_subhost आउटपुट करता है | नहीं |
| dns_stager_prepend | प्रदान की गई या अंतर्निहित सूची से एक यादृच्छिक dns_stager_prepend आउटपुट करता है | नहीं |