
نص برمجي لعشوائية ملفات تعريف C2 القابلة للتشكيل الخاصة بـ Cobalt Strike وتقليل فرص رصد ضوابط الكشف القائمة على التوقيعات.
يقوم هذا السكربت بإضفاء العشوائية على ملفات Malleable C2 الخاصة بـ Cobalt Strike من خلال استخدام لغة وسيطة، على أمل تقليل فرص رصد ضوابط الكشف القائمة على التوقيعات. باختصار، يوزّع السكربت القالب المقدَّم، ويستبدل المتغيرات بقيمة عشوائية من قائمة كلمات مقدَّمة أو مدمجة، ويختبر القالب الجديد باستخدام c2lint، وإذا لم توجد أخطاء في c2lint، يُخرج ملف Malleable C2 الجديد.
يمكن العثور على نماذج ملفات Malleable C2 المتوافقة مع هذا السكربت في مجلد النماذج في هذا المستودع.
لمزيد من المعلومات حول هذا السكربت، اطّلع على منشور مدونتي ملفات 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]
| Parameter | Description |
|---|---|
| -profile, -p |
إذا لم يتم توفير قائمة كلمات، فسيتم استخدام قائمة مدمجة افتراضيًا. لمزيد من المعلومات حول إنشاء هذه القوائم، راجع أدناه أو مجلد قوائم الكلمات النموذجية في هذا المستودع.
معظم متغيرات قوائم الكلمات هذه مرتبطة مباشرة بخيارات 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.
للاطلاع على نماذج لقوائم الكلمات، راجع مجلد قوائم الكلمات النموذجية في هذا المستودع.
فيما يلي مقتطف من ملف 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 (مفتاح) |
| Parameter | Description |
|---|
| -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 مخصصة |
| Variable | Description | Supports Count? |
|---|
| alphanumeric | يُخرج حرفًا أو رقمًا عشوائيًا مختلط الحالة من ASCII | نعم |
| alphanumspecial | يُخرج حرفًا أو رقمًا أو علامة ترقيم عشوائية مختلطة الحالة من ASCII | نعم |
| alphanumspecialurl | يُخرج حرفًا أو رقمًا عشوائيًا مختلط الحالة من ASCII، أو أحد الأحرف التالية: -._~ | نعم |
| alphaupper | يُخرج حرفًا كبيرًا عشوائيًا من ASCII | نعم |
| alphalower | يُخرج حرفًا صغيرًا عشوائيًا من ASCII | نعم |
| alphauppernumber | يُخرج حرفًا كبيرًا أو رقمًا عشوائيًا من ASCII | نعم |
| alphalowernumber | يُخرج حرفًا صغيرًا أو رقمًا عشوائيًا من ASCII | نعم |
| alpha | يُخرج حرفًا عشوائيًا من ASCII | نعم |
| number | يُخرج رقمًا عشوائيًا | نعم |
| hex | يُخرج رقمًا سداسيًا عشريًا عشوائيًا | نعم |
| netbios | يُخرج حرفًا أو رقمًا عشوائيًا مختلط الحالة من ASCII، أو أحد الأحرف التالية: !@#$%^&)(.-'_{}~ | نعم |
| custom | يختار حرفًا عشوائيًا من ملف charset المقدم | نعم |
| word | يُخرج كلمة عشوائية من قائمة الكلمات المقدمة أو المدمجة | نعم |
| boolean | يُخرج قيمة 'True' أو 'False' | نعم |
| useragent | يُخرج 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 عشوائيًا من القائمة المقدمة أو المدمجة | لا |