boostsecurityio/smokedmeat
GitHub: boostsecurityio/smokedmeat
一个 CI/CD 红队框架,用于演示和验证构建流水线中的供应链攻击路径与安全风险。
Stars: 61 | Forks: 5
# SmokedMeat
[](https://www.gnu.org/licenses/agpl-3.0)
**CI/CD 红队框架**
*来自 [BoostSecurity Labs](https://labs.boostsecurity.io) 的 [poutine](https://github.com/boostsecurityio/poutine) 构建流水线 SAST 扫描器的创造者。*

## 什么是 SmokedMeat?
SmokedMeat 是一个用于 CI/CD 管道的后利用框架。将其指向一个 GitHub 组织,让它找到易受攻击的工作流,部署一个植入程序到被破坏的运行器上,然后横向移动到云提供商、提取密钥并映射影响范围——所有操作都通过终端 UI 完成。
**它的功能:**
1. **分析** - 扫描组织的 GitHub Actions 工作流,查找注入漏洞、危险的触发器和不安全的检出模式(由 [poutine](https://github.com/boostsecurityio/poutine) 提供支持)
2. **利用** - 通过 PR、问题、评论或工作流调度部署一个启动程序。当易受攻击的工作流运行时,它会下载并在 CI 运行器上执行植入程序。
3. **后利用** - 从运行器内存中提取密钥,枚举 GitHub 令牌权限,扫描私钥并收集战利品
4. **横向移动** - 使用捕获的凭据进行横向移动:发现私有仓库、铸造 GitHub App 令牌、交换 OIDC 令牌以获取 AWS/GCP/Azure 访问权限、探测 SSH 部署密钥
**理念:** 大胆且喧闹。这不是一个 EDR 规避工具。这是一个演示框架,用于展示 CI/CD 妥协在触发任何警报之前能深入到什么程度。
**适用对象:**
- 在企业环境中验证 CI/CD 安全态势的红队
- 向利益相关者演示供应链攻击路径的渗透测试人员
- 测试流水线攻击检测和响应的安全工程师
- 开发新 CI/CD 漏洞利用技术的研究人员
- 探索供应链攻击面的漏洞赏金猎人
## 快速开始
要首次尝试 SmokedMeat,请安装 Docker 和 `make`。Go 不是必需的。
```
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
```
`make quickstart` 是推荐的首次运行方式。它会在本地启动稳定的快速启动堆栈,并针对本地 C2 团队服务器(`Kitchen`)启动操作员 TUI(`Counter`)。
推荐首次运行:
- 目标:`whooli`
- 令牌:具有 `public_repo` 权限的经典 PAT
⚠ 建议使用经典 PAT。细粒度的 PAT 可能过于严格,可能会阻止测试其他组织(包括 `whooli`)中的公共目标。
`whooli` 是 SmokedMeat 精心设计的 CI/CD 攻击沙箱。它是公共路径的推荐第一个目标。
设置向导将引导你完成以下操作:
1. **GitHub PAT** - 输入你的令牌。对于私有仓库,经典 PAT 通常需要 `repo` 权限。
2. **目标** - 输入 `whooli` 或你自己的组织/仓库
3. **分析** - 扫描工作流中的漏洞并展示可利用的发现结果
如需完整的挑战流程,请参阅 [`whooli` 指南](docs/WHOOLI.md) 或直接访问 [`whooli` GitHub 组织](https://github.com/whooli)。
完成后:
```
make quickstart-down # Stop containers
make quickstart-purge # Stop and delete all data
```
如果你想从源代码开始工作,请参阅 [开发](#development)。
## 开发
如果你正在本地贡献或迭代源代码,请安装 Go 1.26+ 并使用开发快速启动:
```
make dev-quickstart
```
`make dev-quickstart` 会构建本地 `smokedmeat-cloud-shell` 镜像,启动 `cloudflared`、`nats` 和 C2 团队服务器(`Kitchen`),然后从源代码启动操作员 TUI(`Counter`)。
如果你想先搭建基础设施再启动操作员 TUI:
```
make dev-quickstart-up
make dev-quickstart-counter
```
完成后:
```
make dev-quickstart-down # Stop containers
make dev-quickstart-purge # Stop and delete all data
```
更多部署模式和本地开发细节请参见 [docs/deployment.md](docs/deployment.md)。
## 核心组件
| 标准术语 | SmokedMeat 名称 | 描述 |
|----------|-----------------|------|
| **操作员 TUI** | `Counter` | 用于分析、载荷投递和后利用工作流的终端界面 |
| **C2 团队服务器** | `Kitchen` | API 和 WebSocket 服务器,用于操作员会话、启动程序、回调和图状态管理 |
| **植入程序** | `Brisket` | 交付到被破坏的 CI 运行器的代理,用于心跳、命令执行和横向移动 |
| **浏览器图视图** | `Browser View` | 由 C2 团队服务器在 `/graph` 提供的实时攻击图 |
## 部署模式
| 模式 | 适用场景 | 入口点 |
|------|----------|--------|
| **快速启动** | 首次运行固定版本的最快方式 | `make quickstart` |
| **开发快速启动** | 在本地源代码树上进行迭代 | `make dev-quickstart` |
| **托管团队服务器** | 使用稳定域名运行真实演练 | [docs/deployment.md](docs/deployment.md) |
托管团队服务器会在专用主机上运行 C2 团队服务器,并在每个操作员工作站上原生运行操作员 TUI。
## 架构
在较高层次上,操作员 TUI(`Counter`)与 C2 团队服务器(`Kitchen`)通信,后者管理在被破坏的 CI 运行器上运行的植入程序(`Brisket`)并提供实时攻击图。
```
┌──────────────┐
│ SSH AGENT │
│ (Auth) │
└──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐
│ THE COUNTER │ ───────────────▶│ THE KITCHEN │
│ (Operator) │ WebSocket │ (Teamserver) │
│ Bubbletea │◀─────────────── │ │
│ TUI │ Events/Graph │ ┌──────────┐ │
└──────────────┘ │ │ Database │ │
│ └──────────┘ │
┌──────────────┐ │ │
│ BROWSER │ ───────────────▶│ │
│ Graph View │ WebSocket │ │
│ Visualizer │◀─────────────── │ │
└──────────────┘ Live Updates └──────────────┘
│ ▲
│ │
Creates PR │ │ Stager fetches implant binary
│ │ Implant HTTP Beacon/Commands
▼ │
┌────────────────────────────────────────────┴──────────────────────────────────┐
│ GITHUB.COM │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ Malicious PR │ triggers │ GitHub Actions Runner │ │
│ │ (Vulnerable │─────────▶│ │ │
│ │ Workflow) │ │ ┌────────────┐ ┌────────────────┐ │ │
│ └─────────────────────┘ │ │ Stager │─────▶│ THE BRISKET │ │ │
│ │ │ │ │ (Implant) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
```
## 功能特性
完整文档请参见 [docs/FEATURES.md](docs/FEATURES.md)。
| 类别 | 能力 |
|------|------|
| **侦察** | 自动检测 6 个 CI 平台(GitHub Actions、GitLab CI、Azure DevOps、CircleCI、Jenkins、Bitbucket)。分类密钥,探测 OIDC 可用性,收集运行器元数据。 |
| **密钥提取** | 通过 `/proc` 扫描 Runner.Worker 进程内存,以恢复未屏蔽的 `secrets.*`、`vars.*` 以及 GitHub 在日志中隐藏的运行器 `GITHUB_TOKEN` 权限映射。 |
| **漏洞分析** | 内置 [poutine](https://github.com/boostsecurityio/poutine) SAST,用于注入漏洞、危险触发器和工作流 `if:` 分类。Gitleaks 深度扫描 Git 历史中的私钥和 PAT。 |
| **投递** | 5 种自动化方法:PR、问题、评论、LOTP、工作流调度 - 另含仅复制和手动模式。支持草稿 PR、自动关闭回调、服务端调度预检。 |
| **注入载荷** | 针对 8 个注入向量(分支名称、PR 标题/正文、提交消息、问题标题/正文、github-script、bash 运行)的上下文感知载荷生成,并带有约束感知技术。 |
| **LOTP** | 沿用流水线的生存方式(LOTP):15 个构建工具(npm、pip、cargo、make、docker、gradle、maven 等)及其配置文件的载荷,用于安装/构建/测试期间的代码执行。 |
| **缓存中毒** | 写入者/受害者分类、精确缓存键预测、通过 Actions 缓存 API 进行存档阶段。带植入程序武装的向导式流程。 |
| **令牌枚举** | 对 GitHub 令牌进行 API 端点探测,枚举 10 个权限范围,识别令牌类型,并列出可访问的仓库和组织。 |
| **云横向移动** | OIDC 令牌交换以获取 AWS(`sts:AssumeRoleWithWebIdentity`)、GCP(Workload Identity Federation)、Azure(AAD)和 Kubernetes 的访问权限。后续资源枚举。 |
| **云 Shell** | 持久的本地会话,支持 `cloud shell`(预配置的 gcloud/aws/az)、`cloud export` 和提供者快速检查。 |
| **SSH 横向移动** | 探测仓库的 SSH 部署密钥访问权限(读写),`ssh shell` 配合临时代理,确认的访问权限会持久化到图中。 |
| **GitHub 横向移动** | `pivot github` 用于仓库发现,`pivot app` 用于 GitHub App PEM 到安装令牌的交换。发现的仓库会自动加入分析队列。 |
| **攻击图** | 持久化有向图(BBolt),包含组织/仓库/工作流/作业/漏洞/令牌/云节点。浏览器端的实时 Cytoscape.js 可视化位于graph`。 |
| **操作员 TUI** | 阶段感知的工作流、7 步设置向导、攻击树导航、利用向导、战利品储藏、全局搜索、Tab 补全、OSC 8 超链接。 |
| **团队服务器** | SSH 或令牌认证、NATS JetStream 消息总线、GitHub API 代理(令牌保留在服务端)、通过 Caddy 自动配置 TLS、操作历史记录。 |
## 技术栈
| 层级 | 技术 |
|------|------|
| 语言 | Go 1.26+ |
| TUI 框架 | [Bubbletea v2](https://github.com/charmbracelet/bubbletea) + [Lipgloss v2](https://github.com/charmbracelet/lipgloss) |
| TUI 布局 | [Ultraviolet](https://github.com/charmbracelet/ultraviolet) 布局 + ANSI 安全屏幕合成 |
| 消息总线 | [NATS JetStream](https://nats.io/) |
| 攻击图 | [hmdsefi/gograph](https://github.com/hmdsefi/gograph) |
| 图形可视化 | [Cytoscape.js](https://js.cytoscape.org/) |
| 数据库 | [BBolt](https://github.com/etcd-io/bbolt) |
| CI/CD 扫描器 | [poutine](https://github.com/boostsecurityio/poutine)(内置) |
| 密钥扫描器 | [gitleaks](https://github.com/gitleaks/gitleaks)(内置,自定义规则) |
| 运行器密钥提取 | gump(内置,`/proc` 内存扫描) |
| 云 SDK | AWS SDK v2、Google Cloud、Azure SDK for Go |
| 反向代理 | [Caddy](https://caddyserver.com/)(自动配置 TLS) |
## 测试
```
make test # Unit tests
make lint # Linter
make e2e-smoke # Fast public exploit smoke path
make e2e-goat # Full goat chain to the cloud flag
```
## 前人工作
SmokedMeat 基于以下研究构建:
- [poutine](https://github.com/boostsecurityio/poutine) - 构建流水线 SAST 扫描器
- [LOTP](https://boostsecurityio.github.io/lotp/) - 沿用流水线的生存方式
- [Gato-X](https://github.com/AdnaneKhan/Gato-X) - GitHub Actions 枚举
- [Nord-Stream](https://github.com/synacktiv/nord-stream) - CI/CD 密钥提取
- [Sliver](https://github.com/BishopFox/sliver) - Go C2 架构模式
- [Mythic](https://docs.mythic-c2.net/) - 协作式工作流设计
## 许可证
GNU Affero General Public License v3.0 - 详细信息请参见 [LICENSE](LICENSE)。
*为希望了解攻击者技术的防御者而构建。
标签:DevSecOps, EVTX分析, GitHub Actions, StruQ, T1083, T1105, T1552, T1555, T1578, TGT, 上游代理, 云资产探测, 协议分析, 反取证, 后利用, 安全演示, 安全评估, 密钥提取, 开源安全工具, 攻防演练, 日志审计, 权限提升, 构建管道, 横向移动, 红队框架, 终端界面, 编程规范, 网络信息收集, 网络安全审计, 自动笔记, 逆向工程平台