HardHat C2

HardHat est un framework de commande et contrôle (C2) multi-utilisateur basé sur C# .NET conçu pour aider dans les engagements de red team et les tests de pénétration. Il vise à améliorer la qualité de vie lors des engagements en fournissant un framework C2 robuste et facile à utiliser.
HardHat a trois composants principaux :
- Un teamserver ASP.NET
- Un client Blazor .NET
- Implants intégrés basés sur C#
- Prise en charge d'implants tiers dans d'autres langues
La documentation complète est disponible sur https://docs.hardhat-c2.net/.
NOTE : HardHat est en version alpha ; il contiendra des bugs, des fonctionnalités manquantes et des choses inattendues se produiront. Merci de l'essayer et veuillez signaler tout problème ou fonctionnalité manquante afin qu'ils puissent être traités.
Communauté
Rejoignez notre communauté Discord pour parler de HardHat C2, de programmation, de red teaming et de sujets généraux de cybersécurité. C'est aussi un excellent endroit pour demander de l'aide, soumettre des bugs ou de nouvelles fonctionnalités, et rester informé des dernières nouveautés.
Les contributions de code sont les bienvenues ! N'hésitez pas à soumettre des demandes de fonctionnalités, des pull requests, ou à m'envoyer vos idées sur Discord.
Fonctionnalités
Prise en charge des assets personnalisés
- Les assets sont les implants et les plugins associés pour le team server et le client.
Pour voir ceux disponibles et apprendre à en créer d'autres, consultez le HardHat Toolbox
Teamserver et Client
- Comptes d'opérateur individuels avec contrôle d'accès basé sur les rôles (RBAC)
- Permet la personnalisation du compte
- Permet un accès restreint à des fonctionnalités spécifiques (par exemple, rôle invité en lecture seule, approbation opsec du chef d'équipe (WIP))
- Managers (écouteurs)
- Génération dynamique de payload (EXE, DLL, shellcode, commande PowerShell)
- Création et édition de profils C2 à la volée dans le client
- Personnalisation de la génération de payload
- Temps de veille/gigue
- Date de fin
- Heures de travail
- Type (EXE, DLL, shellcode, commande PowerShell)
- Commandes incluses (WIP)
- Option d'exécuter ConfuserEx
- Téléversement et téléchargement de fichiers
- Vue graphique
- Interface graphique de navigation de fichiers
- Journal des événements
- Journalisation JSON pour les événements et les tâches
- Suivi du butin
- Identifiants
- Téléchargements
- Suivi des indicateurs de compromission (IOC)
- Proxies de pivot (SOCKS 4a, redirections de ports)
- Stockage d'identifiants
- Historique des commandes avec autocomplétion
- Commande d'aide détaillée
- Commande de terminal bash interactif si le client est sous Linux ou PowerShell sous Windows
- Permet l'analyse et la journalisation automatiques des commandes de terminal comme proxychains
- Stockage persistant en base de données des éléments du teamserver (comptes utilisateurs, managers, ingénieurs, événements, tâches, identifiants, téléchargements, téléversements, etc.)
- Suivi des entités de reconnaissance (suivi des informations sur les utilisateurs/périphériques, métadonnées aléatoires selon les besoins)
- Fichiers partagés pour certaines commandes (voir la page du teamserver pour plus de détails)
- Fenêtre d'interaction basée sur des onglets pour exécuter des commandes
- Option de sortie basée sur un tableau pour certaines commandes (par exemple,
ls, ps, etc.)
- Analyse automatique de la sortie de Seatbelt pour créer des « entités de reconnaissance » pour une référence pratique

Ingénieurs
- Implant basé sur .NET C# pour les appareils Windows (actuellement uniquement prise en charge de CLR/.NET 4)
- Peut être généré en tant qu'EXE, DLL, shellcode ou stager PowerShell
- Chiffrement RC4 de la mémoire du payload et du tas pendant le sommeil (EXE / DLL uniquement)
- Chiffrement AES de toutes les communications réseau
- Intégration de ConfuserEx pour l'obfuscation
- Communication HTTP, HTTPS, TCP, SMB
- TCP et SMB peuvent fonctionner en pair-à-pair (P2P) dans des configurations bind ou reverse
- Clé unique par implant générée à la compilation
- Plusieurs URI de rappel selon le profil C2
- Intégration P/Invoke et D/Invoke pour les appels API Windows
- Prise en charge de SOCKS 4a
- Redirection de port inverse et redirections de port
- Toutes les commandes s'exécutent en tant que tâches asynchrones et annulables
- Option d'exécuter les commandes de manière synchrone, si souhaité
- Exécution d'assembly inline et exécution de shellcode inline
- Injection DLL
- Exécution d'assembly et intégration Mimikatz
- Mimikatz n'est pas intégré dans l'implant mais est poussé lorsque des commandes spécifiques sont émises
- Divers outils d'énumération locale et réseau
- Commandes de manipulation de jetons
- Commandes de mouvement latéral
- Jump (psexec, wmi, wmi-ps, winrm, dcom)
- Exécution à distance (WIP)
- Correction d'interface d'analyse antimalware (AMSI) et de suivi d'événements pour Windows (ETW)
- PowerShell non managé
- Le magasin de scripts permet de charger plusieurs scripts à la fois
- Spawn & Injection
- Spawn-to est configurable
- Run, execute et shell

Pour commencer
Installation
Docker
- Installez Docker et Docker Compose
- Exécutez
docker compose up -d
- Optionnellement, fournissez
HARDHAT_ADMIN_USERNAME et/ou HARDHAT_ADMIN_PASSWORD comme variables d'environnement ; si omis, le nom d'utilisateur admin par défaut et le mot de passe généré aléatoirement seront écrits dans les logs du teamserver lors du premier démarrage
- Accédez à https://localhost:7096/ dans votre navigateur
Manuelle
- Installez le SDK .NET 7 depuis Microsoft
- Exécutez
dotnet run depuis le répertoire .\TeamServer pour compiler et démarrer le teamserver
- Exécutez
dotnet run https://<TEAMSERVER_HOST>:<TEAMSERVER_PORT> depuis le répertoire HardHatC2Client
- Par exemple, en supposant que votre teamserver tourne sur le même hôte et le port par défaut :
dotnet run https://127.0.0.1:5000
- Accédez à https://localhost:7096/ dans votre navigateur
Pour configurer l'adresse d'écoute du teamserver (c'est-à-dire où les clients se connecteront), modifiez .\TeamServer\Properties\LaunchSettings.json et changez "applicationUrl": "https://127.0.0.1:5000" vers l'emplacement et le port souhaités.
Configuration
- Connectez-vous à l'interface web du client en utilisant le nom d'utilisateur et le mot de passe définis par variable d'environnement ou affichés sur STDOUT par le teamserver
- Accédez à la page des paramètres et créez un nouveau compte utilisateur
- En cas de succès, un message apparaîtra ; vous pouvez alors vous connecter avec ce compte pour accéder au client complet
Suivi des versions
- Alpha 0.2 Release - 7/6/23
- Alpha Release - 3/29/23