
pyCobaltHound — это расширение скрипта Aggressor для Cobalt Strike, предназначенное для обеспечения глубокой интеграции между Cobalt Strike и Bloodhound.
pyCobaltHound — это расширение для скрипта Aggressor для Cobalt Strike, которое обеспечивает глубокую интеграцию между Cobalt Strike и Bloodhound.
pyCobaltHound помогает операторам красных команд:
BloodHound для обнаружения путей повышения привилегий, открываемых вновь собранными учётными данными.Для этого pyCobaltHound использует набор встроенных запросов. Операторы также могут добавлять/удалять собственные запросы, чтобы настроить возможности мониторинга pyCobaltHound. Это даёт им гибкость адаптировать pyCobaltHound на лету во время операций с учётом конкретных целей (пользователи, хосты и т.д.).
Для установки pyCobaltHound клонируйте этот репозиторий. Не забудьте также клонировать включённый подмодуль!
Вы можете использовать следующую команду:
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodulesУбедитесь, что следующие зависимости правильно установлены:
PyCobalt — это Python API для Cobalt Strike. Он предоставляет множество функций Aggressor для непосредственного использования из Python.
Убедитесь, что у вас установлен Python3+. Хотя PyCobalt может работать и на macOS, и на Windows, мы тестировали его только на Linux.
Существует два способа использования библиотеки PyCobalt:
pyCobaltHound использует этот подход, устанавливая путь поиска из программы Python с помощью переменной sys.path.PyCobalt. Для этого выполните python3 setup.py install. Вам придётся изменить pycobalthound.py, чтобы он использовал установленную библиотеку вместо той, что находится во включённом репозитории.PyCobalt будет поддерживаться в будущем. Фактически последнее обновление проекта было для включения изменений, сделанных в Cobalt Strike 4.2. Однако, поскольку pyCobaltHound использует только базовые функции Aggressor для взаимодействия с Cobalt Strike и его оператором, для pyCobaltHound это не является большой проблемой.PyCobalt, используемый в этом проекте, является нашим форком. Мы не контролируем репозиторий PyCobalt.PyCobalt поставляется с некоторыми командами Script Console для управления запущенными скриптами Python. Когда вы перезагружаете скрипт Aggressor, следует сначала явно остановить скрипты Python. В противном случае они будут работать вечно, ничего не делая. Во время разработки pyCobaltHound мы заметили, что это также может привести к неопределённому поведению.
Перезагрузка pyCobaltHound может быть выполнена следующим образом:
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
Для правильной работы PyCobalt вы можете вызывать PyCobalt только в одном скрипте Aggressor. Имейте это в виду, если хотите использовать pyCobaltHound вместе с другими скриптами Aggressor, использующими PyCobalt. Наш подход заключается в том, чтобы иметь скрипт Aggressor с вызовами python() и include() для каждого инструмента на основе PyCobalt.
notify2 — это (или был) пакет для отображения уведомлений на рабочем столе в Linux. Как мы увидим позже, pyCobaltHound поддерживает несколько способов уведомления оператора. notify2 используется в Linux для отправки уведомлений демону уведомлений через D-Bus.
Чтобы включить это, установите notify2 с помощью:
pip install notify2
Использование pyCobaltHound в Cobalt Strike так же просто, как импорт скрипта Aggressor pycobalthound.cna в ваш клиент. После этого в строке меню Cobalt Strike появится меню pyCobaltHound.

Первоначальная цель pyCobaltHound заключалась в мониторинге кэша учётных данных Cobalt Strike (View > Credentials) на предмет новых записей. Это происходит путём реагирования на событие on_credentials, которое Cobalt Strike генерирует при изменениях в хранилище учётных данных.
Когда это событие происходит, pyCobaltHound:
Cobalt Strike.BloodHound.BloodHound для каждой новой сущности, используя как встроенные, так и пользовательские запросы.Поскольку всё это происходит асинхронно от основного клиента Cobalt Strike, этот процесс не должен блокировать ваш интерфейс, так что вы можете продолжать работать, пока pyCobaltHound проводит исследование в фоне.
pyCobaltHound использует отдельные кэши для каждого team-сервера, чтобы избежать проблем при использовании нескольких team-серверов.
Иногда возникают ситуации, когда вы хотите повторно исследовать определённых пользователей (или всё хранилище учётных данных). Это может быть актуально, если вы загрузили новые данные в базу данных BloodHound.
Поскольку pyCobaltHound уже должен был исследовать (и, следовательно, кэшировать) все сущности в вашем хранилище учётных данных, он не будет оценивать их на основе этих новых данных без вмешательства оператора.
Для управления тем, какие сущности кэшируются, доступны два метода.
В случаях, когда вы хотите удалить определённую сущность (или несколько) из кэша, вы можете сделать это в просмотрщике учётных данных (View > Credentials). Просто выберите целевые объекты и нажмите опцию remove from cache под пунктом меню pyCobaltHound. 
В случаях, когда вы хотите удалить все сущности из кэша, вы можете сделать это в главном меню pyCobaltHound (Cobalt Strike > pyCobaltHound > Wipe cache). Это наиболее полезно, когда вы хотите заново оценить всё хранилище учётных данных.

После удаления целей из кэша вы можете вручную запустить pyCobaltHound для повторного исследования содержимого хранилища учётных данных. Этот процесс полностью аналогичен описанному выше.
pyCobaltHound содержит функциональность для взаимодействия с существующими сессиями beacon. Она доступна в контекстном меню beacon. Обратите внимание, что эти команды могут выполняться для одного beacon или для выбранного набора beacon.