
pyCobaltHound es una extensión de script Aggressor para Cobalt Strike que tiene como objetivo proporcionar una integración profunda entre Cobalt Strike y Bloodhound.
pyCobaltHound es una extensión de script Aggressor para Cobalt Strike que tiene como objetivo proporcionar una integración profunda entre Cobalt Strike y Bloodhound.
pyCobaltHound se esfuerza por ayudar a los operadores de equipos rojos mediante:
BloodHound para descubrir rutas de escalación abiertas por credenciales recién recolectadas.Para lograr esto, pyCobaltHound utiliza un conjunto de consultas integradas. Los operadores también pueden añadir/eliminar sus propias consultas para ajustar las capacidades de monitoreo de pyCobaltHound. Esto les da la flexibilidad de adaptar pyCobaltHound sobre la marcha durante los compromisos para tener en cuenta objetivos específicos del compromiso (usuarios, hosts, etc.).
Para instalar pyCobaltHound, clone este repositorio. ¡No olvide clonar también el submódulo incluido!
Puede usar el siguiente comando:
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodulesAsegúrese de que las siguientes dependencias estén correctamente instaladas:
PyCobalt es una API de Python para Cobalt Strike. Expone muchas funciones de Aggressor para ser utilizadas directamente desde Python.
Asegúrese de tener instalado Python3+. Aunque PyCobalt puede funcionar también en macOS y Windows, solo lo hemos probado realmente en Linux.
Hay dos formas de usar la librería Python PyCobalt:
pyCobaltHound adopta este enfoque, estableciendo la ruta de búsqueda desde el programa Python usando la variable sys.path.PyCobalt. Para hacerlo, ejecute python3 setup.py install. Deberá modificar pycobalthound.py para asegurarse de que use la librería instalada en lugar de la del repositorio incluido.PyCobalt se mantenga en el futuro. De hecho, la última actualización del proyecto fue para incorporar los cambios realizados en Cobalt Strike 4.2. Dado que pyCobaltHound solo utiliza funciones básicas de Aggressor para interactuar con Cobalt Strike y su operador, esto no es un gran problema para pyCobaltHound.PyCobalt utilizado en este proyecto es un fork realizado por nosotros. Sin embargo, no controlamos el repositorio de PyCobalt.PyCobalt viene con algunos comandos de la consola de scripts para gestionar los scripts Python en ejecución. Cuando recargue su script Aggressor, debería detener explícitamente los scripts Python primero. De lo contrario, se ejecutarán para siempre sin hacer nada. Durante el desarrollo de pyCobaltHound, notamos que esto también puede provocar un comportamiento indefinido.
Recargar pyCobaltHound se puede hacer de la siguiente manera:
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
Para que PyCobalt funcione correctamente, solo puede llamar a PyCobalt en un script Aggressor. Tenga esto en cuenta si desea usar pyCobaltHound junto con otros scripts Aggressor que usen PyCobalt. Nuestro enfoque es tener un script Aggressor con llamadas a python() e include() para cada herramienta basada en PyCobalt.
notify2 es – o era – un paquete para mostrar notificaciones de escritorio en Linux. Como veremos más adelante, pyCobaltHound soporta algunas formas de notificar al operador. notify2 se usa en Linux para enviar notificaciones al demonio de notificaciones a través de D-Bus.
Para habilitarlo, notify2 debe instalarse usando:
pip install notify2
Usar pyCobaltHound en Cobalt Strike es tan simple como importar el script Aggressor pycobalthound.cna en su cliente. Una vez hecho esto, debería ver un menú pyCobaltHound en la barra de menú de su Cobalt Strike.

El objetivo inicial de pyCobaltHound era monitorear el caché de credenciales de Cobalt Strike (Ver > Credenciales) en busca de nuevas entradas. Lo hace reaccionando al evento on_credentials que Cobalt Strike dispara cuando se realizan cambios en el almacén de credenciales.
Cuando se dispara este evento, pyCobaltHound:
Cobalt Strike.BloodHound.BloodHound para cada nueva entidad utilizando tanto consultas integradas como personalizadas.Dado que todo esto tiene lugar de forma asíncrona con respecto al cliente principal de Cobalt Strike, este proceso no debería bloquear su interfaz de usuario, por lo que puede seguir trabajando mientras pyCobaltHound investiga en segundo plano.
pyCobaltHound utiliza cachés separados por teamserver para evitar problemas al usar múltiples teamservers.
A veces hay situaciones en las que desearía investigar usuarios específicos (o todo el almacén de credenciales) nuevamente. Esto podría ser el caso cuando ha subido nuevos datos a la base de datos de BloodHound.
Dado que pyCobaltHound ya debería haber investigado (y por lo tanto almacenado en caché) todas las entidades en su almacén de credenciales, no las evaluará contra estos nuevos datos sin alguna intervención del operador.
Hay dos métodos disponibles para que los operadores controlen qué entidades están en caché.
En casos donde desee eliminar una entidad específica (o varias) del caché, puede hacerlo en el visor de credenciales (Ver > Credenciales). Simplemente seleccione su(s) objetivo(s) y haga clic en la opción eliminar del caché bajo la entrada del menú pyCobaltHound.
En casos donde desee eliminar todas las entidades del caché, puede hacerlo en el menú principal de pyCobaltHound (Cobalt Strike > pyCobaltHound > Limpiar caché). Esto es más útil cuando desea reevaluar todo su almacén de credenciales.

Después de eliminar sus objetivos del caché, puede solicitar manualmente que pyCobaltHound reinvestigue el contenido del almacén de credenciales. Esto sigue exactamente el mismo proceso que el anterior.