
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 (Custom Command and Control) ist ein Tool, das Red Teams ermöglicht, schnell esoterische Command-and-Control-Kanäle (C2) zu entwickeln und zu nutzen. Es ist ein Framework, das andere Red-Team-Tools wie das kommerzielle Cobalt Strike (CS) Produkt über ExternalC2 erweitert, das zum Release unterstützt wird. Es erlaubt dem Red Team, sich nur um das C2 zu kümmern, das es implementieren möchte, während es auf die Robustheit von C3 und den CS-Tools vertraut, die sich um den Rest kümmern. Diese Effizienz und Zuverlässigkeit ermöglichen es Red Teams, sicher in kritischen Kundenumgebungen zu operieren (durch die Gewährleistung eines professionellen Niveaus an Stabilität und Sicherheit), während gleichzeitig eine sichere Experimentier- und schnelle Bereitstellung von angepassten Taktiken, Techniken und Verfahren (TTPs) möglich ist. Dies befähigt Red Teams, einen anpassungsfähigen realen Angreifer zu emulieren und zu simulieren.
Siehe diesen Blogbeitrag für ein ausführliches Tutorial.
Für den Beitragsleitfaden (wie man ein Channel-Tutorial entwickelt), siehe diese Seite.
| Service | Beitragender |
|---|---|
| MSSQL | @checkymander |
| UNC Share File | |
| LDAP | |
| Druckerjobs |
Die am häufigsten verwendeten Begriffe in C3:
Relays - eigenständige Teile von C3-Netzwerken. Sie kommunizieren über Interfaces. Es gibt zwei Arten von Relays: Gate Relays (oder Gateways) und Node Relays.Gateway - ein spezielles Relay, das ein C3-Netzwerk steuert. Ein C3-Netzwerk kann ohne ein betriebsbereites Gateway nicht funktionieren. Das Gateway ist die Brücke zurück zur Angreiferinfrastruktur von den Node Relays aus. Es ist auch verantwortlich für die Kommunikation zurück zu einem C2-Server eines Drittanbieters (wie z.B. Cobalt Strikes Teamserver). Gateways sollten immer innerhalb der kontrollierten Infrastruktur des Angreifers gehostet werden.Node Relay - eine ausführbare Datei, die auf einem kompromittierten Host gestartet wird. kommunizieren über entweder untereinander oder zurück zum .Um die notwendigen Pakete zur Kompilierung von C3 zu installieren, müssen die folgenden einzelnen Komponenten zur Visual Studio-Umgebung hinzugefügt werden. Dies kann durch Verwendung der VS setup.exe (z.B. "c:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"), Auswahl von "Ändern" und Hinzufügen der folgenden einzelnen Komponenten erreicht werden:
Sobald diese Komponenten installiert sind, starten Sie die Visual Studio Developer Command Prompt und führen Sie die Datei CreateBuild.bat aus. Die Ausgabe sollte im Builds-Verzeichnis vorhanden sein.
| Kanalname | Beitragender |
|---|
| Mattermost | @mariuszbit |
| Asana | @tvgdb2 |
| GitHub | @sunn_y_k |
| Dropbox | @adm1nPanda |
| Cisco WebEx Teams | @tvgdb2 |
| JIRA | |
| Discord | |
| GoogleDrive | |
| Slack | |
| EWS Tasks | |
| OneDrive 365 Rest File (nicht funktionsfähig) | |
| OneDrive 365 Rest Task (nicht funktionsfähig) |
Node RelaysDevicesGatewayInterface - ein allgemeiner Name für alles, was das Senden und Empfangen von Daten in einem C3-Netzwerk ermöglicht. Sie sind immer mit einem Relay verbunden und ihr Zweck ist es, die Fähigkeit des Relays zu erweitern. Derzeit gibt es drei Arten von Interfaces: Channels, Peripherals und Connectors.Devices - gemeinsamer Name für Channels und Peripherals. Diese Abstraktion wurde erstellt, um Interfaces zu verallgemeinern, die auf Node Relays verwendet werden können.Channel - ein Interface, das zum Transport von Daten zwischen zwei Relays verwendet wird. Channels arbeiten paarweise und unterstützen keine Eins-zu-Viele-Übertragung (siehe Negotiation Channels).Negotiation Channel - ein spezieller Channel, der in der Lage ist, reguläre Channel-Verbindungen mit mehreren Relays herzustellen. Der Verhandlungsprozess ist vollautomatisch. Negotiation Channels unterstützen nur das Verhandlungsprotokoll und können nicht für andere Übertragungen verwendet werden.Gateway Return Channel (GRC) - der konfigurierte Channel, den ein Relay verwendet, um Daten zurück zum Gateway zu senden. GRC kann eine Route durch ein anderes Relay sein. Der erste Channel (initial) auf einem Node Relay wird automatisch als GRC für dieses Node Relay festgelegt.C3 Minimal MTU - der minimale Datenanteil, den jeder C3-Kanal übertragen können muss. Derzeit beträgt C3 Minimal MTU 64 Bytes. Sofern ein Datenblock, der kürzer als 64 Bytes ist, kein vollständiges Paket enthält, ignoriert das empfangende Relay ihn und das sendende Relay versucht, den letzten Datenanteil erneut zu senden.Peripherals - ein Implantat eines Drittanbieter-Command-and-Control-Frameworks. Peripherals kommunizieren über einen Controller mit ihren nativen Controllern. Zum Beispiel Cobalt Strikes SMB-Beacon.Connectors - eine Integration mit einem Command-and-Control-Framework eines Drittanbieters. Zum Beispiel das 'External C2'-Interface, das von Cobalt Strikes Teamserver über den Befehl externalc2_start bereitgestellt wird.Binders - gemeinsamer Name für Peripherals und Connectors.Device ID - eine dynamische ID, die ein Device auf einem Relay eindeutig adressiert.Agent ID - eine dynamische ID, die ein Node Relay eindeutig adressiert. Node Relays, die aus derselben ausführbaren Datei instanziiert wurden, haben unterschiedliche Agent IDs.Build ID - eine statische ID, die in jedes Relay eingebaut ist. Bleibt über Neustarts hinweg unverändert.Route ID - ein Paar aus einer Agent ID und einer Device ID. Wird verwendet, um einen "Pfad" zu einem Node Relay zu beschreiben (Node Relays können über viele Routes erreichbar sein).Route - ein "Pfad" zu einem Node Relay. Jedes Relay führt eine Tabelle aller ihrer untergeordneten Relays (sowie Enkel, Urenkel usw.) zusammen mit den Channel-Device IDs, die verwendet werden, um dieses bestimmte Relay zu erreichen (siehe Route ID). Wenn ein Paket vom Gateway zu einem Node Relay gelangt, wird die Routing-Tabelle verwendet, um den geeigneten Channel auszuwählen, über den das Paket zum Empfänger gesendet wird.Update Delay Jitter - Verzögerung zwischen aufeinanderfolgenden Aktualisierungen eines Interface (im Fall von Channels - Aufrufe der Methode OnReceiveFromChannel). Kann so eingestellt werden, dass sie im angegebenen Bereich von Zeitwerten zufällig variiert wird.