
Открытая спецификация C&C
Черновик: Запрос на Обсуждение
В этом документе представлен обзор Версии 1 спецификации OST C&C. Он предназначен для подробного описания сообщений и полей, входящих в состав этих сообщений.
Мотивация, стоящая за этой спецификацией, — предоставить протокол обмена сообщениями 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 | | -------------------------------------------------------------|
- **Тип**: 1-байтовое целое число. «Тип» этой задачи. См. [[Типы задач и коды](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Код**: 1-байтовое целое число. «Подкод» для данного типа. См. [[Типы задач и коды](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Флаги**: 2-байтовое целое число. Набор побитовых флагов, описывающих состояние сообщения. См. [[Флаги задач](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-flags)].
- **Метка**: 4-байтовое целое число. Уникальная метка для сопоставления нескольких сообщений, относящихся к одной и той же задаче.
- **Идентификатор**: 4-байтовое целое число. Последовательный идентификатор, используемый для сборки фрагментированных сообщений в правильном порядке.
- **Длина**: 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 |
## Task Data