
Fonte Aberta Especificação C&C
Rascunho: Solicitação de Discussão
Este documento fornece uma visão geral da Versão 1 da Especificação OST de C&C. O objetivo é fornecer uma descrição detalhada das mensagens e dos campos dentro dessas mensagens.
A motivação por trás desta especificação é fornecer um protocolo de mensagens C&C (incluindo atribuição de tarefas, saída estruturada e roteamento ponto a ponto) que possa ser implementado literalmente, ou simplesmente servir de inspiração para desenvolvedores de projetos. Este documento não tem a intenção de descrever o que é C&C. Presume-se que o leitor entenda o que é e para que é usado.
As palavras-chave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" e "OPTIONAL" devem ser interpretadas conforme descrito na [RFC2119].
Esta especificação parte das seguintes premissas:
Abaixo está uma lista de termos usados ao longo deste documento.
Metadados do Implante: Informações que um implante relata sobre si mesmo a um servidor de equipe.
Solicitação de Tarefa: Uma tarefa atribuída a um implante para execução.
Resposta de Tarefa: O status e a saída (se houver) de uma determinada tarefa.
Chave de Sessão: Uma chave de criptografia exclusiva usada por um implante para criptografar suas mensagens.
Cada mensagem de solicitação de tarefa e de resposta DEVE ter o seguinte cabeçalho de 16 bytes.```text | Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | -------------------------------------------------------------| | 0 | Type | Code | Flags | Label | | -------------------------------------------------------------| | 1 | Identifier | Length | | -------------------------------------------------------------|
- **Type**: inteiro de 1 byte. O 'tipo' da tarefa em questão. Consulte [[Tipos e Códigos de Tarefas](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Code**: inteiro de 1 byte. Um 'subcódigo' para o Tipo fornecido. Consulte [[Tipos e Códigos de Tarefas](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Flags**: inteiro de 2 bytes. Um conjunto de flags bit a bit para descrever o estado da mensagem. Consulte [[Flags de Tarefa](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-flags)].
- **Label**: inteiro de 4 bytes. Um rótulo único para correlacionar várias mensagens relacionadas à mesma tarefa.
- **Identifier**: inteiro de 4 bytes. Um identificador sequencial usado para construir mensagens fragmentadas na ordem correta.
- **Length**: inteiro de 4 bytes. O comprimento total dos dados da tarefa.
## Tipos e Códigos de Tarefas```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 |
|---------------------------------------------|
Algumas flags são mutuamente exclusivas e NÃO DEVEM ser definidas em conjunto. Se nenhuma flag for definida, uma tarefa DEVERIA ser considerada como concluída com êxito e a saída associada (se houver) NÃO é fragmentada.```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 |
## Dados da Tarefa