
pyCobaltHound é uma extensão de script Aggressor para o Cobalt Strike que visa fornecer uma integração profunda entre o Cobalt Strike e o Bloodhound.
pyCobaltHound é uma extensão de script Aggressor para o Cobalt Strike que visa fornecer uma integração profunda entre o Cobalt Strike e o BloodHound.
pyCobaltHound busca auxiliar os operadores de red team ao:
BloodHound para descobrir caminhos de escalonamento abertos por credenciais recém-coletadas.Para tal, pyCobaltHound utiliza um conjunto de consultas incorporadas. Os operadores também podem adicionar/remover suas próprias consultas para ajustar as capacidades de monitorização do pyCobaltHound. Isto concede-lhes flexibilidade para adaptar o pyCobaltHound em tempo real durante os engajamentos para considerar alvos específicos do engajamento (utilizadores, hosts, etc.).
Para instalar o pyCobaltHound, clone este repositório. Não se esqueça de também clonar o submódulo incluído!
Pode usar o seguinte comando:
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodulesAssegure-se de que as seguintes dependências estejam corretamente instaladas:
PyCobalt é uma API Python para o Cobalt Strike. Ela expõe muitas funções Aggressor para serem usadas diretamente a partir do Python.
Assegure-se de ter o Python3+ instalado. Embora o PyCobalt possa funcionar também no macOS e Windows, testemo-lo apenas no Linux.
Existem duas formas de usar a biblioteca Python PyCobalt:
pyCobaltHound adota esta abordagem, definindo o caminho de busca a partir do programa Python usando a variável sys.path.PyCobalt. Para tal, execute python3 setup.py install. Terá de modificar o ficheiro pycobalthound.py para garantir que ele use a biblioteca instalada em vez da que está no repositório incluído.PyCobalt será mantido no futuro. Na verdade, a última atualização do projeto foi para incorporar as alterações feitas no Cobalt Strike 4.2. No entanto, como o pyCobaltHound usa apenas funções Aggressor básicas para interagir com o Cobalt Strike e o seu operador, isto não é um grande problema para o pyCobaltHound.PyCobalt usado neste projeto é um fork feito por nós. No entanto, não controlamos o repositório do PyCobalt.O PyCobalt vem com alguns comandos da Script Console para gerir os scripts Python em execução. Quando recarregar o seu script Aggressor, deve parar explicitamente os scripts Python primeiro. Caso contrário, eles permanecerão em execução para sempre sem fazer nada. Durante o desenvolvimento do pyCobaltHound, notámos que isso também pode levar a comportamentos indefinidos.
Recarregar o pyCobaltHound pode ser feito da seguinte forma:
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 o PyCobalt funcione corretamente, só pode chamar o PyCobalt num script Aggressor. Tenha isto em mente se quiser usar o pyCobaltHound juntamente com outros scripts Aggressor que usem o PyCobalt. A nossa abordagem é ter um script Aggressor com chamadas a python() e include() para cada ferramenta baseada em PyCobalt.
notify2 é - ou era - um pacote para exibir notificações de desktop no Linux. Como veremos mais adiante, o pyCobaltHound suporta algumas formas de notificar o operador. O notify2 é usado no Linux para enviar notificações ao daemon de notificações através do D-Bus.
Para ativar isto, o notify2 precisa ser instalado usando:
pip install notify2
Usar o pyCobaltHound no Cobalt Strike é tão simples quanto importar o script Aggressor pycobalthound.cna para o seu cliente. Uma vez feito isto, deverá ver um menu pyCobaltHound aparecer na barra de menus do seu Cobalt Strike.

O objetivo inicial do pyCobaltHound era monitorizar a cache de credenciais do Cobalt Strike (View > Credentials) em busca de novas entradas. Ele faz isso reagindo ao evento on_credentials que o Cobalt Strike dispara quando são feitas alterações no armazenamento de credenciais.
Quando este evento é disparado, o pyCobaltHound irá:
Cobalt StrikeBloodHoundBloodHound para cada nova entidade usando consultas incorporadas e personalizadas.Como tudo isto ocorre de forma assíncrona em relação ao cliente principal do Cobalt Strike, este processo não deve bloquear a sua interface de utilizador, permitindo-lhe continuar a trabalhar enquanto o pyCobaltHound investiga em segundo plano.
O pyCobaltHound usa caches separadas por teamserver para evitar problemas ao usar múltiplos teamservers.
Por vezes, há situações em que deseja investigar novamente utilizadores específicos (ou todo o armazenamento de credenciais). Isto pode acontecer quando carregou novos dados na base de dados do BloodHound.
Como o pyCobaltHound já deve ter investigado (e, portanto, colocado em cache) todas as entidades do seu armazenamento de credenciais, não as avaliará em relação a estes novos dados sem alguma intervenção do operador.
Estão disponíveis dois métodos para os operadores controlarem quais entidades estão em cache.
Nos casos em que deseja remover uma entidade específica (ou várias) da cache, pode fazê-lo no visualizador de credenciais (View > Credentials). Basta selecionar o(s) seu(s) alvo(s) e clicar na opção remove from cache sob a entrada do menu pyCobaltHound.
Nos casos em que deseja remover todas as entidades da cache, pode fazê-lo no menu principal do pyCobaltHound (Cobalt Strike > pyCobaltHound > Wipe cache). Isto é mais útil quando pretende reavaliar todo o seu armazenamento de credenciais.

Depois de remover os seus alvos da cache, pode solicitar manualmente ao pyCobaltHound que re-investigue o conteúdo do armazenamento de credenciais. Isto segue exatamente o mesmo processo descrito acima.