
Фреймворк Red Team для CI/CD, демонстрирующий угрозы безопасности конвейеров сборки.
CI/CD Red Team Framework
Как Metasploit, но для CI/CD-пайплайнов.
От создателей poutine — SAST-сканера пайплайнов сборки в BoostSecurity Labs.

Предупреждение: Этот инструмент предназначен только для авторизованного тестирования безопасности.
SmokedMeat существует потому, что угрозы CI/CD-пайплайнам сильно недооценены. Традиционное обучение безопасности редко охватывает атаки на цепочки поставок, оставляя защитников неподготовленными к техникам, которые активно используются злоумышленниками.
Мы создали этот инструмент, чтобы дать командам безопасности возможность изучать, практиковать и проверять защиту от продвинутых техник атак на CI/CD с помощью реалистичных красных командных учений.
Используйте только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение.
SmokedMeat — это фреймворк для постэксплуатации CI/CD-пайплайнов. Направьте его на организацию в GitHub, дайте ему найти уязвимые рабочие процессы, развернуть имплант на скомпрометированном раннере, затем перемещайтесь через облачных провайдеров, извлекайте секреты и картину поражения — всё из терминального интерфейса.
Что он делает:
Философия: Смело и шумно. Это не инструмент для обхода EDR. Это демонстрационный фреймворк, который показывает, насколько глубоко может зайти компрометация CI/CD до того, как сработает какое-либо оповещение.
Для кого предназначен:
Чтобы попробовать SmokedMeat в первый раз, установите Docker и make. Go не требуется.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart — рекомендуемый первый запуск. Он запускает локально стек быстрого старта стабильного релиза и запускает операторский TUI (Counter) для локального C2-сервера (Kitchen).
Рекомендуемый первый запуск:
whoolipublic_repo⚠ Предпочитайте классический PAT. Тонконастроенные PAT могут быть слишком ограничительными и могут блокировать тестирование публичных целей в других организациях, включая whooli.
whooli — это намеренно уязвимая площадка для CI/CD-атак от SmokedMeat. Это рекомендуемая первая цель для публичного пути.
Мастер настройки проведет вас через:
repo.whooli или свою организацию/репозиторийДля полного потока испытаний см. руководство по whooli или перейдите напрямую к whooli GitHub org.
Когда закончите:
make quickstart-down # Остановить контейнеры
make quickstart-purge # Остановить и удалить все данные
Если вы хотите работать из исходного кода, см. Разработка.
Если вы вносите вклад или итерируете локально в дереве исходного кода, установите Go 1.26+ и используйте dev-быстрый старт:
make dev-quickstart
make dev-quickstart собирает локальный образ smokedmeat-cloud-shell, запускает cloudflared, nats и C2-сервер (Kitchen), затем запускает операторский TUI из исходного кода.
Если сначала нужна инфраструктура, а операторский TUI позже:
make dev-quickstart-up
make dev-quickstart-counter
Когда закончите:
make dev-quickstart-down # Остановить контейнеры
make dev-quickstart-purge # Остановить и удалить все данные
Больше режимов развертывания и деталей локальной разработки в docs/deployment.md.
Counter проверяет наличие новых релизов SmokedMeat при запуске. Можно отключить, установив переменную окружения SMOKEDMEAT_DISABLE_VERSION_CHECK.
Hosted Teamserver запускает C2-сервер на выделенном хосте, а операторский TUI — нативно на каждой рабочей станции оператора.
На высоком уровне операторский TUI (Counter) общается с C2-сервером (Kitchen), который управляет имплантами (Brisket), запущенными на скомпрометированных CI-раннерах, и отображает живой граф атаки.
┌──────────────┐
│ SSH AGENT │
│ (Auth) │
└──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐
│ THE COUNTER │ ───────────────▶│ THE KITCHEN │
│ (Operator) │ WebSocket │ (Teamserver) │
│ Bubbletea │◀─────────────── │ │
│ TUI │ Events/Graph │ ┌──────────┐ │
└──────────────┘ │ │ Database │ │
│ └──────────┘ │
┌──────────────┐ │ │
│ BROWSER │ ───────────────▶│ │
│ Graph View │ WebSocket │ │
│ Visualizer │◀─────────────── │ │
└──────────────┘ Live Updates └──────────────┘
│ ▲
│ │
Creates PR │ │ Стагер загружает бинарник импланта
│ │ Имплант HTTP-маяк/Команды
▼ │
┌────────────────────────────────────────────┴──────────────────────────────────┐
│ GITHUB.COM │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ Вредоносный PR │ триггер │ GitHub Actions Runner │ │
│ │ (Уязвимый │─────────▶│ │ │
│ │ Workflow) │ │ ┌────────────┐ ┌────────────────┐ │ │
│ └─────────────────────┘ │ │ Стагер │─────▶│ THE BRISKET │ │ │
│ │ │ │ │ (Имплант) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
Полные детали в docs/FEATURES.md.
make test # Модульные тесты
make lint # Линтер
make e2e-smoke # Быстрый путь эксплуатации публичной дымовой проверки
make e2e-goat # Полная цепочка до облачного флага
SmokedMeat основан на исследованиях:
GNU Affero General Public License v3.0 — см. LICENSE для подробностей.
Создано для защитников, которые хотят понять техники атакующих.
| Стандартный термин | Имя в SmokedMeat | Описание |
|---|
| Операторский TUI | Counter | Терминальный интерфейс для анализа, доставки нагрузки и постэксплуатационного рабочего процесса. |
| C2-сервер | Kitchen | API и WebSocket-сервер для сессий оператора, стагеров, обратных вызовов и состояния графа. |
| Имплант | Brisket | Агент, доставляемый на скомпрометированные CI-раннеры для маяковой связи, выполнения команд и перемещения. |
| Просмотр графа в браузере | Browser View | Живой граф атаки, обслуживаемый C2-сервером по адресу /graph. |
| Режим | Используйте, когда | Точка входа |
|---|
| Quickstart | Самый быстрый первый запуск на зафиксированном релизе | make quickstart |
| Dev Quickstart | Работа с локальным деревом исходного кода | make dev-quickstart |
| Hosted Teamserver | Проведение реального задания со стабильным доменом | docs/deployment.md |
| Категория | Возможности |
|---|
| Разведка | Автоопределение 6 CI-платформ (GitHub Actions, GitLab CI, Azure DevOps, CircleCI, Jenkins, Bitbucket). Классификация секретов, проверка доступности OIDC, сбор метаданных раннера. |
| Извлечение секретов | Сканирование памяти процесса Runner.Worker через /proc для восстановления скрытых secrets.*, vars.* и карт разрешений GITHUB_TOKEN, которые GitHub скрывает из логов. |
| Анализ уязвимостей | Встроенный poutine SAST для уязвимостей внедрения, опасных триггеров и классификации шлюзов if: workflow. Глубокое сканирование Gitleaks для приватных ключей и PAT в истории git. |
| Доставка | 5 автоматизированных методов: PR, issue, комментарий, LOTP, workflow dispatch — плюс копирование вручную и ручной режим. Поддержка черновиков PR, авто-закрытие при обратном вызове, предварительная проверка на сервере. |
| Нагрузки внедрения | Генерация нагрузок с учетом контекста для 8 векторов внедрения (имя ветки, заголовок/тело PR, сообщение коммита, заголовок/тело issue, github-script, bash run) с техниками, учитывающими ограничения. |
| LOTP | Каталог Living Off The Pipeline: 15 инструментов сборки (npm, pip, cargo, make, docker, gradle, maven и др.) с нагрузками через конфигурационные файлы для выполнения кода во время установки/сборки/тестирования. |
| Отравление кэша | Классификация писатель/жертва, точное предсказание ключа кэша, размещение архива через API Actions Cache. Мастер-поток с вооружением импланта. |
| Перечисление токенов | Проверка токенов GitHub через конечные точки API для перечисления 10 областей разрешений, определения типа токена и списка доступных репозиториев и организаций. |
| Облачные переходы | Обмен OIDC-токенов на доступ к AWS (sts:AssumeRoleWithWebIdentity), GCP (Workload Identity Federation), Azure (AAD) и Kubernetes. Перечисление ресурсов после перехода. |
| Облачная оболочка | Долговременные локальные сессии с cloud shell (предварительно настроенные gcloud/aws/az), cloud export и быстрые проверки провайдеров. |
| SSH-переходы | Проверка репозиториев на доступ по SSH-ключам развертывания (чтение/запись), ssh shell с временным агентом, подтвержденный доступ сохраняется в граф. |
| Переходы в GitHub | pivot github для обнаружения репозиториев, pivot app для обмена PEM-ключа GitHub App на токен установки. Обнаруженные репозитории автоматически ставятся в очередь анализа. |
| Граф атаки | Постоянный направленный граф (BBolt) с узлами org/repo/workflow/job/vuln/token/cloud. Визуализация в браузере через Cytoscape.js в реальном времени по адресу /graph. |
| Операторский TUI | Рабочий процесс с учетом фазы, 7-шаговый мастер настройки, навигация по дереву атак, мастер эксплуатации, хранилище трофеев, поиск по omnibox, автодополнение, гиперссылки OSC 8. |
| Сервер команды | Аутентификация по SSH или токену, шина сообщений NATS JetStream, прокси API GitHub (токены остаются на сервере), автоматический TLS через Caddy, история операций. |
| Уровень | Технология |
|---|
| Язык | Go 1.26+ |
| TUI-фреймворк | Bubbletea v2 + Lipgloss v2 |
| TUI-раскладка | Ultraviolet layout + композиция экрана с безопасной ANSI |
| Шина сообщений | NATS JetStream |
| Граф атаки | hmdsefi/gograph |
| Визуализация графа | Cytoscape.js |
| База данных | BBolt |
| Сканер CI/CD | poutine (встроенный) |
| Сканер секретов | gitleaks (встроенный, пользовательские правила) |
| Извлечение секретов раннера | gump (встроенный, сканирование памяти /proc) |
| Cloud SDKs | AWS SDK v2, Google Cloud, Azure SDK для Go |
| Обратный прокси | Caddy (автоматический TLS) |