
Custom Command and Control (C3). A framework for rapid prototyping of custom C2 channels, while still providing integration with existing offensive toolkits.

Build C3 (MSVC)/badge.svg?branch=master)
Build C3 (Clang)/badge.svg?branch=master)
C3 (Comando e Controle Personalizado) é uma ferramenta que permite que Red Teams desenvolvam e utilizem rapidamente canais de comando e controle (C2) esotéricos. É um framework que estende outras ferramentas de red team, como o produto comercial Cobalt Strike (CS) via ExternalC2, que é suportado no lançamento. Permite que o Red Team se preocupe apenas com o C2 que deseja implementar; confiando na robustez do C3 e das ferramentas do CS para cuidar do resto. Essa eficiência e confiabilidade permitem que as Red Teams operem com segurança em ambientes críticos de clientes (garantindo um nível profissional de estabilidade e segurança); ao mesmo tempo que permitem experimentação segura e implantação rápida de Táticas, Técnicas e Procedimentos (TTPs) personalizados. Assim, capacitando as Red Teams a emular e simular um atacante adaptativo do mundo real.
Veja esta postagem do blog para um tutorial detalhado.
Para o guia de contribuição (tutoriais sobre como desenvolver um Canal), consulte esta página.
| Serviço | Contribuidor |
|---|---|
| MSSQL | @checkymander |
| UNC Share File | |
| LDAP | |
| Printer Jobs |
Os termos mais comumente usados no C3:
Relays - peças independentes das Redes C3. Elas se comunicam usando Interfaces. Existem dois tipos de Relays: Gate Relays (ou Gateways) e Node Relays.Gateway - um Relay especial que controla uma Rede C3. Uma Rede C3 não pode operar sem um Gateway operacional. O Gateway é a ponte de volta para a infraestrutura do atacante a partir dos Node Relays. Também é responsável por se comunicar de volta com um servidor C2 de terceiros (como o Teamserver do Cobalt Strike). Gateways devem sempre ser hospedados dentro de uma infraestrutura controlada pelo atacante.Node Relay - um executável a ser iniciado em um host comprometido. se comunicam através de entre si ou de volta para o .Para instalar os pacotes necessários para compilar o C3, os seguintes componentes individuais precisam ser adicionados ao ambiente Visual Studio. Isso pode ser feito usando o setup.exe do VS (por exemplo, "c:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"), selecionando Modificar e adicionando os seguintes componentes individuais:
Após a instalação desses componentes, inicie o Prompt de Comando do Desenvolvedor do Visual Studio e execute o arquivo CreateBuild.bat. A saída deve estar presente no diretório Builds.
| Nome do Canal | Contribuidor |
|---|
| Mattermost | @mariuszbit |
| Asana | @tvgdb2 |
| GitHub | @sunn_y_k |
| Dropbox | @adm1nPanda |
| Cisco WebEx Teams | @tvgdb2 |
| JIRA | |
| Discord | |
| GoogleDrive | |
| Slack | |
| EWS Tasks | |
| OneDrive 365 Rest File (não funcional) | |
| OneDrive 365 Rest Task (não funcional) |
Node RelaysDevicesGatewayInterface - um nome de alto nível dado a qualquer coisa que facilite o envio e recebimento de dados dentro de uma rede C3. Elas estão sempre conectadas a algum Relay e seu propósito é estender a capacidade do Relay. Atualmente existem três tipos de Interfaces: Channels, Peripherals e Connectors.Devices - nome comum para Channels e Peripherals. Essa abstração é criada para generalizar Interfaces que podem ser usadas em Node Relays.Channel - uma Interface usada para transportar dados entre dois Relays. Channels funcionam em pares e não suportam transmissão de um para muitos (veja Negotiation Channels).Negotiation Channel - um Channel especial capaz de estabelecer conexões de Channel regulares com múltiplos Relays. O processo de negociação é totalmente automático. Negotiation Channels suportam apenas o protocolo de negociação e não podem ser usados em nenhuma outra transmissão.Gateway Return Channel (GRC) - o Channel configurado que um Relay usará para enviar dados de volta ao Gateway. GRC pode ser uma rota através de outro Relay. O primeiro Channel (inicial) em um Node Relay é automaticamente definido como GRC para aquele Node Relay.C3 Minimal MTU - a porção mínima de dados que todo Channel C3 é obrigado a ser capaz de enviar. Atualmente C3 Minimal MTU é igual a 64 bytes. A menos que um fragmento menor que 64 bytes contenha um pacote completo, o Relay receptor o ignora e o Relay remetente tenta reenviar a última porção de dados.Peripherals - um implante de terceiros de um framework de comando e controle. Peripherals se comunicam com seus controladores nativos através de um Controller. Por exemplo, o SMB beacon do Cobalt Strike.Connectors - uma integração com um framework de comando e controle de terceiros. Por exemplo, a interface ‘External C2’ exposta pelo Teamserver do Cobalt Strike através do comando externalc2_start.Binders - nome comum para Peripherals e Connectors.Device ID - um ID dinâmico que identifica exclusivamente um Device em um Relay.Agent ID - um ID dinâmico que identifica exclusivamente um Node Relay. Node Relays instanciados a partir do mesmo executável terão Agent IDs diferentes.Build ID - um ID estático que é incorporado em cada Relay. Permanece inalterado entre reinicializações.Route ID - um par de um Agent ID e um Device ID. Usado para descrever um "caminho" para um Node Relay (Node Relays podem ser alcançados por meio de várias Routes).Route - um "caminho" para um Node Relay. Cada Relay mantém uma tabela de todos os seus Relays filhos (e netos, bisnetos, etc.) juntamente com os Device IDs dos Channels usados para alcançar aquele Relay específico (veja Route ID). Quando um pacote do Gateway chega a um Node Relay, a tabela de roteamento é usada para escolher o Channel apropriado para enviar o pacote ao destinatário.Update Delay Jitter - atraso entre atualizações sucessivas de uma Interface (no caso de Channels - chamadas ao método OnReceiveFromChannel). Pode ser configurado para ser aleatório dentro de uma faixa de valores de tempo fornecida.