
Веб-инструмент для регистрации активности red team, формирования отчётов и ситуационной осведомлённости с интеграцией Cobalt Strike и BloodHound.
Центр управления активностью Red Team, предназначенный для ведения записей, ситуационной осведомлённости и формирования отчётов. Stepping Stones предоставляет веб-интерфейс для регистрации активности команды и генерации фрагментов отчётов. Интерфейс рассчитан на достаточную скорость работы, чтобы использоваться на всём протяжении задания, а не только на этапе подготовки отчётов.
Stepping Stones — это приложение на Python/Django, поэтому для запуска локальной копии:
python -m venv .venv.venv\Scripts\activate или source .venv/bin/activate в *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migratepython manage.py runserver и python manage.py process_tasks одновременноpython manage.py check --deploy, чтобы получить рекомендации по усилению защиты, а затем следуйте руководству, например:
https://docs.djangoproject.com/en/6.0/howto/deployment/На командном сервере (team server) откройте порт в брандмауэре, чтобы разрешить подключение Stepping Stones, например:
sudo ufw allow proto tcp from 172.31.16.0/20 to any port 50050Если вы запускаете локальную копию, когда код обновлён в git и вы хотите получить новые функции:
sudo service ssbot stopsudo service steppingstones stoprm -rf /tmp/stepping-stones-main; unzip /tmp/stepping-stones-main.zip && cp -R /tmp/stepping-stones-main/* /opt/steppingstones.venv\Scripts\activate или source .venv/bin/activate в *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migrate.
python manage.py makemigrations, ОСТАНОВИТЕСЬ и свяжитесь с разработчиками Stepping Stones — важно, чтобы все пользователи работали с одним и тем же набором скриптов миграции, и их следует согласовывать через разработчиков.sudo service ssbot restartsudo service steppingstones restartjournalctl -u steppingstonesЕсли вы используете один и тот же экземпляр для разных задач и хотите заархивировать старые данные, а затем начать заново, вы можете:
mv db.sqlite3 db.sqlite.OLD_CLIENT_NAMEСистема использует SQLite. Регулярно создавайте резервные копии файла db.sqlite3 в корневом каталоге сервера или через веб-интерфейс, чтобы защитить свои ценные данные.
На каждый настроенный URL веб-хука при наступлении ключевых событий будет отправляться небольшой JSON-документ. JSON-документ всегда имеет следующую структуру:
{
"type": "notification type",
"message": "Human readable message"
}
Поле type может принимать одно из следующих значений:
new beacon (ранее неизвестный beacon подключился к отслеживаемому Team Server)respawned beacon (ранее известный beacon подключился к отслеживаемому Team Server)returned beacon (beacon, который был явно отслеживаем в ожидании переподключения, только что переподключился)Для приёма этих данных можно использовать сценарий https://make.com на основе следующего blueprint:
{"name":"Webhook to iOS","flow":[{"id":1,"module":"gateway:CustomWebHook","version":1,"parameters":{"hook":129792,"maxResults":1},"mapper":{},"metadata":{"designer":{"x":-386,"y":-129},"restore":{"parameters":{"hook":{"data":{"editable":"true"},"label":"My webhook"}}},"parameters":[{"name":"hook","type":"hook:gateway-webhook","label":"Webhook","required":true},{"name":"maxResults","type":"number","label":"Maximum number of results"}],"interface":[{"name":"type","type":"text"},{"name":"message","type":"text"}]}},{"id":8,"module":"ios:SendNotification","version":1,"parameters":{"device":171760},"mapper":{"body":"{{1.message}}","title":"{{1.type}}","action":"","priority":10,"collapsible":false},"metadata":{"designer":{"x":-31,"y":-128},"restore":{"expect":{"action":{"label":"Default"},"priority":{"label":"Deliver immediately"}},"parameters":{"device":{"data":{"editable":"undefined"},"label":"Personal Phone"}}},"parameters":[{"name":"device","type":"device:apn","label":"Device","required":true}],"expect":[{"name":"title","type":"text","label":"Title","required":true},{"name":"body","type":"text","label":"Body"},{"name":"action","type":"select","label":"Action","validate":{"enum":["open_url"]}},{"name":"priority","type":"select","label":"Priority","required":true,"validate":{"enum":[10,5]}},{"name":"collapsible","type":"boolean","label":"Collapse push notifications","required":true}]}}],"metadata":{"instant":true,"version":1,"scenario":{"roundtrips":1,"maxErrors":3,"autoCommit":true,"autoCommitTriggerLast":true,"sequential":false,"confidential":false,"dataloss":false,"dlq":false},"designer":{"orphans":[]},"zone":"eu1.make.com"}}
Импортируйте указанный выше blueprint, создав пустой сценарий и используя функцию «Import Blueprint» в меню «...» (More), которое находится в нижней части веб-интерфейса по центру.
После этого потребуются ещё два шага:
Веб-хуки можно проверить с помощью кнопки на странице веб-хуков Stepping Stones.
Stepping Stones использует систему разрешений на уровне моделей Django, позволяющую ограничивать пользователям создание, редактирование, просмотр и удаление каждого типа моделей данных.
В консоли /admin можно найти группы, которые назначают набор разрешений (например, подходящих для Blue Team клиента) всем участникам этой группы.
Существующие группы:
| Роль | Описание |
|---|---|
| Клиентская Blue Team — только чтение | Может читать страницы событий и файлов |
| Клиентская Blue Team — ограниченная запись | Как и Client Blue Team - Read Only, но с правом записи в поля результата события и обнаружения |
Пользователи, созданные в процессе установки, получают статус «суперпользователя», а значит, неявно обладают всеми возможными разрешениями. Однако при ручном создании пользователей через консоль администратора убедитесь, что они НЕ отмечены как «staff» и не являются «суперпользователями», чтобы у них не было подразумеваемых разрешений — тогда они смогут получать разрешения только через добавление в группы.
Часовые пояса пользователей можно изменить через портал /admin. Время в отчётах намеренно выводится в UTC, чтобы облегчить сопоставление данных специалистами Blue Team.
Форматы дат, отображаемые Stepping Stones, должны соответствовать локали веб-браузера. Например, пользователи, в браузере которых настроена американская локаль, будут видеть даты в формате ММ/ДД/ГГГГ в веб-интерфейсе и во фрагментах отчётов.
Stepping Stones может принимать журналы из других инструментов, если они отформатированы в специальный формат EventStream на основе JSON. Формат подробно описан в веб-интерфейсе SteppingStones, включая схемы и примеры данных.
После того как журнал EventStream принят Stepping Stones, отдельные подходящие записи можно клонировать в события для отчёта.
Предпочтительный способ интеграции Cobalt Strike — через SSBot. Для этого требуется лицензионная копия Cobalt Strike в /opt/cobaltstrike или c:\tools\cobaltstrike, которая будет использоваться для подключения к любым (включённым) командным серверам, настроенным в веб-интерфейсе.
После интеграции:
Существуют дополнительные команды CLI, которые можно использовать, если SSBot работает не так, как ожидалось:
.\manage.py reset_cs_data [-s SERVER] - Сбросит все данные, полученные от указанного командного сервера, или все данные, если имя не задано. Это не затронет данные, полученные из журналов CS, например вручную клонированные события или учётные данные..\manage.py parse_log_tar <file name> - Разберёт содержимое каталога журналов, упакованного в tar, взятое с командного сервера. Примечание: этот способ не включает все данные, доступные через SSBot, и поэтому не является предпочтительным методом приёма данных.Серверы Neo4j, настроенные через веб-интерфейс, будут использоваться для:
owned в BloodHound, когда добавляются учётные данные с паролем или beacon запускается на определённом хосте от имени системы.Функциональность Stepping Stones можно расширять с помощью плагинов. Дополнительная документация доступна здесь.