HardHat C2

HardHat ist ein Multi-User C# .NET-basiertes Command & Control (C2)-Framework, das entwickelt wurde, um Red-Team-Einsätze und Penetrationstests zu unterstützen. Es zielt darauf ab, die Lebensqualität während der Einsätze zu verbessern, indem es ein robustes, benutzerfreundliches C2-Framework bereitstellt.
HardHat besteht aus drei Hauptkomponenten:
- Einem ASP.NET-Teamserver
- Einem Blazor .NET-Client
- Eingebauten C#-basierten Implants
- Unterstützung für Implants von Drittanbietern in anderen Sprachen
Die vollständige Dokumentation ist verfügbar unter https://docs.hardhat-c2.net/.
HINWEIS: HardHat befindet sich in einer Alpha-Version; es wird Fehler geben, fehlende Funktionen und unerwartete Dinge werden passieren. Vielen Dank, dass Sie es ausprobieren, und melden Sie bitte alle Probleme oder fehlenden Funktionen zurück, damit sie behoben werden können.
Treten Sie unserer Discord-Community bei, um über HardHat C2, Programmierung, Red Teaming und allgemeine Cybersicherheitsthemen zu sprechen. Es ist auch ein großartiger Ort, um Hilfe zu bitten, Bugs oder neue Funktionen zu melden und über die neuesten Ergänzungen auf dem Laufenden zu bleiben.
Beiträge zum Code sind willkommen! Fühlen Sie sich frei, Feature-Anfragen, Pull-Requests zu senden oder mir Ihre Ideen auf Discord mitzuteilen.
Funktionen
Unterstützung für benutzerdefinierte Assets
- Assets sind die Implants und zugehörigen Plugins für den Teamserver und Client.
Um die verfügbaren zu sehen und zu erfahren, wie man weitere erstellt, schauen Sie sich die HardHat Toolbox an.
Teamserver & Client
- Individuelle Operator-Konten mit rollenbasierter Zugriffskontrolle (RBAC)
- Ermöglicht Kontopersonalisierung
- Ermöglicht eingeschränkten Zugriff auf bestimmte Funktionen (z.B. reine Gäste-Rolle, Teamleiter-OpSec-Genehmigung (WIP))
- Manager (Listener)
- Dynamische Payload-Generierung (EXE, DLL, Shellcode, PowerShell-Befehl)
- Erstellung und Bearbeitung von C2-Profilen im laufenden Betrieb im Client
- Anpassung der Payload-Generierung
- Sleep-Zeit/Jitter
- Kill-Datum
- Arbeitszeiten
- Typ (EXE, DLL, Shellcode, PowerShell-Befehl)
- Enthaltene Befehle (WIP)
- Option zum Ausführen von ConfuserEx
- Datei-Upload & -Downloads
- Grafikansicht
- Dateibrowser-GUI
- Ereignisprotokoll
- JSON-Protokollierung für Ereignisse und Aufgaben
- Beute-Verfolgung
- Anmeldeinformationen
- Downloads
- Indicator of Compromise (IOC)-Verfolgung
- Pivot-Proxies (SOCKS 4a, Port-Weiterleitungen)
- Anmeldeinformationsspeicher
- Autovervollständigung der Befehlshistorie
- Detaillierter Hilfe-Befehl
- Interaktiver Bash-Terminalbefehl, wenn der Client auf Linux läuft, oder PowerShell auf Windows
- Ermöglicht automatisches Parsen und Protokollieren von Terminalbefehlen wie proxychains
- Persistente Datenbankspeicherung von Teamserver-Einträgen (Benutzerkonten, Manager, Engineers, Ereignisse, Aufgaben, Credentials, Downloads, Uploads usw.)
- Recon-Entity-Tracking (Verfolgen von Informationen über Benutzer/Geräte, ggf. zufällige Metadaten)
- Gemeinsam genutzte Dateien für einige Befehle (Details siehe Teamserver-Seite)
- Tab-basiertes Interaktionsfenster zum Ausgeben von Befehlen
- Tabellenbasierte Ausgabeoption für einige Befehle (z.B.
ls, ps usw.)
- Automatisches Parsen der Ausgabe von Seatbelt zur Erstellung von 'Recon Entities' für bequeme Referenz
- Dunkles und Helles 🤮-Design

Engineers
- C# .NET Framework-Implantat für Windows-Geräte (derzeit nur CLR/.NET 4-Unterstützung)
- Derzeit nur ein Implantat, aber wir planen weitere hinzuzufügen
- Kann als EXE, DLL, Shellcode oder PowerShell-Stager generiert werden
- RC4-Verschlüsselung des Payload-Speichers & Heaps im Ruhezustand (nur EXE/DLL)
- AES-Verschlüsselung der gesamten Netzwerkkommunikation
- ConfuserEx-Integration zur Verschleierung
- HTTP-, HTTPS-, TCP-, SMB-Kommunikation
- TCP & SMB können Peer-to-Peer (P2P) in Bind- oder Reverse-Konfigurationen arbeiten
- Eindeutiger, pro Implantat generierter Schlüssel zur Kompilierzeit
- Mehrere Callback-URIs, abhängig vom C2-Profil
- P/Invoke- & D/Invoke-Integration für Windows-API-Aufrufe
- SOCKS 4a-Unterstützung
- Reverse Port Forward & Port Forwards
- Alle Befehle laufen als asynchrone, abbrechbare Jobs
- Option, Befehle bei Bedarf synchron auszuführen
- Inline-Assembly-Ausführung & Inline-Shellcode-Ausführung
- DLL-Injection
- Assembly-Ausführung & Mimikatz-Integration
- Mimikatz ist nicht in das Implantat integriert, sondern wird bei bestimmten Befehlen übertragen
- Verschiedene lokale und Netzwerk-Enumerationstools
- Token-Manipulationsbefehle
- Lateral-Movement-Befehle
- Jump (psexec, wmi, wmi-ps, winrm, dcom)
- Remote-Ausführung (WIP)
- AMSI- & ETW-Patching
- Unmanaged PowerShell
- Skriptspeicher ermöglicht das gleichzeitige Laden mehrerer Skripte
- Spawn & Inject
- Spawn-to ist konfigurierbar
- Run, execute und shell

Erste Schritte
Installation
Docker
- Docker und Docker Compose installieren
- Führen Sie
docker compose up -d aus
- Optional können Sie
HARDHAT_ADMIN_USERNAME und/oder HARDHAT_ADMIN_PASSWORD als Umgebungsvariablen angeben; falls weggelassen, werden der Standard-Admin-Benutzername und ein zufällig generiertes Passwort beim ersten Start in die Teamserver-Logs geschrieben.
- Navigieren Sie in Ihrem Browser zu https://localhost:7096/.
Manuell
- Installieren Sie das .NET 7 SDK von Microsoft.
- Führen Sie
dotnet run aus dem Verzeichnis .\TeamServer aus, um den Teamserver zu erstellen und zu starten.
- Führen Sie
dotnet run https://<TEAMSERVER_HOST>:<TEAMSERVER_PORT> aus dem Verzeichnis HardHatC2Client aus
- Zum Beispiel, wenn Ihr Teamserver auf demselben Host und Standardport läuft:
dotnet run https://127.0.0.1:5000
- Navigieren Sie in Ihrem Browser zu https://localhost:7096/.
Um die Lauschadresse des Teamservers (d.h. wo sich Clients verbinden) zu konfigurieren, bearbeiten Sie .\TeamServer\Properties\LaunchSettings.json und ändern Sie "applicationUrl": "https://127.0.0.1:5000" auf den gewünschten Ort und Port.
Einrichtung
- Melden Sie sich in der Client-Web-UI mit dem Benutzernamen und Passwort an, die als Umgebungsvariable gesetzt oder vom Teamserver an STDOUT ausgegeben wurden.
- Navigieren Sie zur Einstellungsseite und erstellen Sie ein neues Benutzerkonto
- Bei Erfolg erscheint eine Meldung; Sie können sich dann mit diesem Konto anmelden, um auf den vollen Client zuzugreifen.
Release-Tracking
- Alpha 0.2 Release - 7/6/23
- Alpha Release - 3/29/23