
Comando y Control personalizado (C3). Un framework para el prototipado rápido de canales C2 personalizados, al tiempo que proporciona integración con kits de herramientas ofensivas existentes.

Build C3 (MSVC)/badge.svg?branch=master)
Build C3 (Clang)/badge.svg?branch=master)
C3 (Custom Command and Control) es una herramienta que permite a los Red Teams desarrollar y utilizar rápidamente canales de comando y control (C2) esotéricos. Es un framework que extiende otras herramientas de red team, como el producto comercial Cobalt Strike (CS), a través de ExternalC2, el cual es compatible desde el lanzamiento. Permite que el Red Team se preocupe únicamente por el C2 que desea implementar, confiando en la robustez de C3 y las herramientas de CS para encargarse del resto. Esta eficiencia y fiabilidad permiten a los Red Teams operar de forma segura en entornos críticos de clientes (garantizando un nivel profesional de estabilidad y seguridad), al tiempo que permiten una experimentación segura y un despliegue rápido de Tácticas, Técnicas y Procedimientos (TTPs) personalizados. De este modo, se capacita a los Red Teams para emular y simular un atacante adaptativo del mundo real.
Consulte este artículo del blog para obtener un tutorial detallado.
Para la guía de contribución (tutoriales sobre cómo desarrollar un Canal), consulte esta página.
| Servicio | Colaborador |
|---|---|
| MSSQL | @checkymander |
| UNC Share File | |
| LDAP | |
| Printer Jobs |
Los términos más utilizados en C3:
Relays - piezas independientes de las Redes C3. Se comunican mediante Interfaces. Hay dos tipos de Relays: Gate Relays (o Gateways) y Node Relays.Gateway - un Relay especial que controla una Red C3. Una Red C3 no puede operar sin un Gateway operativo. El Gateway es el puente de regreso a la infraestructura del atacante desde los Node Relays. También es responsable de comunicarse con un servidor C2 de terceros (como el Teamserver de Cobalt Strike). Los Gateways siempre deben alojarse dentro de la infraestructura controlada por el atacante.Node Relay - un ejecutable que se lanza en un host comprometido. Los se comunican a través de , ya sea entre ellos o de vuelta al .Para instalar los paquetes necesarios para compilar C3, deben añadirse los siguientes componentes individuales al entorno de Visual Studio. Esto se puede lograr utilizando el setup.exe de VS (por ejemplo, "c:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"), seleccionando Modificar y añadiendo los siguientes componentes individuales:
Una vez instalados estos componentes, inicie el Símbolo del sistema para desarrolladores de Visual Studio y ejecute el archivo CreateBuild.bat. La salida debería estar presente en el directorio Builds.
| Nombre del Canal | Colaborador |
|---|
| Mattermost | @mariuszbit |
| Asana | @tvgdb2 |
| GitHub | @sunn_y_k |
| Dropbox | @adm1nPanda |
| Cisco WebEx Teams | @tvgdb2 |
| JIRA | |
| Discord | |
| GoogleDrive | |
| Slack | |
| EWS Tasks | |
| OneDrive 365 Rest File (no funcional) | |
| OneDrive 365 Rest Task (no funcional) |
Node RelaysDevicesGatewayInterface - un nombre de alto nivel dado a cualquier cosa que facilite el envío y la recepción de datos dentro de una red C3. Siempre están conectadas a algún Relay y su propósito es extender la capacidad del Relay. Actualmente hay tres tipos de Interfaces: Channels, Peripherals y Connectors.Devices - nombre común para Channels y Peripherals. Esta abstracción se crea para generalizar las Interfaces que pueden utilizarse en los Node Relays.Channel - una Interface utilizada para transportar datos entre dos Relays. Los Channels funcionan en pares y no admiten transmisión de uno a muchos (ver Negotiation Channels).Negotiation Channel - un Channel especial capaz de establecer conexiones Channel regulares con múltiples Relays. El proceso de negociación es totalmente automático. Los Negotiation Channels solo admiten el protocolo de negociación y no pueden utilizarse en ninguna otra transmisión.Gateway Return Channel (GRC) - el Channel configurado que un Relay utilizará para enviar datos de vuelta al Gateway. El GRC puede ser una ruta a través de otro Relay. El primer Channel (inicial) en un Node Relay se establece automáticamente como GRC para ese Node Relay.C3 Minimal MTU - la porción mínima de datos que cada Canal C3 debe ser capaz de enviar. Actualmente, C3 Minimal MTU es igual a 64 bytes. A menos que un fragmento más corto que 64 bytes contenga un paquete completo, el Relay receptor lo ignora y el Relay emisor intenta reenviar la última porción de datos.Peripherals - un implante de terceros de un framework de comando y control. Los Peripherals se comunican con sus controladores nativos a través de un Controller. Por ejemplo, el beacon SMB de Cobalt Strike.Connectors - una integración con un framework de comando y control de terceros. Por ejemplo, la interfaz 'External C2' expuesta por el Teamserver de Cobalt Strike a través del comando externalc2_start.Binders - nombre común para Peripherals y Connectors.Device ID - un ID dinámico que identifica de forma única un Device en un Relay.Agent ID - un ID dinámico que identifica de forma única un Node Relay. Los Node Relays instanciados desde el mismo ejecutable tendrán diferentes Agent IDs.Build ID - un ID estático que está incorporado en cada Relay. Permanece sin cambios tras los reinicios.Route ID - un par formado por un Agent ID y un Device ID. Se utiliza para describir una "ruta" hacia un Node Relay (los Node Relays pueden ser alcanzables a través de múltiples Routes).Route - una "ruta" hacia un Node Relay. Cada Relay mantiene una tabla de todos sus Relays hijos (y nietos, bisnietos, etc.) junto con los Device IDs de los Channels utilizados para alcanzar a ese Relay en particular (ver Route ID). Cuando un paquete del Gateway llega a un Node Relay, se utiliza la tabla de enrutamiento para elegir el Channel apropiado a través del cual enviar el paquete al destinatario.Update Delay Jitter - retraso entre actualizaciones sucesivas de una Interface (en el caso de los Channels, llamadas al método OnReceiveFromChannel). Se puede configurar para que se aleatorice dentro de un rango proporcionado de valores de tiempo.