Загрузка...

Strix через RouterAI: автономный пентест-агент на своей модели (Claude, GPT-6, GLM)

Strix

Strix — open-source агент для автономного пентеста (репозиторий usestrix/strix, лицензия Apache 2.0). Он запускает команду агентов, которые изучают код, API и веб-приложение, ищут уязвимости и проверяют их рабочим proof-of-concept в изолированной песочнице, а затем собирают отчёт с описанием и рекомендациями по исправлению. Принцип тот же, что у автономного ИИ-агента: модель сама планирует шаги и вызывает инструменты.

Strix работает поверх LiteLLM, поэтому модель подключается переменными окружения. Через RouterAI вы получаете в одном агенте Claude, GPT, GLM и DeepSeek из каталога моделей, работу из России без VPN и оплату в рублях.

Только законное использование. Strix активно атакует цели, которые вы ему указали. Запускайте его только против своих систем или тех, на которые есть явное письменное разрешение, и в согласованных границах. Для тренировки используйте заведомо уязвимые учебные приложения вроде OWASP Juice Shop. Несанкционированное тестирование незаконно в большинстве юрисдикций. Эта статья описывает только настройку и чтение отчёта.

Требования

  • Docker (запущенный): в нём работает песочница агента на базе Kali Linux
  • Linux, macOS или Windows (установщик поддерживает Windows через .zip-сборку)
  • API-ключ из личного кабинета
  • Достаточно памяти и диска для образа песочницы: образ скачивается при первом запуске

Сам Strix запускается на хосте как CLI. Docker нужен ему, чтобы поднять контейнер-песочницу с браузером, прокси Caido и набором утилит, поэтому запускать сам CLI внутри контейнера не нужно.

Установка

Рекомендуемый способ из документации проекта — установочный скрипт:

curl -sSL https://strix.ai/install | bash

Альтернатива — pipx:

pipx install strix-agent

Скрипт устанавливает бинарник strix. Образ песочницы (по умолчанию ghcr.io/usestrix/strix-sandbox, его можно заменить переменной STRIX_IMAGE) Strix скачивает автоматически при первом запуске. Обновление: strix --update.

Подключение к RouterAI

Strix читает три переменные. Они есть в справочнике по конфигурации:

Переменная Что задаёт Значение для RouterAI
STRIX_LLM Модель в формате LiteLLM openai/anthropic/claude-sonnet-5.5 (префикс openai/, см. ниже)
LLM_API_KEY Ключ провайдера Ваш ключ RouterAI
LLM_API_BASE Адрес API https://routerai.ru/api/v1

Формат id модели

LiteLLM выбирает провайдера по первому сегменту id. Для OpenAI-совместимого шлюза нужен префикс openai/, а дальше — id модели из каталога без изменений. Поэтому anthropic/claude-sonnet-5.5 из каталога превращается в openai/anthropic/claude-sonnet-5.5. Без префикса openai/ LiteLLM пошлёт запрос по протоколу Anthropic на неверный адрес и вернёт 404.

Настройка переменных

Ключ не нужно печатать в команде: так он попадёт в историю оболочки. Прочитайте его без эха в переменную текущей сессии:

read -rs -p "RouterAI API key: " LLM_API_KEY && export LLM_API_KEY
export LLM_API_BASE="https://routerai.ru/api/v1"
export STRIX_LLM="openai/anthropic/claude-sonnet-5.5"
export STRIX_API_TYPE="chat_completions"

Если ключ уже лежит в менеджере секретов или в ~/.zshrc, достаточно export LLM_API_KEY="$ROUTERAI_API_KEY". Значение sk-xxxxxxxxxxxxxxxx в примерах — заглушка.

STRIX_API_TYPE=chat_completions нужен потому, что Strix для части моделей по умолчанию ходит в Responses API, а собственный LLM_API_BASE этого выбора не меняет (документация). RouterAI отдаёт модели каталога через Chat Completions по адресу /api/v1.

Strix запоминает настройки в ~/.strix/cli-config.json, так что при следующих запусках переменные можно не задавать заново. Проверьте, что файл не попадёт в git и в бэкапы с открытым доступом.

Отдельная модель для дедупликации

Strix проверяет, не повторяет ли новая находка уже записанную. Эту задачу можно отдать дешёвой модели через STRIX_DEDUPE_MODEL, не трогая агентов, которые ведут тестирование. Для отдельной модели задайте ключ и адрес явно:

export STRIX_DEDUPE_MODEL="openai/z-ai/glm-5.3-flash"
export DEDUPE_LLM_API_KEY="$LLM_API_KEY"
export DEDUPE_LLM_API_BASE="https://routerai.ru/api/v1"

Выбор модели

Агент делает длинные цепочки вызовов: разведка, чтение кода, запросы к цели, проверка находки. Контекст растёт с каждым шагом, поэтому важны большое окно (у всех моделей таблицы оно около 1 млн токенов) и надёжный вызов инструментов. Об уровне рассуждений читайте в статье про reasoning-модели.

Все id проверены по каталогу RouterAI; цены за токены смотрите там же.

Модель Для чего
z-ai/glm-5.3 Основная для длинных прогонов: проект рекомендует GLM-5.3 в своей документации
deepseek/deepseek-v4.1-flash-1017 Дешёвый вариант для quick и standard, он же в списке рекомендуемых у Strix
anthropic/claude-sonnet-5.5 Разбор сложных цепочек и написание отчёта
openai/gpt-6-astra Максимальная мощность для критичных целей (GPT-6: Luna, Sol, Astra)
z-ai/glm-5.3-flash, anthropic/claude-haiku-5.5 Рутинные шаги и роль STRIX_DEDUPE_MODEL (обзор Haiku 5.5)

Важно про отказы. Документация Strix предупреждает: у флагманских моделей OpenAI, Anthropic и Google включены защитные классификаторы, и без программ допуска для кибербезопасности (Daybreak у OpenAI, Cyber Verification Program у Anthropic) они отказываются от большинства наступательных задач. Если агент отвечает отказами или просто «топчется на месте», смените модель на GLM или DeepSeek либо получите допуск у разработчика модели.

Сколько стоит прогон, зависит от режима, размера цели и модели: у цен за миллион токенов в каталоге разброс в сотни раз (от GLM 5.3 Flash и DeepSeek V4.1 Flash до GPT-6 Astra). Точную цифру для небольшого репозитория смотрите по первому запуску в quick с лимитом. Ограничьте расходы флагом --max-budget (в долларах для оценки Strix) и режимом --scan-mode quick; при достижении лимита неинтерактивный запуск завершается корректно со статусом stopped. Если Strix не знает цену вашей модели, задайте её переменными STRIX_LLM_INPUT_COST_PER_MTOK и STRIX_LLM_OUTPUT_COST_PER_MTOK, иначе бюджет считается неточно.

Проверка подключения

Перед боевым прогоном убедитесь, что RouterAI отвечает и модель есть в каталоге:

curl -s https://routerai.ru/api/v1/models -H "Authorization: Bearer $LLM_API_KEY" | head -c 200

При старте Strix сам проверяет модель коротким запросом. При ошибке он показывает LLM CONNECTION FAILED, ждать ответа он готов LLM_PREFLIGHT_TIMEOUT секунд (по умолчанию 30).

Первый прогон на учебной цели

Для практики возьмите OWASP Juice Shop — намеренно уязвимое приложение, которое официально запускается в Docker:

docker run --rm -p 3000:3000 bkimminich/juice-shop

Опубликованный порт открывает приложение для всех интерфейсов хоста. Запускайте его на личной машине или в изолированной сети и остановите после теста.

Затем запустите Strix. Режим quick занимает минуты, standard — от получаса до часа, deep (по умолчанию) — до нескольких часов:

strix --target http://<адрес-хоста>:3000 --scan-mode quick --max-budget 5

Адрес цели должен быть доступен из контейнера песочницы, а не только из вашего терминала: localhost внутри контейнера указывает на сам контейнер, поэтому используйте IP-адрес хоста в локальной сети. В документации Strix нет отдельной инструкции для целей на хосте, проверьте доступность адреса на своей конфигурации Docker.

Для CI и серверов добавьте -n: Strix работает без интерфейса, выводит находки и завершается с кодом 0 (чисто), 1 (ошибка) или 2 (найдены уязвимости). С флагом --fail-on high код 2 возвращается только при находках уровня high и выше.

Что смотреть в отчёте

Результаты каждого запуска лежат в strix_runs/<имя-запуска>/: vulnerabilities.json, vulnerabilities.csv, findings.sarif (SARIF 2.1.0) и отдельный Markdown-файл на каждую находку. Открыть их в локальной панели можно командой:

strix view

Панель привязана к 127.0.0.1 и печатает ссылку с токеном; не передавайте её посторонним.

На что обратить внимание в каждой находке:

  • Серьёзность и CVSS. Начните с critical и high, остальное разберите после.
  • Где найдено. Эндпоинт, параметр или файл с номером строки — по этому адресу вы будете чинить.
  • Подтверждение. Strix приводит результат проверки в песочнице. Находка с подтверждением надёжнее, чем предположение по коду.
  • Рекомендации. Описание причины и способ исправления. Исправляйте код в своём репозитории, а не вслепую применяйте предложенные правки.
  • Повторы. Если похожие находки дублируются, задайте отдельную модель дедупликации.

Локальную директорию Strix монтирует в песочницу с правом записи, то есть агент может менять реальные файлы (кроме .git). Закоммитьте или спрячьте изменения до запуска по папке с кодом.

Решение проблем

Модель не найдена или 404

Почти всегда виноват id без префикса. Нужно openai/anthropic/claude-sonnet-5.5, а не anthropic/claude-sonnet-5.5: во втором случае LiteLLM идёт по протоколу Anthropic, и сервер отвечает 404 page not found. Проверьте и LLM_API_BASE: нужен адрес с /v1, то есть https://routerai.ru/api/v1.

401 Unauthorized

Strix читает ключ из LLM_API_KEY, а не из ROUTERAI_API_KEY или OPENAI_API_KEY. Убедитесь, что переменная экспортирована в том же терминале, и что в ~/.strix/cli-config.json не осталось старого значения. Ключ должен быть скопирован целиком из личного кабинета.

402 Payment Required

Недостаточно средств на балансе: пополните его в разделе Биллинг.

Docker не найден или не запущен

Strix завершится с ошибкой, если команда docker недоступна. Запустите Docker Desktop или службу docker и проверьте docker ps. Если на машине мало ресурсов, песочница с браузером и прокси может не стартовать или быть убита по памяти: увеличьте лимит памяти для Docker и закройте лишнее.

Таймауты на большом репозитории

Запросы к модели ограничены LLM_TIMEOUT (по умолчанию 300 секунд), число повторов при сбоях — STRIX_LLM_MAX_RETRIES (5). Для больших целей используйте --scan-mode quick или standard, уменьшите область (--target на каталог, а не на весь монорепозиторий), ограничьте число шагов --max-turns и поднимите LLM_TIMEOUT.

Агент не делает ничего полезного

Если модель выводит вызовы инструментов обычным текстом, а не структурированным tool_calls, Strix не может их выполнить (документация). Выберите модель с надёжной поддержкой инструментов из таблицы выше.

Что дальше