
pyCobaltHound est une extension de script Aggressor pour Cobalt Strike qui vise à fournir une intégration profonde entre Cobalt Strike et Bloodhound.
pyCobaltHound est une extension de script Aggressor pour Cobalt Strike qui vise à fournir une intégration profonde entre Cobalt Strike et Bloodhound.
pyCobaltHound s'efforce d'aider les opérateurs red team en :
BloodHound pour découvrir les chemins d'escalade ouverts par des identifiants nouvellement collectés.Pour y parvenir, pyCobaltHound utilise un ensemble de requêtes intégrées. Les opérateurs peuvent également ajouter/supprimer leurs propres requêtes pour affiner les capacités de surveillance de pyCobaltHound. Cela leur offre la flexibilité d'adapter pyCobaltHound à la volée pendant les engagements pour tenir compte de cibles spécifiques à l'engagement (utilisateurs, hôtes, etc.).
Pour installer pyCobaltHound, clonez ce dépôt. N'oubliez pas de cloner également le sous-module inclus !
Vous pouvez utiliser la commande suivante :
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodulesAssurez-vous que les dépendances suivantes sont correctement installées :
PyCobalt est une API Python pour Cobalt Strike. Elle expose de nombreuses fonctions Aggressor pour être utilisées directement depuis Python.
Assurez-vous d'avoir Python3+ installé. Bien que PyCobalt puisse fonctionner sur macOS et Windows également, nous ne l'avons vraiment testé que sur Linux.
Il existe deux façons d'utiliser la bibliothèque Python PyCobalt :
pyCobaltHound adopte cette approche, en définissant le chemin de recherche depuis le programme Python à l'aide de la variable sys.path variable.PyCobalt. Pour ce faire, exécutez python3 setup.py install. Vous devrez modifier pycobalthound.py pour vous assurer qu'il utilise la bibliothèque installée au lieu de celle du dépôt inclus.PyCobalt sera maintenu à l'avenir. En fait, la dernière mise à jour du projet visait à incorporer les modifications apportées dans Cobalt Strike 4.2. Cependant, comme pyCobaltHound n'utilise que des fonctions Aggressor de base pour s'interfacer avec Cobalt Strike et son opérateur, ce n'est pas un gros problème pour pyCobaltHound.PyCobalt utilisé dans ce projet est un fork réalisé par nos soins. Cependant, nous ne contrôlons pas le dépôt PyCobalt.PyCobalt est livré avec quelques commandes de la console de script pour gérer les scripts Python en cours d'exécution. Lorsque vous rechargez votre script Aggressor, vous devez d'abord arrêter explicitement les scripts Python. Sinon, ils tourneront indéfiniment sans rien faire. Pendant le développement de pyCobaltHound, nous avons remarqué que cela pouvait également conduire à un comportement indéfini.
Le rechargement de pyCobaltHound peut être effectué comme suit :
aggressor> python-stop-all`
[pycobalt] Asking script to stop: /root/pycobalthound/pycobalthound.py
[pycobalt] Script process exited: /root/pycobalthound/pycobalthound.py
aggressor> reload example.cna`
[pycobalt] Executing script /root/pycobalthound/pycobalthound.py
Pour que PyCobalt fonctionne correctement, vous ne pouvez appeler PyCobalt que dans un seul script Aggressor. Gardez cela à l'esprit si vous souhaitez utiliser pyCobaltHound avec d'autres scripts Aggressor qui utilisent PyCobalt. Notre approche consiste à avoir un script Aggressor avec des appels à python() et include() pour chaque outil basé sur PyCobalt.
notify2 est - ou était - un paquet pour afficher des notifications de bureau sur Linux. Comme nous le verrons plus tard, pyCobaltHound prend en charge plusieurs façons de notifier l'opérateur. notify2 est utilisé sur Linux pour envoyer des notifications au démon de notification via D-Bus.
Pour activer cela, notify2 doit être installé en utilisant :
pip install notify2
Utiliser pyCobaltHound dans Cobalt Strike est aussi simple que d'importer le script Aggressor pycobalthound.cna dans votre client. Une fois cela fait, vous devriez voir un menu pyCobaltHound apparaître dans votre barre de menus Cobalt Strike.

L'objectif initial de pyCobaltHound était de surveiller le cache d'identifiants de Cobalt Strike (View > Credentials) pour détecter les nouvelles entrées. Il le fait en réagissant à l'événement on_credentials que Cobalt Strike déclenche lors des modifications du magasin d'identifiants.
Lorsque cet événement est déclenché, pyCobaltHound va :
Cobalt StrikeBloodHoundBloodHound pour chaque nouvelle entité en utilisant à la fois les requêtes intégrées et personnalisées.Comme tout cela se produit de manière asynchrone par rapport au client principal Cobalt Strike, ce processus ne devrait pas bloquer votre interface utilisateur, vous pouvez donc continuer à travailler pendant que pyCobaltHound enquête en arrière-plan.
pyCobaltHound utilise des caches séparés par teamserver pour éviter les problèmes lors de l'utilisation de plusieurs teamservers.
Il existe parfois des situations où vous souhaiteriez enquêter à nouveau sur des utilisateurs spécifiques (ou l'ensemble du magasin d'identifiants). Cela peut être le cas lorsque vous avez téléchargé de nouvelles données dans la base de données BloodHound.
Comme pyCobaltHound a déjà dû enquêter (et donc mettre en cache) toutes les entités de votre magasin d'identifiants, il ne les évaluera pas par rapport à ces nouvelles données sans une intervention de l'opérateur.
Deux méthodes sont disponibles pour les opérateurs afin de contrôler quelles entités sont mises en cache.
Dans les cas où vous souhaitez supprimer une entité spécifique (ou plusieurs) du cache, vous pouvez le faire dans le visualiseur d'identifiants (View > Credentials). Sélectionnez simplement votre(vos) cible(s) et cliquez sur l'option remove from cache sous l'entrée de menu pyCobaltHound.
Dans les cas où vous souhaitez supprimer toutes les entités du cache, vous pouvez le faire dans le menu principal de pyCobaltHound (Cobalt Strike > pyCobaltHound > Wipe cache). C'est très utile lorsque vous souhaitez réévaluer l'ensemble de votre magasin d'identifiants.
