nccgroup/SteppingStones

GitHub: nccgroup/SteppingStones

一个基于 Django 的红队作战记录与协作中心,支持 Cobalt Strike 和 BloodHound 集成,实现边打边记、多人协作和报告自动生成。

Stars: 235 | Forks: 33

# Stepping Stones ## 目的 这是一个用于红队活动的中心,旨在辅助记录保存、态势感知和报告生成。 Stepping Stones 提供了一个基于 Web 的 UI,供团队记录活动并生成报告片段。 该 UI 的设计旨在足够快捷,以便在整个行动过程中使用,而不仅仅是在报告阶段。 [发布博客文章](https://research.nccgroup.com/2024/06/12/stepping-stones-a-red-team-activity-hub/) ## 安装 Stepping Stones 是一个 Python Django 应用程序,因此要运行本地副本: 1. 安装最新版本的 Python 3(已在 Windows 和 Linux 上使用 3.12.2 版本测试) 2. 进入此仓库副本的根目录 3. 创建一个虚拟环境,以将依赖项与其他应用程序分开:`python -m venv .venv` 4. 激活虚拟环境:`.venv\Scripts\activate` 或在 *nix 上使用 `source .venv/bin/activate` 5. 安装依赖项:`pip install -r requirements.txt` 6. 确保 3rd party background tasks 模块具有所有必需的迁移: `python manage.py makemigrations background_task` 7. 更新数据库模式:`python manage.py migrate` 8. 启动应用程序: * 如果在带有 systemd 的 Linux 系统上运行,请参阅 [systemd 指南](systemd/README.md) * 对于开发版本: * 并发运行 `python manage.py runserver` 和 `python manage.py process_tasks` * 对于生产版本: * 运行 `python manage.py check --deploy` 以获取安全建议,然后遵循如下指南: https://docs.djangoproject.com/en/6.0/howto/deployment/ 9. 访问应用程序以配置任务和管理员用户:例如,如果在本地运行,请访问 * 注意:创建的用户也将用于主应用程序,并作为“红队操作员”显示在记录的事件中, 因此请选择合适的用户名,例如 “ST” 或 “stephen”,而不是 “admin”。如果使用 Cobalt Strike 集成, 在两个工具中使用相同的用户名将有助于集成。 ### Cobalt Strike 集成 * 将授权的 Cobalt Strike 放置在 /opt/cobaltstrike 或 c:\tools\cobaltstrike-dist\cobaltstrike 在团队服务器上 - 在防火墙中开放端口以允许 Stepping Stones 连接,例如 * 在 AWS 上,将 Stepping Stones 安全组设置为允许访问团队服务器上的 50050 端口 * 在主机上,确保防火墙也允许流量进入,例如 `sudo ufw allow proto tcp from 172.31.16.0/20 to any port 50050` ## 更新应用程序 如果运行的是本地副本,当 git 中的代码已更新并且您想要新功能时: 1. 停止这两个服务,例如使用 [systemd](systemd/README.md): * `sudo service ssbot stop` * `sudo service steppingstones stop` 2. 获取最新版本,例如从 3. 解压下载的文件并将文件覆盖到部署目录上,例如 `rm -rf /tmp/stepping-stones-main; unzip /tmp/stepping-stones-main.zip && cp -R /tmp/stepping-stones-main/* /opt/steppingstones` 4. 从 steppingstones 目录激活虚拟环境(如果尚未激活):`.venv\Scripts\activate` 或在 *nix 上使用 `source .venv/bin/activate` 5. 使用以下命令拉取任何新的依赖项:`pip install -r requirements.txt` 6. 确保 3rd party background tasks 模块具有所有必需的迁移:`python manage.py makemigrations background_task` 7. 运行任何迁移脚本以将本地数据库转换为新模式:`python manage.py migrate`。 * 如果 Django 提示您运行 `python manage.py makemigrations`,请停止并联系 Stepping Stones 开发人员 - 重要的是所有用户都使用同一套迁移脚本,这些脚本应由开发人员协调。 8. 重启这两个服务,例如使用 [systemd](systemd/README.md): * `sudo service ssbot restart` * `sudo service steppingstones restart` 9. 确保没有错误,例如使用 [systemd](systemd/README.md) `journalctl -u steppingstones` ## 使用全新数据库重新开始 如果您将同一个实例用于不同的任务,并希望归档旧数据然后重新开始,您可以: * 执行上文 _更新应用程序_ 中的步骤 1 以停止应用程序 * 重命名 SQLite 数据库: * `mv db.sqlite3 db.sqlite.OLD_CLIENT_NAME` * 执行上文 _安装_ 中的步骤 2、4 和 7-9,以创建正确的数据库结构并访问重新配置的应用程序。 ## 备份 系统使用 SQLite。定期备份服务器根目录下的 db.sqlite3 文件或通过 Web UI 备份,以保护您的宝贵数据。 ## Web Hooks 配置的 web hook 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 场景: ``` {"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"}} ``` 通过创建一个空白场景并使用 Web UI 底部中央 “...” (更多) 菜单下的 “Import Blueprint” 功能来导入上述蓝图。 然后需要两个进一步的步骤: * 点击 webhook 圆圈并添加一个新的命名 webhook 以生成 URL * 点击 Apple 图标以使用 integromat 应用程序将 iPhone 注册到 make.com。 Webhooks 可以通过 Stepping Stones webhook 页面上的按钮进行测试。 ## 安全模型 Stepping Stones 利用 Django 的模型级权限系统,允许限制用户创建、编辑、查看和删除每种类型的数据模型。 可以在 `/admin` 控制台中找到组,这些组将一组权限分配给该组的任何成员,例如适合客户蓝队的权限。 现有的组包括: | 角色 | 描述 | |----------------------------------|----------------------------------------------------------------------------------------------------| | Client Blue Team - Read Only | 可以读取事件和文件页面 | | Client Blue Team - Limited Write | 与 `Client Blue Team - Read Only` 相同,但对事件的结果和检测字段具有写入权限 | 在安装过程中创建的用户被赋予“superuser”状态,因此隐式拥有所有可能的权限。 但是,通过管理控制台手动创建用户时,请确保他们未被标记为“staff”或“superuser”,以便他们从没有隐式权限开始,因此只能通过添加到组中来获得权限。 ## 本地化 可以通过 `/admin` 门户修改用户的时区。报告中的时间有意以 UTC 输出,以便蓝队更容易进行关联。 Stepping Stones 显示的日期格式应与 Web 浏览器的语言环境相匹配。即,浏览器配置为美国语言环境的用户将在 Web UI 和报告片段中以 MM/DD/YYYY 格式查看日期。 ## EventStream 如果其他工具的日志被格式化为基于 JSON 的定制 EventStream 格式,Stepping Stones 可以摄取这些日志。该格式在 SteppingStones 的 Web 界面中有详细说明,包括模式和示例数据。 一旦 EventStream 日志被 Stepping Stones 摄取,特定的相关条目就可以被克隆到报告的事件中。 ## Cobalt Strike 集成详情 集成 Cobalt Strike 的首选方法是通过 SSBot。这需要 /opt/cobaltstrike 或 c:\tools\cobaltstrike 中有 Cobalt Strike 的授权副本,用于连接 Web 界面中配置的任何(已启用的)团队服务器。 一旦集成: * 源/目标下拉菜单将包含 beacon * 文件下拉菜单将包含通过 CS 上传/下载的文件 * 凭据选项卡将根据工具输出和添加到 CS 的任何凭据进行填充。 * 单个 CS 操作可以转化为事件 - 请有选择地添加上下文到每个事件,而不是批量复制操作,以保持报告质量。 如果 SSBot 未按预期工作,可以使用额外的 CLI 命令: * `.\manage.py reset_cs_data [-s SERVER]` - 将重置从给定团队服务器解析的任何数据,如果未指定名称则重置所有。这不会影响从 CS 日志派生的数据,例如手动克隆的事件或凭据。 * `.\manage.py parse_log_tar ` - 将解析日志目录的内容,该目录已打包并取自团队服务器。注意:这不包括 SSBot 可访问的所有数据,因此不是首选的摄取技术 ## BloodHound 集成 通过 Web UI 配置的 Neo4j 服务器将用于: * 当添加带有密码的凭据,或在特定主机上作为 system 运行 beacon 时,更新 BloodHound `owned` 状态。 * 用用户和计算机填充源/目标下拉菜单 * 在 Stepping Stones 的凭据部分提供有关账户的额外报告 ## 报告插件 可以通过插件扩展 Stepping Stone 的功能。更多文档可在[此处](docs/plugins.md)获取
标签:ASN信息, Cobalt Strike, Django, ETW劫持, HTTP/HTTPS抓包, NCC Group, Python, Red Team, 协作平台, 反取证, 安全评估, 实战演练, 态势感知, 攻击模拟, 攻击诱捕, 数据展示, 无后门, 日志记录, 活动管理, 红队, 网络调试, 自动化, 记录保持, 逆向工具, 集成, 驱动签名利用