Дневник развёртывания CyberStrikeAI: даже простое развёртывание инструмента требует внимания к деталям
Недавно я возился с CyberStrikeAI — платформой тестирования безопасности на базе ИИ, написанной на Go. Думал, «развёртывание в один клик»: склонируй репозиторий, запусти скрипт — и готово. В итоге наступил на несколько подводных камней средней величины. Пока память свежа, записываю весь процесс — многие грабли оказались не проблемой инструмента, а неучтёнными деталями.

Сначала — что это за инструмент
CyberStrikeAI позиционируется как «операционная система действий ИИ-нативной кибербезопасности», написан на Go и объединяет планирование, исполнение, человеческий надзор, сохранение доказательств и воспроизведение в одном аудируемом рабочем пространстве. Ключевые компоненты: агент на движке Eino, MCP-нативные инструменты, база знаний RAG, визуальные рабочие процессы и моделирование/анализ цепочек атак.
В него встроено более 100 рецептов инструментов, покрывающих полную цепочку атаки: сетевое сканирование (nmap, masscan, rustscan); веб-сканирование (sqlmap, nikto, gobuster, ffuf); сканирование уязвимостей (nuclei, wpscan, dalfox); а также перечисление поддоменов, безопасность API, безопасность контейнеров, облачная безопасность, анализ бинарных файлов, эксплуатация, взлом паролей, форензика, пост-эксплуатация и т.д. Практически весь арсенал, нужный для авторизованного пентеста, уже оркестрирован.
Кроме того, есть плагин для Burp Suite и расширение для браузера — перехваченный трафик можно отправлять прямо в платформу для ИИ-анализа. Дизайн довольно умный — не нужно менять ваш текущий рабочий процесс.
Подготовка окружения перед развёртыванием
Официально требуются два предварительных условия; обратите внимание на версии, чтобы не попасть на грабли:
- Go 1.25+(версия явно указана в go.mod; при более низкой компиляция сразу выдаст ошибку)
- Python 3.10+(нужен для некоторых инструментов, например api-fuzzer и http-framework-test)
Грабля №1: версия Go. В первый раз я взял старую версию Go, шедшую с системой, и ошибка выплыла только на этапе компиляции. Рекомендую сначала go version проверить версию, и если она не подходит — сразу установить новую с официального сайта. Такие «предварительные условия» легче всего упустить, потому что ошибка проявляется намного позже.
Развёртывание в один клик: что скрипт делает за вас
Официальная команда развёртывания в один клик очень лаконична:
git clone https://github.com/Ed1s0nZ/CyberStrikeAI.git
cd CyberStrikeAI
chmod +x run.sh && ./run.sh
Но run.sh на самом деле делает больше, чем вы думаете. Он выполняет по порядку:
- ✅ Проверяет и валидирует окружения Go и Python
- ✅ Создаёт виртуальное окружение Python
- ✅ Устанавливает зависимости Python
- ✅ Загружает зависимости Go
- ✅ Собирает проект
- ✅ Запускает сервис
Деталь №1: venv управляется скриптом автоматически. Каталог venv/ создаётся и поддерживается run.sh автоматически; инструменты, требующие Python (api-fuzzer, http-framework-test и др.), автоматически используют это окружение. Не создавайте его вручную — легко получить конфликт.
Проверка запуска: несколько обязательных пунктов
После выполнения скрипта не спешите открывать браузер — сначала посмотрите в терминал:
- Убедитесь, что в терминале отображается ● ONLINE, за которым следует фактический адрес Web UI
- Откройте этот адрес: режим HTTPS по умолчанию использует локальный самоподписанный сертификат — браузер предупредит, просто примите предупреждение один раз
- При новой установке выдаётся одноразовый пароль администратора: он показывается в терминале под ADMIN SETUP REQUIRED; сразу смените его после входа
Деталь №2: HTTPS или HTTP. run.sh по умолчанию запускается с параметром –https (локальный самоподписанный TLS; по словам разработчиков, это дружелюбнее к параллельным потокам). Если нужен чистый HTTP, соответствующий режим надо явно ./run.sh --http. При ручном запуске добавьте –https или задайте переменную окружения CYBERSTRIKE_HTTPS=1.
В продакшн-среде не используйте самоподписанный сертификат — настройте server.tls_cert_path и server.tls_key_path в config.yaml.
Грабля №2: ошибка несовпадения протокола. Если в логах вы видите «client sent an HTTP request to an HTTPS server», значит какой-то клиент всё ещё обращается к TLS-порту по http://. Достаточно поменять URL, не трогайте конфигурацию сервера.

Первоначальная настройка: ИИ-канал обязателен
Без этого шага платформа как будто не установлена. После первого запуска откройте https://127.0.0.1:8080/ (порт — согласно server.port в config.yaml), зайдите в System Settings → Basic Settings → AI Channel Configuration, добавьте канал и заполните provider, Base URL, API key, model и лимит токенов.
Можно также напрямую отредактировать config.yaml; формат примерно такой:
ai:
default_channel: openai-main
channels:
openai-main:
provider: openai_compatible
api_key: “${OPENAI_API_KEY}”
base_url: “https://api.openai.com/v1”
model: “gpt-4o”
Деталь №3: область действия канала по умолчанию. ai.default_channel используется для новых сессий и задач, где канал не выбран явно; на странице чата можно для каждой сессии отдельно выбрать любой сохранённый канал. Так что если у вас несколько моделей, не обязательно ограничиваться одним.
Если указать provider как openai_compatible, можно подключить большинство сервисов, совместимых с интерфейсом OpenAI: замените base_url на https://api.deepseek.com/v1, а model на deepseek-chat — тоже сработает, то же самое с qwen3-max. Китайские модели подключаются без проблем — очень дружелюбно.
⚠️ Напоминание о безопасности: не коммитьте настоящие ключи в config.yaml. Разработчики прямо говорят — реальные учётные данные в репозиторий не сохранять, использовать переменные окружения.
Обновление тоже требует правильного подхода
Разработчики предоставляют скрипт обновления в один клик, но сначала нужно дать ему права на выполнение:
chmod +x upgrade.sh && ./upgrade.sh –yes
Что он делает: бэкапит config.yaml и каталог data/ → подтягивает новый код с GitHub Release → обновляет номер версии в config.yaml → перезапускает сервис.Локальные каталоги tools/, roles/, skills/ всегда сохраняются — это очень важно: ваши пользовательские рецепты инструментов не будут перезаписаны.
Грабля №3: зависимости скрипта обновления. Ему нужны curl или wget для загрузки релизного пакета и rsync для безопасной синхронизации кода (по словам разработчиков — рекомендован/обязателен). Если GitHub API применил ограничение частоты запросов, сначала export GITHUB_TOKEN="..." решите проблему с лимитом, а затем запускайте.
При проблемах можно восстановиться из .upgrade-backup/ или вручную скопировать обратно data и config.yaml, а затем запустить run.sh.
Важный принцип: перед обновлением обязательно читайте release notes целевой версии; особенно осторожно, когда затрагиваются конфигурация, база данных или API. У разработчиков есть меткое выражение: «бэкап обязателен, даже если это просто патч-обновление; сам номер версии не является гарантией совместимости».
Краткий обзор структуры каталогов
Разберитесь, за что отвечает каждый каталог, — и дальнейшее сопровождение не сбиться с пути не даст:
- cmd/ — сервер, вход MCP stdio, инструменты
- internal/ — агенты, ядро MCP, обработчики, C2, безопасный исполнитель
- web/ — статическое SPA и шаблоны
- tools/ — YAML-рецепты инструментов (100+ примеров)
- roles/ — конфигурации ролей (12+ предустановленных ролей для тестирования безопасности)
- skills/ — каталог Agent Skills (SKILL.md + необязательные файлы)
- agents/ — многоагентные Markdown (orchestrator.md + под-агенты)
- config.yaml — конфигурация времени выполнения
- run.sh / upgrade.sh — скрипты запуска / обновления
Безопасность: инструменты за вас её не обеспечат
Платформа интегрирует высокорисковые возможности вроде управления WebShell и встроенного C2 (слушатели, шифрованные beacon, сессии, очередь задач). Позиция разработчиков абсолютно ясна:использовать только на системах, которыми вы владеете или на тестирование которых получили явное разрешение.
Перед включением высокорисковых инструментов в общей или продакшн-среде обязательно прочитайте модель безопасности и руководство по укреплению. Есть также встроенный перехват вызовов инструментов — настраиваемые regex-проверки перед выполнением MCP; по умолчанию включена защита доменов государственных структур.
Кроме того, по умолчанию слушается только 127.0.0.1; если нужно выставить сервис наружу, обязательно сначала проведите укрепление. Это не вежливая формальность, а предупреждение, которое в документацию пишет лишь тот, кто набил на этом шишек.

В заключение
Оглядываясь назад, само развёртывание не вызвало больших проблем — скрипт выполнил 90% работы. Меня заставили остановиться и полезть в документацию сплошь «не замеченные» детали: граница версии Go, venv нельзя создавать вручную, включённый по умолчанию HTTPS привёл к несовпадению протокола, перед обновлением нужен бэкап, ключи нельзя писать в конфиг.
Каждая из этих деталей по отдельности проста, но пропустишь одну — можешь застрять на полчаса. Чем зрелее инструмент, тем выше выгода от «чтения документации»: он инкапсулирует сложность в скрипт, а оставшаяся сложность вся сидит в деталях конфигурации.
Проект включён в knownsec 404Starlink и открыт под лицензией Apache 2.0. Тем, кто занимается авторизованным тестированием безопасности, стоит попробовать.
Развёртывание в один клик не равно пониманию в один клик; именно детали — настоящий ключ к экономии времени.
Адрес проекта: github.com/Ed1s0nZ/CyberStrikeAI (перенесён на github.com/AIPentest/CyberStrikeAI)
Требования к окружению: Go 1.25+ / Python 3.10+
Лицензия: Apache License 2.0
⚠️ Только для авторизованного тестирования