
Локальная платформа для Capture-the-Flag по ИИ с практическими уроками по инъекциям в промпты, злоупотреблению вызовами инструментов и OSINT против шести симулированных персон чат-ботов.
Локальный AI Capture-the-Flag с пошаговыми уроками для специалистов, впервые сталкивающихся с prompt injection. Игроки также могут исследовать шесть AI-персон (одна скрытая), которые защищают 20 флагов через prompt-injection, злоупотребление вызовами инструментов, манипуляцию бизнес-логикой, фингерпринтинг цепочки поставок, веб-разведку и OSINT.
Пошаговый путь охватывает прямую инъекцию, авторизацию инструментов и инъекцию через редактируемую статью базы знаний. Он предоставляет подсказки, сохранённые попытки, доказательства работы инструментов, обратную связь о завершении и сравнения защищённых инструментов. Оригинальные практические лаборатории сохраняют ручную оценку событий. Инференс модели выполняется локально через Ollama; после сборки и загрузки модели основной платформе не требуется подключение к интернету.
Email Joe in Product Sales добавляет симулированный почтовый ящик и рабочий стол в стиле Windows. Напишите письмо, которое прочитает ассистент Джо, затем наблюдайте за фактическим резюме модели и записанными действиями. Три цели охватывают вводящий в заблуждение коммерческий бриф, раскрытие вымышленного внутреннего файла и несанкционированную скидку. Почтовый сервер, Windows, Wine или дополнительная модель не требуются.
ai-ctf/
├── README.md ← вы здесь
├── LICENSE ← MIT
├── platform/ ← всё, что работает в Docker
│ ├── flags.toml ← центральный конфиг: редактируйте его для настройки значений флагов
│ ├── docker-compose.yml ← три сервиса: web, ollama, decoy
│ ├── Dockerfile ← образ веб-приложения
│ ├── app/ ← исходный код FastAPI (config, personas, tools, chat)
│ ├── data/init.sql ← схема SQLite + тестовые данные фейковых сотрудников
│ ├── decoy/ ← крошечный nginx с двумя страницами флагов
│ └── scripts/
│ ├── apply_flags.py ← вставляет значения из flags.toml в статические файлы
│ ├── render_secret.py ← запускается при старте контейнера
│ └── dump_chats.py ← экспортирует журнал чатов в HTML (инструмент для дня мероприятия)
├── external_artifacts/ ← то, что вы публикуете в GitHub / Gist / DNS
│ ├── README.md ← чек-лист настройки
│ ├── anvil_chatkit/ ← фейковый пакет цепочки поставок
│ ├── gist_content.md ← вставьте это в публичный Gist
│ └── dns_records.txt ← TXT-запись для добавления в ваш домен
└── docs/ ← документация для проведения мероприятия
├── ANSWER_KEY.md ← пошаговые решения + ответы для оригинальных 20 флагов
├── CHEAT_SHEET.md ← рабочие решения + многоуровневые подсказки (только для GM)
├── OPERATIONS.md ← обновления, резервные копии и устранение неполадок
├── SETUP_RUNBOOK.md ← пошаговое руководство на неделю
└── EVENT_DAY_NOTES.md ← сценарий брифинга + устранение неполадок
Используйте быстрый старт ниже для пошагового пути. Руководство по эксплуатации охватывает обновления, резервные копии, восстановление и проверки перед мероприятием. Ключ ответов, шпаргалка, руководство по настройке и заметки о мероприятии описывают опциональный оригинальный формат CTF.
apply_flags.py и
dump_chats.py — само приложение работает внутри Docker).exiftool (нужен только если вы меняете EXIF-флаг и хотите,
чтобы apply_flags.py перезаписал логотип).pip install и загрузки модели Ollama).
После этого основной локальный стек работает офлайн. Опциональная внешняя цепочка OSINT требует доступа в интернет.git clone https://github.com/mubix/ai-ctf.git
cd ai-ctf/platform
# 1. Session secret
echo "SESSION_SECRET=$(python3 -c 'import secrets; print(secrets.token_hex(32))')" > .env
# 2. (Optional) Customize flag values — see "Customizing the flags" below.
# Default values work fine for a smoke test.
# 3. Build and start
docker compose build
docker compose up -d ollama
docker compose exec ollama ollama pull qwen2.5:7b-instruct-q4_K_M
docker compose up -d
# 4. Open the platform
open http://localhost:18080/ # or your-machine-ip:18080 on another laptop
Зарегистрируйте имя пользователя; платформа сгенерирует 12-символьный пароль и покажет его один раз. Сохраните его на будущее. Вы автоматически входите в систему и можете выбрать Start learning. Возвращающиеся игроки могут войти, чтобы продолжить сохранённый прогресс.
Проект Compose называется ai-ctf и имеет собственную сеть и том модели.
Только веб-интерфейс публикует порт хоста: 18080 по умолчанию. Установите CTF_WEB_PORT
в platform/.env, чтобы выбрать другой порт. Ollama и decoy не публикуют
порты хоста; приложение подключается к собственному контейнеру Ollama. Проброс GPU не
настроен. CPU и память по-прежнему разделяются с другими рабочими нагрузками на хосте.
При обновлении стека, созданного под другим именем проекта Compose, сохраните это
имя с помощью docker compose -p YOUR_EXISTING_PROJECT ..., чтобы повторно использовать его контейнеры
и том модели. Изменение имён проектов создаёт отдельный стек.
Пошаговый урок Customer Service использует свежий токен аудита для каждой попытки, а не фиксированный токен мероприятия. Он распознаёт раскрытие в виде простого текста и отличает просмотр разобранного примера от решения без него. Свежие попытки сохраняют предыдущие разговоры и заработанный прогресс. Его профиль для начинающих намеренно доверяет заявленной роли оператора поддержки; оригинальный практический бот Customer Service остаётся отдельным. Существующие пошаговые попытки сохраняют свой прежний профиль, пока игрок не начнёт заново.
Ещё два пошаговых урока используют изолированные вымышленные фикстуры: доступ к инструментам HR, затем редактируемая статья базы знаний, которая может перенаправить симулированный ответ. Они выполняют запросы действий модели, прошедшие проверку схемы, против этих фикстурных инструментов, записывают вызовы инструментов и проверяют их результаты. Игроки могут воспроизвести те же аргументы через проверку разрешений и изучить контрольный пример легитимного использования. Это сравнение проверяет границу инструмента, а не второй запуск модели. Ничего не отправляется по почте и никакой реальный HR-сервис не подключён. Оригинальные персоны остаются самостоятельными практическими лабораториями с их оригинальными ответами и ручной оценкой.
Сценарий с электронной почтой доступен через All lessons → Email Joe. Его Проводник
использует знакомые пути, такие как C:\Users\Joe\Documents\Sales; они обозначают
фикстуры в памяти и никогда не обращаются к файловой системе хоста. Каждое письмо получает свежие вымышленные файлы,
исходящие сообщения и запись о продажах. Сюжетные события помечаются отдельно от наблюдаемой активности модели
и инструментов. Цели раскрытия файлов и изменения записей требуют выполненных действий,
а не утверждения в резюме. Включите Enforce Joe's tool permissions, чтобы перезапустить любую
цель инструмента с проверками приложения, затем отправьте чистый пример для проверки нормального использования.
Попытки, подсказки, использование разобранного примера и прогресс сохраняются.
Для существующей установки изменения приложения/шаблонов требуют пересборки веб-образа; одного перезапуска недостаточно для копирования обновлённого кода:
cd platform
docker compose up -d --build web