
مصدر مفتوح لمواصفات C&C
مسودة: طلب مناقشة
توفر هذه الوثيقة نظرة عامة على الإصدار 1 من مواصفات OST C&C. يُقصد منها تقديم وصف تفصيلي للرسائل والحقول الموجودة داخل تلك الرسائل.
الدافع وراء هذه المواصفات هو توفير بروتوكول مراسلة للتحكم والقيادة (بما في ذلك تكليف المهام، والمخرجات المنظمة، والتوجيه من نظير إلى نظير) يمكن تنفيذه حرفيًا، أو ببساطة أن يكون مصدر إلهام لمطوري المشاريع. ليست هذه الوثيقة مخصصة لوصف ما هو C&C. من المفترض أن القارئ يفهم ما هو وما يُستخدم من أجله.
الكلمات المفتاحية "MUST"، "MUST NOT"، "REQUIRED"، "SHALL"، "SHALL NOT"، "SHOULD"، "SHOULD NOT"، "RECOMMENDED"، "MAY"، و"OPTIONAL" يجب تفسيرها كما هو موضح في [RFC2119].
تفترض هذه المواصفات ما يلي:
فيما يلي قائمة بالمصطلحات المستخدمة في هذه الوثيقة.
البيانات الوصفية للزرع: معلومات يبلغ بها الزرع عن نفسه إلى خادم الفريق.
طلب مهمة: مهمة تُعطى للزرع لتنفيذها.
استجابة مهمة: حالة المهمة ومخرجاتها (إن وجدت) لمهمة معينة.
مفتاح الجلسة: مفتاح تشفير فريد يستخدمه الزرع لتشفير رسائله.
يجب أن تحتوي كل رسالة طلب مهمة واستجابة على الترويسة التالية ذات الـ16 بايت.```text | Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | -------------------------------------------------------------| | 0 | Type | Code | Flags | Label | | -------------------------------------------------------------| | 1 | Identifier | Length | | -------------------------------------------------------------|
- **Type**: عدد صحيح بطول 1 بايت. «نوع» هذه المهمة. انظر [[أنواع المهام ورموزها](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Code**: عدد صحيح بطول 1 بايت. «رمز فرعي» للنوع المحدد. انظر [[أنواع المهام ورموزها](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Flags**: عدد صحيح بطول 2 بايت. مجموعة من أعلام bitwise لوصف حالة الرسالة. انظر [[أعلام المهام](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-flags)].
- **Label**: عدد صحيح بطول 4 بايت. تسمية فريدة لربط رسائل متعددة متعلقة بنفس المهمة.
- **Identifier**: عدد صحيح بطول 4 بايت. معرّف تسلسلي يُستخدم لبناء الرسائل المجزّأة بالترتيب الصحيح.
- **Length**: عدد صحيح بطول 4 بايت. الطول الإجمالي لبيانات المهمة.
## أنواع المهام ورموزها```text
|------------------|--------------------------|
| Type | Code |
|------------------|--------------------------|
| 0 - NOP | 0 |
|------------------|--------------------------|
| 1 - Exit | 0 |
|------------------|--------------------------|
| 2 - Set | 0 - Sleep/Jitter |
| | 1 - SpawnTo |
| | 2 - BlockDLLs |
| | 3 - PPID |
|------------------|--------------------------|
| 3 - File | 0 - Copy |
| | 1 - Move |
| | 2 - Delete |
| | 3 - Upload |
| | 4 - Download |
|------------------|--------------------------|
| 4 - Directory | 0 - Print |
| | 1 - Change |
| | 2 - Create |
| | 3 - Copy |
| | 4 - Move |
| | 5 - List |
| | 6 - Delete |
|------------------|--------------------------|
| 5 - WhoAmI | 0 |
|------------------|--------------------------|
| 6 - Process | 0 - List |
| | 1 - Kill |
| | 2 - Inject Spawn |
| | 3 - Inject Explicit |
|------------------|--------------------------|
| 7 - Registry | 0 - Query |
| | 1 - Add |
| | 2 - Delete |
|------------------|--------------------------|
| 8 - RPortFwd | 0 - Start |
| | 1 - Data |
|------------------|--------------------------|
| 9 - Environment | 0 - Get |
| | 1 - Set |
|------------------|--------------------------|
| 10 - SOCKS | 0 - Connect |
| | 1 - Data |
| | 2 - Close |
|------------------|--------------------------|
| 11 - Tokens | 0 - List |
| | 1 - Make |
| | 2 - Steal |
| | 3 - Use |
| | 4 - Revert |
| | 5 - Delete |
| | 6 - Purge |
|------------------|--------------------------|
| 12 - Run | 0 |
|------------------|--------------------------|
| 13 - ItemStore | 0 - List |
| | 1 - Add |
| | 2 - Delete |
| | 3 - Purge |
|------------------|--------------------------|
| 14 - LocalExec | 0 - .NET |
| | 1 - BOF |
| | 2 - Managed PowerShell |
| | 3 - Unmanaged PowerShell |
|------------------|--------------------------|
| 15 - PrintScreen | 0 |
|------------------|--------------------------|
| 16 - RemoteExec | 0 - WinRM |
| | 1 - WMI |
| | 2 - PsExec |
| | 3 - SSH |
|------------------|--------------------------|
| 17 - Link | 1 - Link SMB |
| | 2 - Link TCP |
|------------------|--------------------------|
| 18 - Unlink | 0 |
|------------------|--------------------------|
| 19 - P2P | 0 - Acknowledge |
| | 1 - PassThru |
|------------------|--------------------------|
| 20 - Jobs | 0 - List |
| | 1 - Kill |
|---------------------------------------------|
بعض الأعلام متنافية ويجب ألا تُضبط معًا. إذا لم يتم ضبط أي أعلام، يُفترض أن المهمة قد اكتملت بنجاح وأن المخرجات المرتبطة بها (إن وجدت) غير مجزأة.```text
| Value | Description |
|---|---|
| 0 | No flags |
| 1 | Task Error |
| 2 | Task Running (as job) |
| 4 | Message is fragmented, more to follow |
| 8 | Message is fragmented, no more to follow |
## بيانات المهمة
تُلحق بيانات المهمة بالترويسة وتتكون من بنية ثنائية، اعتمادًا على نوع المهمة المحدد ورمزها. يتم تعريف كل نوع من أنواع رسائل طلب المهمة والاستجابة في [[تعريفات الرسائل](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#message-definitions)].
ليس من الإلزامي أن يحتوي طلب المهمة أو استجابتها على أي بيانات إذا لم تكن مطلوبة.
## رسالة المهمة المشفّرة