
Source ouverte C&C Spécification
Brouillon : Demande de Discussion
Ce document donne un aperçu de la version 1 de la spécification OST C&C. Il est destiné à fournir une description détaillée des messages et des champs contenus dans ces messages.
La motivation derrière cette spécification est de fournir un protocole de messagerie C&C (incluant les tâches, la sortie structurée et le routage pair-à-pair) qui peut être implémenté tel quel, ou simplement servir d'inspiration aux développeurs de projets. Ce document n'est pas destiné à décrire ce qu'est un C&C. Il est supposé que le lecteur comprend ce que c'est et à quoi cela sert.
Les mots-clés « MUST », « MUST NOT », « REQUIRED », « SHALL », « SHALL NOT », « SHOULD », « SHOULD NOT », « RECOMMENDED », « MAY » et « OPTIONAL » doivent être interprétés comme décrit dans RFC2119.
Cette spécification repose sur les hypothèses suivantes :
Voici une liste des termes utilisés dans ce document.
Métadonnées de l'implant: Informations qu'un implant rapporte sur lui-même à un serveur d'équipe.
Requête de tâche: Tâche donnée à un implant pour qu'il l'exécute.
Réponse de tâche: Le statut et la sortie (le cas échéant) d'une tâche donnée.
Clé de session: Clé de chiffrement unique utilisée par un implant pour chiffrer ses messages.
Chaque message de requête et de réponse de tâche DOIT avoir l'en-tête de 16 octets suivant.```text | Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | -------------------------------------------------------------| | 0 | Type | Code | Flags | Label | | -------------------------------------------------------------| | 1 | Identifier | Length | | -------------------------------------------------------------|
- **Type**: entier de 1 octet. Le 'type' de tâche. Voir [[Types de tâches et codes](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Code**: entier de 1 octet. Un 'sous-code' pour le Type donné. Voir [[Types de tâches et codes](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-types-and-codes)].
- **Flags**: entier de 2 octets. Un ensemble de drapeaux binaires décrivant l'état du message. Voir [[Drapeaux de tâche](https://github.com/rasta-mouse/ost-c2-spec?tab=readme-ov-file#task-flags)].
- **Label**: entier de 4 octets. Une étiquette unique pour corréler plusieurs messages liés à la même tâche.
- **Identifier**: entier de 4 octets. Un identifiant séquentiel utilisé pour reconstruire les messages fragmentés dans le bon ordre.
- **Length**: entier de 4 octets. La longueur totale des données de la tâche.
## Types de tâches et codes```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 |
|---------------------------------------------|
Certains indicateurs sont mutuellement exclusifs et NE DOIVENT PAS être définis ensemble. Si aucun indicateur n'est défini, une tâche DEVRAIT être considérée comme terminée avec succès et la sortie associée (le cas échéant) n'est PAS fragmentée.```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 |
## Données de tâche