Suijin

Defensive & Threat Intelligence v6.9.0 · 23.09.2026 активный

AI-агентный фреймворк red/blue teaming на LangGraph с ReAct-архитектурой для автономного тестирования безопасности.

v6.9.0
23.09.2026 current

Установка
pip install suijin
suijin
# Для проверки окружения: suijin doctor
показать оригинал переведено ИИ

Suijin Logo

Суидзин

Version License Python

Suijin — это автономная платформа безопасности с двумя режимами работы: агент красной команды (Red Team), который цепочкой выполняет разведку → эксплуатирование → отчётность с использованием LangGraph-машины состояний, и агент синей команды (Blue Team), который мониторит живой HTTP-трафик, обнаруживает атаки и отвечает на них с помощью обмана, блокировки и исправления уязвимостей на уровне источника. Оба режима используют один и тот же набор инструментов, одну базу знаний и один граф знаний.

ЮРИДИЧЕСКОЕ ОГРАНИЧЕНИЕ: Этот инструмент предназначен только для авторизованного тестирования безопасности, образовательных целей и исследований. Никогда не используйте эту систему для сканирования, зондирования или атаки любой системы, которой вы не владеете или не получили явное письменное разрешение на тестирование. Несанкционированный доступ незаконен. Используя этот инструмент, вы принимаете на себя полную ответственность за свои действия.


Честное сравнение

Суидзин Агенты на основе подсказок (prompt-count)
Находки представлены как верифицированные POC в терминале (система запускает эксплойт до того, как вы его увидите) или разница базовой линии/эксплойта (режим сравнения) утверждения модели
Прекращение работы структурно запрещено, пока поверхности/ячейки не протестированы (затвор завершения) зависит от модели
Тестирование контроля доступа модель сессии с перекрёстными учётными данными — поля ID различаются в зависимости от учётных данных, однопараметрическая замена учётных данных проза
Широта полезной нагрузки двигатель батареи+фактов — выживаемость тегов, дифференциалы уровня шума, квалификация блокировки WAF воспоминания модели
Мёртвый код принудительно проверяется CI: команда suijin capability не даёт пройти сборку при наличии сирот метрики количества
Тренажёр встроенные лаборатории с цепочками верификации + оценка по бенчмарку (Цитадель: 26 уязвимостей, 3 цепочки короны) —

Бенчмарки

Автономные тесты на веб-эксплуатацию — один агент, одна цель, без участия человека, оценка по точному совпадению флага.

Cybench — HTB Cyber Apocalypse 2024 (трек веб, 9 задач)

Suijin        ████████████████████████████████████████  100.0%  (9/9)

NYU CTF

Suijin        ███████████████████████████████████        83.9%

Все флаги были захвачены цепочкой эксплойтов агента (верифицировано в терминале), без предварительных утверждений.

Что нового в версии 6.8.0 — Защищённые от крашей сессии

  • .sje для каждого выхода: запасной механизм сохранения, активируемый при старте сессии, гарантирует существование пакета независимо от того, как завершится выполнение — случайный краш, сбой при разборке, SIGTERM/SIGHUP, необработанное исключение, выход интерпретатора. Одно идемпотентное сохранение на сессию; путь завершения и все резервные копии делят один разовый флаг.
  • suijin load выбирает за вас: команда suijin load без аргументов выводит десять самых новых пакетов (дата, размер, стоимость, цель) — выберите номер, имя или вставьте путь; голые имена пакетов разрешаются из экспортной папки; неинтерактивные запуски автоматически берут самый новый.
  • Укрепление конфигурации возобновления: заполнители ***stripped*** больше не могут просочиться в конфигурацию возобновлённой сессии — живой config.json заполняет эти ключи вместо них.
  • Бенчмарки на записи: 100% Cybench HTB Cyber Apocalypse 2024 (трек веб), 83.9% NYU CTF (см. выше).

Что нового в версии 6.7.0 — Релиз по укреплению

  • Цикл выполнения не может завершиться аварийно: реальный механизм перезапуска провайдера (состояние сохраняется при пересборке), Ctrl+C всегда приостанавливает (никогда не завершает молча), некорректные события потока обрабатываются как пропуски, ожидания, созданные моделью, ограничиваются вне цикла событий, ask_operator удерживает граф до вашего ответа — и харнесс для фуззинга проверяет агрессивные потоки, чтобы доказать, что каждое выполнение завершается классифицированным образом.
  • Исправление видимости инструментов: двигатель доказательств (http_replay, inject_probe, web_session, coverage_check, dispatch_testers…) и верификатор POC вернулись в список инструментов модели — ранее их случайно убрали из каталога, и агент сообщал об их отсутствии.
  • POC v3: папки для каждого эксплойта (finding.md + exploit.yaml), верификатор берёт на себя управление циклом выполнения (нумерованные панели команд, чёрный ящик вывода, пауза ИИ, активное поле ввода), полный протокол + три варианта восстановления (редактировать yaml / переписать / сработало-всё-равно с верифицированной строкой доказательств).
  • Память сессии — библиотекарь: учётные данные, утечки, плацдармы и подтверждённые эксплойты каталогизируются по мере их обнаружения и вспоминаются, как только появляется соответствующая цель; memory_recall.
  • Осознанность окна контекста: разрешение каталога models.dev (1М резерв), бюджеты, масштабированные по окну, живой индикатор ctx %; диета токенов (однострочные каталоги, сводки результатов объёмом 8к, ссылки на суб-агентов в рамках задачи, стабильная головная часть промпта с кэшем префиксов).
  • 48 провайдеров, включая 13 китайских платформ (Zhipu, Moonshot Kimi, Qwen, Volcengine,

StepFun, SiliconFlow, Xiaomi MiMo, Meituan LongCat…) + suijin custom (любой базовый URL, любой ключ, без проверки подлинности) - Интерфейс настроек текста TUI (curses устарел), синтаксически выделенные блоки кода, плавный темп набора текста, стилизованный статус/рабочее пространство Rich, команды /findings /h1 /out, защищённые команды CLI (без трассировки ошибок), контейнеры выживают при монтировании конфигурационных директорий

Что нового в v6.6.0 — Двигатель веб-доказательств

  • http_replay: полезная нагрузка передаётся как DATA — 15 операций мутации, 12 композиционных кодеков (включая экранирование символа табуляции для обхода WAF), режим сравнения (базовая версия + эксплойт + разница в одном вызове), замена учётных данных (примитив IDOR), сканирование, режим встраивания сырых байтов
  • inject_probe: двигатель доказательств батареи + фактов — никогда не является оракулом; классификация контекста уязвимости, измерение уровня шума, квалификация блокировки WAF
  • web_session: автоматическая модель сессии с перекрёстными учётными данными на основе управляемого трафика — список задач IDOR + скрытые параметры (цели массового назначения, которые интерфейс никогда не раскрывал)
  • Ворота завершения: отказ в закрытии, пока остаются неиспытанные поверхности/ячейки покрытия
  • Журнал покрытия с обязательной пометкой доказательств; перечисление родственных поверхностей с помощью surface_expand; обнаружение застоя на одной поверхности; сценарии исследования влияния XSS (цепочки OAuth, утечка токенов)
  • suijin capability — ворота CI без сиротского кода

Что нового в v6.5.0

  • Двигатель вооружения: агент выполняет разведку → эксплойт → пост-эксплойт автономно — очередь поверхностей атаки с видимым неиспытанным долгом, принудительные переходы режимов, обнаружение плацдарма, сценарии эскалации для каждого ПОДТВЕРЖДЁННОГО нахождения, положительная память (что сработало, по целям и по классам), детерминированное планирование цепочек, лестницы мутации полезной нагрузки.
  • 24 поставщика ИИ: 13 облачных (OpenRouter = один ключ для всех основных моделей, OpenAI, xAI, Mistral, Groq, Together, Fireworks, DeepInfra, Cerebras, SambaNova, Perplexity, Cohere, Lambda), 5 локальных без ключей (Ollama, LM Studio, vLLM, llama.cpp, Jan), а также custom: коробки в локальной сети по любому IP:port. При исчерпании кредитов автоматически переключается на следующий поставщик вместо остановки.
  • Самообслуживание: агент настраивает свою конфигурацию в реальном времени (adjust_config), устанавливает необходимые компоненты по подсказкам в ошибках и записывает собственные загружаемые инструменты.
  • Новые инструменты: bypass_403 (батарея фильтров WAF из 24 вариантов), code_harness (цикл разработки эксплойта: запись → запуск → исправление, PASS = доказательства), payload_mutate (варианты обхода).
  • Лаборатория CITADEL: укреплённая крепость с 26 заложенными уязвимостями и 3 коронными цепочками — гимнастика с оценкой по рейтингу: suijin bench --lab citadel.

Что дальше

Ветка v5.5 — это активная поверхность (инструментарий компетенции: доска состояний, семантика задач, антиповтор, управляющая плоскость, верификация времени заявки). Что разрабатывается дальше:

Приоритет Задача Статус
1 Волны возможностей бета-версии — аудит исходного кода (treeaudit), расширение веб-покрытия + адаптер внешнего бенчмарка, мобильные устройства, криминалистика, бинарные пакеты B1–B5 в плане
2 Цикл SOC синей команды — конвейер обработки событий: обогащение (идентичность, активы), инциденты с жизненным циклом, локализация на уровне идентичности, сохранение + ретро-поиск; безголовый режим suijin blue основы волны A реализованы; волны в очереди
3 Децентрализованный индекс сообщества Marketplace — децентрализованный индекс пакетов запускается (установки с хэш-закреплением уже поставляются) в очереди
4 suijin bench — оцененные лабораторные запуски, производительность агента отслеживается по каждой версии в очереди

Десктопное приложение (устаревшее): десктопный клиент на Tauri и его API-шлюз были выпущены в техническом превью в версии v5.1.0 и в настоящее время не поддерживаются активно — модуль шлюза и код десктопного приложения сохранены в репозитории, чтобы поверхность могла быть оживлена позже; консольный интерфейс является поддерживаемым операторским интерфейсом.

Всё вышеуказанное строится на стабильном ядре без переработки: ядро, границы модулей, бюджет подсказок и паритеты каталога являются строгими контрактами.


Оглавление

  1. Требования
  2. Установка
  3. Справочник CLI
  4. Первое взаимодействие
  5. Конфигурация
  6. Поставщики LLM
  7. База знаний
  8. Рабочее пространство агента
  9. Архитектура
  10. Справочник красной команды
  11. Справочник синей команды
  12. Встроенные лаборатории
  13. Тестирование
  14. Структура проекта
  15. Устранение неполадок
  16. Глоссарий
  17. Вклад и благодарности

Требования

Требование Детали
Python 3.10+ (проверено на версии 3.14)
ОС macOS, Linux, Windows
Ключ API LLM Необязательно — режим эвристики работает без него

Установка

Одной командой (macOS / Linux)

curl -fsSL https://raw.githubusercontent.com/0xwi11iam/Suijin/main/install.sh | bash
suijin doctor     # verify the environment
suijin selftest   # offline smoke test (no network, no API keys)
suijin            # launch the interface

Установщик клонирует репозиторий в ~/.suijin/repo, создаёт изолированную виртуальную среду и добавляет запускатель suijin в PATH. Переопределения окружения: SUIJIN_INSTALL_DIR, SUIJIN_BIN_DIR, SUIJIN_REPO, SUIJIN_NO_PATH_EDIT. Установка эпохи Medusa из ~/.medusa автоматически мигрируется при первом запуске, и старые переменные MEDUSA_* продолжают работать.

pipx / uv (установочный пакет)

pipx install suijin        # or: uv tool install suijin
suijin doctor

Колесо (wheel) включает все основные инструменты, промпты/навыки и встроенную веб-консоль. Необязательные модульные пакеты в директории Modules/ требуют клонирования репозитория — используйте исходный код для полного набора инструментов.

Ручное установка

git clone https://github.com/0xwi11iam/Suijin.git && cd Suijin
python3 -m venv .venv && source .venv/bin/activate
pip install -r suijin/requirements.txt
python3 suijin/main.py

Установка для разработки (локальная живая копия)

Запустите установщик из директории вашего клона — первый вопрос предлагает варианты нормальная или разработка; из клона по умолчанию выбирается разработка (нажмите Enter):

./install.sh            # -> install type [dev] -> live symlink to THIS tree
./install.sh --dev      # non-interactive dev install

~/.suijin/repo становится символической ссылкой на вашу рабочую копию — изменения в исходниках применяются сразу, переустановка не требуется.

Docker (готовое решение)

git clone https://github.com/0xwi11iam/Suijin.git && cd Suijin
docker compose run --rm suijin                 # interactive agent
docker compose run --rm suijin version         # any CLI verb
docker compose down                            # state survives (named volume)

Опубликованный образ загружается из GHCR — локальная сборка не нужна после клонирования. Предпочитаете использовать Docker напрямую?

docker run --rm -it ghcr.io/0xwi11iam/suijin:latest

Рабочая область — это именованный том (suijin_workspace): выводы, база знаний, кэши и конфигурации оператора сохраняются при пересоздании контейнера. В образ входят полный набор инструментов Kali плюс дополнительные пакеты pip (impacket, dnsrecon, wafw00f, dirsearch, medusa), он самопроверяется с помощью suijin doctor, и требует только монтирования config.json в режиме только для чтения.

pipx / uv (установочный пакет)

pipx install suijin        # or: uv tool install suijin
suijin                     # the classic TUI
suijin doctor              # environment check

Колесо включает ядро, основные инструменты, промпты и навыки; полный набор модульных пакетов (138 пакетов) требует клонирования репозитория — используйте Docker-образ или установщик для полного арсенала.


Расширение Suijin — четыре ступени

Ступень Вы пишете Получаете Усилия
Навык suijin/skills/foo.md загружается в промпт агента 30 секунд
Дополнение suijin/addons/foo/main.py — простые функции автоматически зарегистрированные инструменты агента 2 минуты
Пакет suijin module init foo (шаблон) инструменты + документация навыков + модуль ядра 5 минут
Модуль plugin.json + lib/ (первичный) полный жизненный цикл + сервисы серьёзная работа

Навыки и дополнения не требуют шаблонного кода — просто добавьте файл и перезагрузитесь. suijin module adopt foo превращает дополнение в полноценный пакет. Подробности и примеры: developer.md.


Справочник по CLI

Команда suijin без аргументов запускает Rich TUI. Все подкоманды ниже неинтерактивны, работают офлайн и могут использоваться в скриптах (код выхода 0 = здорово). В меню Инструменты оператора TUI (опция 4) доступны интерактивные команды — редактор области видимости, консоль одобрений, битва, дебрифинг, воспроизведение — чтобы ничего не скрывалось за флагами CLI.

Команда Что делает
suijin Запуск классического Rich TUI (Красный / Синий / Настройки)
suijin doctor Полная проверка окружения: Python, зависимости, бинарники, конфиг, модули, база знаний, рабочая область
suijin selftest Офлайн-тест: импорты, контроль доступа к базе знаний, якоря рабочей области, песочница, границы
suijin status Краткий обзор: провайдер, база знаний, рабочая область, модули, порт лаборатории
suijin version Версия релиза, кодовое имя, Python, платформа, путь к пакету
suijin env Наличие ключей API по имени — значения никогда не выводятся
suijin tools Все 265 инструментов агента с указанием доступности (отсутствующие бинарники отмечены)
suijin market Маркетплейс пакетов: поиск / установка / обновление из любого URL-индекса
suijin engage Применение шаблона взаимодействия к цели (повторяемо по расписанию)
suijin modules Загруженные пакеты модулей с количеством инструментов и зависимостями
suijin skills Редактируемые навыки атаки/защиты агента
suijin config show Действующая конфигурация (слитые значения по умолчанию), секреты замаскированы
suijin config validate Валидация Pydantic для config.json + blue_config.json (код выхода 1 при ошибке)
suijin workspace Структура рабочей области, использование по директориям, состояние символических ссылок
suijin reports Отчёты о взаимодействиях в suijin_agent/reports/ (новейшие сначала)
suijin sessions Сохранённые сессии взаимодействий с целями
suijin labs Встроенные лаборатории: список портов / запуск кампании возможностей
suijin export Пакет доказательств цепочки хранения: архив zip + манифест SHA-256 (--with-creds, --verify <zip>)
suijin debrief Аналитика взаимодействий из аудиторских трасс (-v для деталей по взаимодействию)
suijin replay Пошаговое воспроизведение хроники взаимодействия (--list, --file, --export-md)
suijin eval Воспроизведение записанного трафика через синий детектор: точность/полнота/F1 + развёртка порога
suijin spar Режим спарринга: практика детектора против сохранённого базового уровня, с проверкой на регрессию
suijin battle Фиолетый тим: сценарий красного против шаблонного синего в лаборатории — живой табло с результатами
suijin bench Градуированный бенчмарк лаборатории: агент против лаборатории, оценка флагов/инструментов/стоимости на релиз (--lab, --live, --history)
suijin authorize <domain> Оформление авторизации на баг-баунти — отображается в каждом заказе на взаимодействие (--program, --id, --page, --list, --remove)
suijin bb-scope <url> Привязка области охвата страницы баг-баунти (рекомендации) через bugscope — агент самопроверяется с помощью scope_search
suijin pack build <dir> Запечатывание пакета в архив .sjm/.sja/.sjp (таблица инструментов + заметка разработчика + печать SHA-256)
suijin install <file.sj?> Мастерская установка запечатанного пакета: авторство, заметка разработчика, сканирование безопасности, таблица инструментов (--yes, --allow-unsafe)
suijin kb read <path> Выгрузка полного (неусечённого) документа базы знаний из его тар-архива; suijin kb diff проверяет актуальность индекса vs кэша
suijin pull cve Зеркалирование каталога CISA KEV (без ключа API) — питает офлайн search_cve и активные бейджи эксплуатируемых уязвимостей
suijin creds Защищённый хранилище учётных данных: init / list [--reveal] / add / get / export [--plain]
suijin dossier <target> Интеллектуальная информация по цели: ограничения KG, неудачные техники, история взаимодействий и отчётов
suijin timeline Единый хронологический обзор по аудитам, сессиям и отчётам
suijin watch Живое оценивание лога трафика по мере его роста (--traffic <file>)
suijin clean Очистка рабочей области — по умолчанию сухой прогон, --apply архивирует, а затем удаляет
suijin rules Пользовательские правила детектора: validate (линтинг) / list
suijin policy Политика взаимодействия: check (линтинг) / show — опционально, принудительно при отправке
suijin providers Проверка настроенных провайдеров с небольшим живым запросом (--all для всех ключевых провайдеров)
suijin module SDK модуля: init <name> создаёт шаблон, validate <name> проверяет манифест и импорты
suijin skills Список навыков + версия: history / diff / rollback (снимки при каждом редактировании агента)
suijin notify Уведомления оператора: send 'msg' / test (каналы файлов/команд/macOS; битва срабатывает на флагах и блоках)
suijin compliance [eng] Карта результатов взаимодействия по CWE / OWASP Top-10 / MITRE ATT&CK (по умолчанию — новейшее взаимодействие)
suijin approvals Консоль HITL: list заблокированных действий, approve/deny <id> для сессии, clear сбрасывает вердикты
suijin scope TUI в стиле Burp для области видимости: списки включений/исключений, сопоставление поддоменов, переключатель неразрешаемых, принудительное включение/выключение
suijin panic Убивает все процессы Suijin и очищает живое состояние СРАЗУ (--dry-run показывает предварительный просмотр)
suijin pull kb Загрузка и индексация базы знаний (включает функции базы знаний)
suijin pull kb --status Офлайн: что проиндексировано, количество по источникам, возраст сборки
suijin pull kb --list Доступные источники с предупреждениями о размере
suijin pull kb --sources <names> Загрузка подмножества (перестраивает БД только с этими источниками)
suijin pull kb --force Перезагрузка даже если тар-архивы в кэше
## Инструменты жизненного цикла вовлечённости

Экспорт доказательств (suijin export)

Одна команда упаковывает всё, что было создано в ходе вовлечённости, в архив ZIP с защитой от изменений: отчёты, аудит-трейлы, сессии, состояние "синего" (blue state), досье, оба графа знаний и заредактированная конфигурация. Каждый файл хешируется с помощью SHA-256 в manifest.json вместе с записью цепочки хранения (custody.json) — кто, когда, хост, коммит. Команда suijin export --verify <zip> повторно хеширует пакет и отмечает любые расхождения, отсутствующие или неучтённые файлы. Учётные данные исключаются, если явно не указан флаг --with-creds.


Дебрифинг (suijin debrief)

Аналитика по данным suijin_agent/audit_trails/*.json: - таблица по каждой вовлечённости (действия, успешность/неудача, находки, стоимость, продолжительность), - тренды по всему флоту вовлечённостей (средняя продолжительность, находки на вовлечённость, топ-инструменты), - с флагом -v — детализация по степени серьёзности/инструменту для каждой вовлечённости, включая инструменты, которые продолжают терпеть неудачи.


Воспроизведение (suijin replay)

Интерактивная временная шкала по аудит-трейлу любой вовлечённости: - пробел для воспроизведения/паузы, - стрелки для прокрутки (шаги по 10 при нажатии вверх/вниз), - +/- для изменения скорости, - q для выхода. Панели отображают мысль, действие + аргументы и полное наблюдение на каждом шаге. Флаг --export-md OUT записывает полный разделяемый протокол; в неинтерактивных контекстах протокол выводится напрямую.


Настройка детектора (suijin eval)

Воспроизводит записанный трафик (--traffic, по умолчанию — живой "синий" лог) через реальный производственный скорер, помечает каждую запись с помощью жёстких эвристических правил для атаки/безопасности (или ваших собственных labels.jsonl — правила вида {"label": "attack", "any": ["substr"]}, первая совпадение побеждает), и отображает метрики точности/полноты/F1 на производственном пороге, а также полный анализ:

@ threshold 5 (production default):  P 0.80  R 0.57  F1 0.67  (TP 4 FP 1 TN 4 FN 3)
  thr    prec  rec   F1    TP FP TN FN
   2   0.86  0.86  0.86   6  1  4  1
  ...
  best F1 at threshold 2 — tune via blue_config.json scorer.suspicious_threshold

Этот инструмент нашёл и исправил реальные пробелы в детекторах (сканирование только тела запроса пропускало все атаки через строку запроса; тела XXE и заголовки X-Admin никогда не сканировались) — полнота на боевом трафике выросла с 0.14 до 0.57 при том же пороге, при сохранении точности на уровне 0.80.


Режим боя (suijin battle)

Команда для синего/красного тестирования: запускает лабораторию blue_target, очищает состояние "синего", затем выполняет сценарий красной кампании (разведка → атаки аутентификации → атаки доступа → цепочка инъекций → финальный проход), в то время как встроенный "синий" наблюдатель отслеживает живой трафик, оценивает каждый запрос с помощью производственного скорера и развёртывает реальные защиты — замедляет лабораторию (измеримая задержка), блокирует сеть, отказывая в последующих запросах красной команды. Во время боя отображается живая доска Rich-очков; отчёт о битве в формате markdown сохраняется в suijin_agent/reports/. Оценка: - красный = 100/флаг + 25/класс атаки, - синий = 10/обнаружение + 25/замедление + 50/блокировка. Пойманные флаги и блокировки активируют каналы suijin notify, если они настроены.


Обновление возможностей агента (v2.10)

Новые инструменты агента, все работают офлайн:

Инструмент Что делает
kb_read Полные документы базы знаний без обрезки (копия FTS ограничена); поиск по подстроке пути разрешён
target_dossier Интеллектуальные данные по цели: заблокированные паттерны, неудачные техники, история — консультируйтесь перед повторной атакой
mutate_wordlist Генерация словаря из исходных слов → леет/годы/суффиксы (лимит 50к) в suijin_agent/wordlists/
cewl_words Сбор словаря из видимых слов целевой страницы

Теперь suggest_exploit выполняет нечёткое сопоставление бинов GTFOBins (finnd → find), а recon_chain автоматически добавляет офлайн-ведущие для эксплоитов по идентифицированным сервисам. search_cve переключается на локальное зеркало KEV, если NVD недоступен. Переключение провайдеров: установите "fallback_providers": ["deepseek"] в конфигурации — жёсткие ошибки переключаются на следующий провайдер.


Управление (по желанию)

  • Политика (suijin/policy.json, команды suijin policy check|show, редактирование через TUI suijin scope): заблокированные инструменты, регулярные выражения для аргументов, ограничение целей в стиле Burp — списки включения/исключения (исключение перекрывает включение), переключатель для совпадения поддоменов, дикие карты *.domain, разрешение неразрешаемых хостов — применяется на этапе диспетчеризации. Отсутствие файла = отсутствие контроля — существующие вовлечённости не затрагиваются; инструменты только для интеллекта (досье, база знаний, поиск CVE) никогда не блокируются по политике.
  • Правила детектора (suijin/detector_rules.json, команды suijin rules validate|list): пользовательские детекторы на основе регулярных выражений (поле: тело/путь/UA/заголовки, вес 1–10), интегрированные в инструмент настройки и наблюдателя боя.
  • Хранилище учётных данных (suijin creds): шифрование с использованием PBKDF2-HMAC-SHA256 + потоковое шифрование с метками, импорт и уничтожение устаревших credentials.json, экспорт с замазыванием.

Операционные утилиты (v2.10)

suijin providers (проверка живых провайдеров), suijin module init|validate. (module SDK), suijin skills history|diff|rollback (каждая самокорректировка агента фиксируется в снимке), suijin labs run (запуск + проверка каждой лаборатории → матрица возможностей), suijin watch (просмотр трафика в реальном времени с оценкой), suijin timeline (унифицированная история артефактов), suijin clean (очистка рабочей области с предварительным сухим запуском), suijin notify (каналы уведомлений для файлов/команд/macOS).


Первое взаимодействие

Красная команда

# Terminal 1: start a lab
python3 suijin/lab/blue_target/vulnerable_app.py        # :5906

# Terminal 2: launch and point the agent at it
python3 suijin/main.py   # choose [1] Red Team, target http://127.0.0.1:5906

Агент выполняет цепочку действий автономно — сканирование портов, обнаружение конечных точек, брутфорс директорий, поиск уязвимостей (CVE), эксплуатация — фиксируя каждый шаг в журнале аудита и .notes/, и завершает отчетом в suijin_agent/reports/.

Синяя команда

# Terminal 1: Blue Team starts and watches the built-in lab
python3 suijin/main.py   # choose [2] Blue Team -> 2 (built-in lab :5906)

# Terminal 2: attack it once the baseline locks (after 25 requests)
python3 suijin/lab/blue_target/attack_simulator.py
# or by hand:
curl -X POST http://127.0.0.1:5906/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin'"'"' OR '"'"'1'"'"'='"'"'1","password":"x"}'

Совместная работа (Purple Teaming)

Запустите обе команды одновременно: синяя команда защищает лабораторию, а красная атакует. Граф знаний разделяется, поэтому все найденные флаги и развернутые меры защиты видны обеим сторонам.


Конфигурация

Конфигурация хранится в suijin/config.json (красная команда) и suijin/blue_config.json (синяя команда). Ключи API хранятся в suijin/.env или в переменных окружения — никогда не в config.json. Проверьте валидность с помощью suijin config validate; просмотрите с помощью suijin config show (секреты скрыты).

suijin/config.json — справочник ключей

Ключ Значение по умолчанию Описание
provider "deepseek" Идентификатор провайдера LLM (см. Провайдеры LLM)
deepseek_model "deepseek-v4-flash" Модель DeepSeek
zai_model "glm-5.3" Модель Z.ai GLM
zai_endpoint "coding" Площадка биллинга Z.ai: "coding" (План Кодинга) или "paas" (оплата по факту)
gemini_model "gemini-2.5-flash" Модель Gemini
anthropic_model "claude-opus-4-7" Модель Anthropic
temperature 0.4 Температура выборки (0.0–2.0)
max_tokens_per_request 8000 Лимит токенов на одно обращение
max_iterations 100 Лимит итераций агента
supervisor_interval 5 Супервайзер запускается каждые N итераций
supervisor_model_id "Qwen/Qwen2.5-3B-Instruct" Модель супервайзера (HuggingFace)
cost_alert_usd / cost_budget_usd / cost_hard_cap_usd 0.25 / 1.0 / 2.0 Ограничения по стоимости
mode_hitl false Включение человека в контур: блокирует инструменты, не связанные с разведкой, до одобрения
mode_guardrail false Блокирует разрушительные команды оболочки (rm/mv/chmod/kill)
mode_deploy_subagent true Разрешает параллельные суб-агенты
mode_audit_trail true Журналирование аудита без обрезки в формате JSON/MD
subagent_count 2 Максимальное количество параллельных суб-агентов (1–5)
proxy_url — Прокси для исходящего HTTP-трафика всех инструментов
metasploit_rpc_host / _port / _ssl 127.0.0.1 / 55553 / false Параметры подключения к msfrpcd

Баннер запуска и вращающийся индикатор мышления определяют модель отображения в зависимости от провайдера (<provider>_model; для HuggingFace используется final_model_id).

Неизвестные ключи выявляются при запуске с помощью валидации Pydantic; zai_endpoint принимает только значения coding, paas или полный пользовательский базовый URL.

suijin/blue_config.json — справочник ключей

{
    "traffic_normalization_turns": 25,
    "scorer":       {"critical_threshold": 8, "suspicious_threshold": 5},
    "watchers":     {"max_per_endpoint": 3, "health_check_interval": 30},
    "deception":    {"auto_honeypot": true, "auto_tarpit": true,
                     "tarpit_delay_seconds": 8, "shadow_redirect_threshold": 8},
    "response":     {"auto_block_critical": true, "max_blocks_per_hour": 50},
    "hotfix":       {"auto_patch_critical": false, "silent_patch_mode": true},
    "cost":         {"daily_budget_usd": 5.00, "max_llm_calls_per_minute": 20}
}

Провайдеры LLM

Провайдер Модели Переменная окружения
Z.ai (GLM) glm-5.3 (по умолчанию), glm-5-turbo, glm-4.7 ZAI_API_KEY
DeepSeek deepseek-v4-flash, deepseek-v4-pro DEEPSEEK_API_KEY
HuggingFace Qwen, GLM, DeepSeek через TGI HF_TOKEN
Gemini gemini-2.5-pro, gemini-2.5-flash GEMINI_API_KEY
Anthropic claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5 ANTHROPIC_API_KEY
AMD через amd_config.endpoint AMD_API_KEY

NVD_API_KEY (необязательно) увеличивает лимиты NVD для инструмента search_cve.

Z.ai: План Кодинга против оплаты по факту

Z.ai предоставляет два отдельных эндпоинта для чат-запросов, которые принимают один и тот же ZAI_API_KEY, но имеют разный биллинг. Выберите с помощью zai_endpoint в suijin/config.json (Настройки TUI → провайдер zai → zai_endpoint, или suijin config validate выявит опечатки):

zai_endpoint Базовый URL Биллинг
"coding" (по умолчанию) https://api.z.ai/api/coding/paas/v4 Подписка на План Кодинга GLM (Lite/Pro/Max) — расходует кредиты плана, а не доллары. Доступные модели: glm-5.3, glm-5-turbo, glm-4.7 (старые идентификаторы GLM автоматически перенаправляются на glm-5.3).
"paas" https://api.z.ai/api/paas/v4 Оплата по факту — биллинг в долларах США за токен, полный каталог GLM. Выберите этот вариант, если у вас нет Плана Кодинга.

Ключ Плана Кодинга, использующий эндпоинт paas (или наоборот), вернет 403 — Suijin обнаруживает проблему и выводит точный способ её исправления вместо повторных попыток. Команды suijin doctor и suijin status показывают активный эндпоинт. Также поддерживается полный пользовательский базовый URL (например, прокси) в качестве zai_endpoint.

Документация: https://docs.z.ai/devpack/tool/others


База знаний

suijin pull kb скачивает и индексирует офлайн-базу знаний по безопасности в одну базу данных SQLite FTS5 — это действие активирует все функции базы знаний. Пока вы её не запустите, они остаются отключёнными (search_kb сообщает DISABLED, инструмент каталога отображает её в разделе отключённых функций, а агент просит оператора выполнить команду pull).

suijin pull kb              # download all sources and compile to SQLite FTS5
suijin pull kb --status     # what's indexed, per-source counts, build age
suijin pull kb --list       # available sources (incl. size warnings)
suijin pull kb --sources hacktricks gtfobins   # subset (replaces the DB)
suijin pull kb --force      # ignore cached tarballs
Источники HackTricks, PayloadsAllTheThings, GTFOBins (GTFOBins.github.io — шаблоны путей сопоставляются под _gtfobins/, псевдонимы, такие как awk -> mawk, разрешаются), LOLBAS, справочники OWASP, SecLists (~300 МБ, предупреждение перед скачиванием)
Хранилище suijin/kb.sqlite3 (FTS5, ранжирование по BM25) + архивы suijin/kb_cache/ — всегда внутри репозитория, никогда не упакованы
Инструмент агента search_kb — ранжированные результаты с источником и фрагментом, офлайн. Опциональный фильтр source:<name> (например, "source:gtfobins awk sudo") и ограничение limit от 1 до 20 (по умолчанию 5)
Честный статус Учитываются только источники, которые действительно проиндексировали документы; источник, который скачивает, но не находит ни одного файла, считается неудачей с подсказкой по шаблону, а не тихим пробелом
Устойчивые загрузки 3 попытки скачивания на ссылку с отступом, устаревшие файлы .part удаляются (никогда не возобновляются), прогресс логируется каждые 50 МБ, таймаут 600 секунд

Ритм атаки агента начинается с базы знаний: сбор отпечатков -> search_kb -> search_cve -> атака. Одна неудачная загрузка источника не убивает весь процесс — неудачи пропускаются, отображаются и могут быть повторены с флагом --sources <name>. Команда suijin doctor показывает количество документов по каждому источнику и предупреждение STALE, если сборка старше 30 дней.

Набор инструментов агента на основе базы знаний

Помимо search_kb, агент получает семь офлайн-инструментов (все работают без API-ключей; четыре отмеченных требуют сборку базы знаний):

Инструмент Что делает
suggest_exploit Сервис с собранными отпечатками -> точная страница GTFOBins для привилегированного повышения + ссылки из HackTricks и PayloadsAllTheThings, офлайн
find_wordlist Ключевое слово -> соответствующие списки слов из SecLists, материализованные в suijin_agent/wordlists/ и готовые для использования с ffuf -w
extract_payloads Извлекает исполняемые блоки кода из документов базы знаний в suijin_agent/payloads/
kb_stats Инвентаризация по источникам, возраст сборки, неудачные источники
wordlist_tool Объединяет, удаляет дубликаты и фильтрует списки слов по длине
mine_failures Кластеризует failure_db.json по техникам/причинам, чтобы избежать повторения ошибок
anonymize_report Удаляет IPs, email, токены, JWT, ключи из отчёта перед его распространением (localhost и FLAG{} сохраняются)

search_kb также поддерживает фразовые запросы: кавычки вокруг фразы сопоставляют соседние слова в заданном порядке — "union select" не совпадёт с select ... union.


Рабочая область агента

Все артефакты агента хранятся в одной корневой директории suijin_agent/:

suijin_agent/
├── reports/         engagement reports (markdown/html/json)
├── audit_trails/    zero-truncation JSON/MD audit logs
├── sessions/        saved sessions for replay
├── blue_state/      blue-team session state
├── dossiers/        attacker profiles
├── outputs/         background-job logs + offloaded tool output
├── payloads/ ── scripts/ ── sandbox/
├── evidence/ ── evidence_chains/ ── goals/
├── credentials.json discovered credentials
└── SOUL.md          agent persona file

Структура саморемонтируемая: при запуске ensure_workspace_layout() (suijin/modules/platform/lib/workspace.py) объединяет любую legacy-директорию suijin/suijin_agent/ в корневую рабочую область и заменяет внутренний путь на символическую ссылку -> ../suijin_agent. Все записи проходят через одну точку (WORKSPACE_DIR); абсолютные пути вне рабочей области и список разрешённых путей /tmp отклоняются; песочница оболочки находится в suijin_agent/sandbox. Артефакты базы знаний строго хранятся в suijin/ — никогда внутри рабочей области.

Проверьте её: suijin workspace (использование + состояние символических ссылок), suijin selftest (ограничения и изоляция песочницы).


Архитектура

graph TB
    subgraph "Suijin Core"
MAIN[main.py<br/>Mode Selector]
RED[redteamer.py<br/>LangGraph State Machine]
BLUE[blueteamer.py<br/>Live Traffic Monitor]
THINK[think_node.py<br/>ReAct + 7 Action Types]
TOOLS[dispatch.py<br/>112+ Tools]
SUP[supervisor.py<br/>Pattern Detector]
    end
    subgraph "Red Team"
        NMAP[nmap] & SQLMAP[sqlmap] & GOBUSTER[gobuster]
        META[metasploit] & HYDRA[hydra] & NUCLEI[nuclei]
        MORE[...]
    end
    subgraph "Blue Team"
FEED[LiveFeed<br/>18 Attack Detectors]
AI[BlueAIEngine<br/>LLM Decisions]
KG2[Knowledge Graph<br/>Shared Intel]
DECEIVE[Tarpit + Honeypot<br/>pfctl Blocking]
SUB[Per-Endpoint<br/>AI Subagents]
    end
    MAIN --> RED & BLUE
    RED --> THINK --> TOOLS
    BLUE --> FEED --> AI --> DECEIVE
    FEED --> KG2 --> SUB --> AI
    TOOLS --> NMAP & SQLMAP & GOBUSTER & META & HYDRA & NUCLEI & MORE
    SUP -.->|every 5 iters| RED

Краткое описание режимов работы:

Красная команда (Red Team) Синяя команда (Blue Team)
Цель Обнаружение, верификация и эксплуатация уязвимостей; захват флагов; составление отчёта. Обнаружение, дезинформация, блокировка и исправление атак; ведение логов защиты и профилей атакующих.
Драйвер Машина состояний LangGraph + супервизор + параллельные суб-агенты. 18 детекторов до AI + суб-агенты AI на каждом эндпоинте + лестница ответов.
Инструменты nmap, gobuster, feroxbuster, amass, sqlmap, hydra, Metasploit, john, поиск CVE/KB. Медленная сеть (tarpit), блокировка сети, канарьи-токены, движок исправлений, профилирование KG.
Выходные данные Находки, флаги, цепочки эксплуатации, аудиторский след, дерево атак. Поток инцидентов, журнал защиты, история атакующих, применённые исправления.

Справочник для красной команды (Red Team)

Трубопровод

recon -> обнаружение уязвимостей -> эксплуатация -> эскалация -> флаг -> отчёт, управляется

Супервайзинг узла (ReAct) через машину состояний LangGraph. Каждый шаг вызова инструмента и сырые данные сохраняются в журнале аудита.

Живая командная строка (во время выполнения)

Во время потоковой передачи агента активна всегда доступная командная строка — вводите в любое время, выполнение не останавливается:

Команда Действие
/state Текущее состояние агента (фаза, итерации, сообщения)
/note <текст> Немедленная запись заметки об взаимодействии
/kb <запрос> Быстрый поиск в базе знаний (лучшие 3 результата)
/cost Итоговый подсчёт токенов и расходов на данный момент
/approvals Очередь HITL → /approve <id> / /deny <id> для принятия решений в процессе выполнения
/scope Текущие целевые области
/audit / /sessions Сводка аудита / сохранённые сессии
/report Генерация и сохранение отчёта без остановки
/pause Переход в режим руководства после текущего шага
/panic Немедленное завершение всего
обычный текст Очередь как руководство оператора, доставляется на следующем паузе

/help выводит полный список команд. Команды также доступны в режиме паузы (Ctrl+C).

Супервайзер — наблюдение без затрат

Запускается бесшумно каждые 5 итераций (настраиваемо). Чистое сопоставление шаблонов — без вызовов LLM, нулевая стоимость API.

Шаблон Триггер Вмешательство
Цикл Один и тот же инструмент 3 раза подряд "Попробуйте РАЗНЫЙ подход. Смените инструмент или вектор атаки."
Ловушка для бухгалтерии 4+ хода с заметками/задачами "ОСТАНОВИТЕ документирование. НАЧНИТЕ ЭКСПЛУАТАЦИЮ СЕЙЧАС."
Пропущенный флаг Найден FLAG{...}, но не заявлен "ЗАЯВИТЕ его НЕМЕДЛЕННО с помощью claim_flag."
Неисследованная уязвимость Уязвимость обнаружена, но нет продолжения "ИСПЫТАЙТЕ уязвимость СЕЙЧАС. Не переключайтесь."
Неудача суб-агентов 3+ суб-агента вернули пустой результат "Суб-агенты продолжают терпеть неудачу. Выполните задачу самостоятельно."
Зависание 5 ходов без новой информации "Коренным образом измените подход или сгенерируйте отчёт."

Суб-агенты

{"action": "deploy_subagent",
 "subagent_task": "SQLi on /login || XSS on /search || SSTI on /profile",
 "thought": "Parallelizing attack vectors across all endpoints"}
Свойство Значение
Макс. одновременных 3 (семафор)
Макс. шагов 5 на суб-агента
Таймаут LLM 45 с
Таймаут инструмента 60 с
Общий таймаут 95 с
Изоляция сбоев Да — одна ошибка не убивает остальных

Управление временем выполнения

Команда Контекст Действие
Ctrl+C Во время выполнения Пауза агента, переход в режим руководства
/report На паузе Принудительная генерация отчёта + завершение аудита
/audit На паузе Печать текущего журнала аудита
/state На паузе Печать состояния агента (фаза, итерации, стоимость)
/sessions На паузе Список сохранённых сессий для воспроизведения

Справочник Blue Team

Обработка запросов — три уровня

Уровень Триггер Стоимость AI Ответ
НОРМАЛЬНЫЙ Соответствует известному безопасному базовому уровню $0.00 Записан только для аудита
АНОМАЛЬНЫЙ Отклоняется от базового уровня, без шаблона атаки ~$0.001 AI классифицирует → базовый уровень или ИССЛЕДУЕМЫЙ
ИССЛЕДУЕМЫЙ Обнаружен шаблон атаки или AI выявил проблему ~$0.002 AI решает: БЛОКИРОВАТЬ / ВВЕСТИ В ЗАБЛУЖДЕНИЕ / ИСПРАВИТЬ / ЗАЛОГИРОВАТЬ / ПЕРЕНАПРАВИТЬ

Обучение базовому уровню: первые 25 запросов строят профили шаблонов (SmartNormalizer хеширует по методу, нормализованному пути, ключам параметров, структуре тела). После 25 запросов базовый уровень фиксируется, и активируется анализ AI.

Пред-АИ детектор шаблонов — 18 сигнатур

№ Шаблон Вес Пример
1 SQL-инъекция 5 admin' OR '1'='1, UNION SELECT
2 SQL-инъекция (слепая) 5 ' OR SLEEP(5), BENCHMARK()
3 XSS 5 <script>, onerror=, javascript:
4 Путь к перемещению 4 ../../etc/passwd
5 SSRF 5 169.254.169.254, metadata.google.internal
6 Инъекция команд 5 ; id, `whoami`, $(...)
7 SSTI 4 {{7*7}}, ${7*7}
8 XXE 5 <!ENTITY xxe SYSTEM
9 Атака JWT 3 alg:none, путаница с ключом
10 Десериализация 5 pickle.loads, yaml.load(
11 LDAP-инъекция 4 (&(uid=*)(|
12 NoSQL-инъекция 4 {"$ne": null}
13 User-Agent сканера 4 sqlmap, Nikto, Burp
14 Массовое назначение 4 "role":"admin"
15 Заголовок обхода аутентификации 5 X-Admin: true
16 Брутфорс 3 Hydra/Suijin User-Agent, повторные попытки
17 Включение файлов 5 php://filter, data://text
18 Атака GraphQL 3 __schema, глубокое вложение

Порог срабатывания: 5. Повторные нарушители получают +1 эффективный балл за каждый флаг — стойкий атакующий автоматически переходит от ВВЕСТИ В ЗАБЛУЖДЕНИЕ к БЛОКИРОВАТЬ. Детектор шаблонов имеет право вето даже когда AI классифицирует как безопасное.

Двигатель принятия решений AI

Для каждого аномального/исследуемого запроса движок строит промпт с полным запросом, историей атакующего из графа знаний, исходным кодом обработчика эндпоинта и интеллектом суб-агентов, а затем получает структурированное решение:

{
  "verdict": "FLAGGED",
  "score": 9,
  "action": "DECEIVE",
  "attack_analysis": "SQL injection in username field using OR 1=1 bypass",
  "attacker_assessment": "Automated scanner, low skill",
  "reasoning": "Classic SQLi. Endpoint uses raw string concatenation.",
  "commands_to_run": ["echo '{\"127.0.0.1\":{\"delay\":5}}' > /tmp/blue_tarpit.json"],
  "code_changes": [
    {"file": "vulnerable_app.py", "change": "Parameterize SQL query",
     "new_content": "conn.execute('SELECT * FROM users WHERE username=?', (username,))"}
  ]
}

Команды выполняются, изменения в коде записываются в целевую файловую систему, а всё фиксируется в графе знаний. Доктрина эскалации: новый атакующий → ВВЕСТИ В ЗАБЛУЖДЕНИЕ (собрать разведданные); повторяющийся нарушитель → БЛОКИРОВАТЬ; критические уязвимости (RCE/экспорт данных) → БЛОКИРОВАТЬ + ЗАПАТЧИТЬ; безобидная аномалия → ЗАЛОГИРОВАТЬ и установить базовые параметры. Если ИИ недоступен (неправильный ключ, лимит квот, сеть), всё равно разворачивается защита на основе шаблонов — защита никогда не зависит от доступности ИИ.


Арсенал дезинформации

  • Тарпит (Tarpit) — помеченные IP получают реальную задержку time.sleep(delay) на каждый запрос через /tmp/blue_tarpit.json (измерено: 0.018 с в норме → 5.8 с при оценке 6 → 8.0 с при оценке 10). Действует в течение 30 минут.
  • Блокировка сети — оценка 8+ активирует pfctl -t blue_blocked -T add <IP> (на Linux используется iptables в качестве резервного варианта).
  • Мёдовые ловушки (Honeypots) — поддельные административные пользователи с контрольными API-ключами, фиктивные отладочные токены, ложные конфигурационные эндпоинты.
  • Патчинг кода — полная перезапись файлов с уязвимыми обработчиками; режим тихого патчинга сохраняет оригинальный эндпоинт как ловушку.

Граф знаний о сессии

/tmp/blue_kg.json — общий для суб-агентов и основного движка: - узлы атакующего (IP, первая встреча, флаги, инструменты), - узлы атаки (путь, тип, оценка, полезная нагрузка), - узлы защиты (тарпит/блокировка/патчинг + детали), - узлы разведки (находки суб-агентов). Функция get_attacker_history(ip) передаёт ИИ полный контекст, чтобы ответы эскалировались при повторении.


Команды в режиме выполнения

Команда Действие
Ctrl+C Пауза потока, переход в режим команд
/state Эндпоинты, суб-агенты, запросы, статус базовых параметров, стоимость ИИ
/report Итоги графа знаний: топ атакующих, количество атак/защит
/health Проверка состояния системы
/quit Завершение сессии, сохранение состояния

Встроенные лаборатории

В папке suijin/lab/ поставляются восемь специально уязвимых приложений на Flask — практикуйтесь, не затрагивая чужие данные. Команда suijin labs выводит их список с портами и командами запуска.

Лаборатория Порт Запуск Фокус
cloud_iam_lab 5900 python3 suijin/lab/cloud_iam_lab/app.py Настройки AWS IAM
api_only_lab 5901 python3 suijin/lab/api_only_lab/app.py REST + GraphQL: BOLA, массовое присвоение, обход лимитов запросов
oauth_lab 5902 python3 suijin/lab/oauth_lab/app.py Настройки OAuth 2.0 / OIDC
log4shell_lab 5903 python3 suijin/lab/log4shell_lab/app.py Уязвимость Log4j (RCE)
wordpress_lab 5904 python3 suijin/lab/wordpress_lab/app.py WordPress + уязвимые плагины
ad_lab 5905 python3 suijin/lab/ad_lab/app.py Симуляция AD DC: Kerberos, LDAP, SMB
blue_target 5906 python3 suijin/lab/blue_target/vulnerable_app.py 25 эндпоинтов, 8 групп маршрутов, 15+ классов уязвимостей (ниже)
devops_dashboard 5700 python3 suijin/lab/devops_dashboard/app.py Лаборатория жёсткого RCE — требуется многоступенчатая цепочка

blue_target (:5906) — группы маршрутов

Группа Эндпоинты Уязвимости
Auth /auth/register, /auth/login, /auth/refresh, /auth/me, /auth/reset-password SQL-инъекция при логине, массовое присвоение (роль=admin), JWT с alg:none, предсказуемые токены сброса пароля
Users API /api/users, /api/users/<id> IDOR, отсутствие CSRF при удалении
Search /api/search SQL-инъекция в имени поля и значении
Documents /api/documents/<id>/download IDOR, обход путей, обход проверки расширений при загрузке
Export /api/export XXE для чтения файлов
Templates /api/templates/<name> SSTI через eval()
Execute /api/execute Инъекция команд (shell=True)
Coupons /api/coupons/redeem Гонка условий (окно 0.5 с)
GraphQL /graphql Включена интроспекция, отсутствует лимит глубины
Admin /admin, /admin/config Обход через X-Admin: true, SSRF через вебхуки
Health/Debug /health, /debug/state Разглашение информации
Landing / Полная перечисление эндпоинтов

Пример цепочки атаки: регистрация как админ (массовое присвоение) → JWT админа → дамп пользователей через IDOR → UNION-инъекция в поиске → чтение файлов через обход путей → RCE через /api/execute.


Тестирование

python3 -m pytest suijin/tests/ -q          # full suite (offline)
python3 -m pytest suijin/tests/ -m "not ai" # skip live-API tests

Более 500 тестов в 16 файлах — все офлайн (сеть эмулирована, API-ключи не требуются).

Файл теста Покрывает
test_cli_commands.py Все неинтерактивные команды CLI: статус/версия/окружение/инструменты/модули/навыки/лаборатории/рабочая область, отображение/валидация конфигурации, списки отчётов/сессий, диагностика рабочей области
test_zai_provider.py Двойные эндпоинты Z.ai (кодинг по умолчанию / PaaS / пользовательский URL / руководство по 403), переопределение модели, повторы, ценообразование, валидация конфигурации, диагностика строки
test_kb_tools.py find_wordlist (поиск + извлечение из tarball), kb_stats, suggest_exploit (разрешение псевдонимов GTFOBins), extract_payloads, фильтрация/объединение wordlist_tool, кластеризация mine_failures, очистка anonymize_report, поиск по фразам search_kb
test_export_debrief_replay.py Пакеты доказательств (сборка/проверка/внесение изменений/добавление файлов/опция включения учётных данных/редактирование), статистика дебрифа + тренды флота, список воспроизведений/Markdown/не-TTY
test_eval_battle.py Метки harness (эвристика + переопределение labels.jsonl), математика матрицы неопределённости, сканирование порогов, воспроизведение реального скорера; математика рейтинга битвы, обнаружение watchdog/tarpit/block, рендеринг отчёта
test_kb_v2_and_intel.py Чтение KB (полные документы, подстрока, неоднозначность), устаревание kb diff, нечёткое сопоставление GTFOBins, зеркало KEV + офлайн-запрос search_cve, мутация wordlist + cewl
test_cli_v210.py Коды выхода/вывод на уровне CLI для всех команд v2.10: KB, pull cve, учётные данные, досье, временная шкала, наблюдение, очистка, правила, политика, поставщики, модуль, уведомления
test_compliance.py Карта соответствия: известные классы, порядок специфичности, нормализация snake_case, резервный вариант, сводки, загрузка вовлечения, команда CLI
test_red_knowledge_graph.py Постоянная память агента: удаление дубликатов с ограничениями + слияние доверия, проверка блокировки полезной нагрузки, запросы CVE/обходов, восстановление коррумпированного JSON, цикл record_finding->check_knowledge
test_infra_and_defense.py Выгрузка вывода (пороги, предварительные просмотры), брандмауэр (валидация перед выполнением, операции с правилами, фильтрация DROP), просмотр логов трафика (добавление/ротация), проверка доступности msf
test_http_session_tools.py Состояние сессии (куки/CSRF/аутентификация), отслеживание лимита скорости (429, Retry-After, изоляция домена), ротация UA, http_request с эмулированным транспортом
test_import_graph.py Защита импорт-графа: каждый импорт suijin.* разрешается в реальный файл, точки входа импортируемы, обрезанные пакеты остаются обрезанными
test_run_commands.py Живая "коробка" выполнения команд: семантика диспетчеризации, каждый обработчик (/state, /note, /kb, /cost, /approvals, /pause и др.), очередь руководств, защищённые сбои, жизненный цикл; очередь одобрения execute_terminal HITL
test_subagents.py Эндпоинты суб-агентов синей команды: путь анализа ИИ, оценка без API на основе реальных исходных файлов, изоляция сбоев пакетом, маршрутизация аномалий, сводки
test_v210_features.py Хранилище учётных данных (обратный путь/внесение изменений/разрушение/редактирование), досье, каналы уведомлений, правила + политика (семантика опции, исключения области, принуждение диспетчеризации), SDK модуля, резервный поставщик, версия навыков, кампания/наблюдение/временная шкала/очистка, крюк реконна
test_kb.py Компиляция KB (FTS5, ограничения), шаблоны путей + заглушки псевдонимов GTFOBins, ошибки без документов, честный статус, повторные попытки загрузки + очистка .part, фильтры search_kb, контроль каталога
test_workspace_layout.py Каноническое слияние рабочей области + миграция символических ссылок, изоляция песочницы, пути независимые от текущей директории
test_dispatch.py Маршрутизация инструментов, ограничители, операции с файлами, парсинг CVSS/KEV, задания
test_state_helpers.py Модели состояния, парсинг, продуктивность, ограничители, маршрутизация поставщиков
test_blue_team.py Движок ИИ, поток, скорер, дезинформация, брандмауэр, SOC, тарпит
test_e2e_blue.py Интеграция живой лаборатории: реальная SQL-инъекция → обнаружение → задержка тарпита
test_graph.py, test_integration.py, test_core.py, test_tools.py, test_agent_helpers.py, test_ai_calls.py Машина состояний, пайплайны, ограничители, файловая система рабочей области, загрузка конфигурации
CI: GitHub Actions матрица (Python 3.10/3.11/3.12) — pytest + coverage,
pyright, ruff, pip-audit.

Структура проекта

suijin-security/
├── suijin/                  Python package (the whole backend)
│   ├── cli.py               CLI entry — doctor, selftest, status, pull kb, ...
│   ├── main.py              Rich TUI launcher
│   ├── kb.py                Knowledge base: download, index, FTS5 compile
│   ├── core/                Red + blue engines, config models, state
│   │   ├── redteamer.py     LangGraph red-team driver
│   │   ├── blueteamer.py    Blue-team driver
│   │   └── blue/            Detectors, deception, SOC, subagents, TUI feed
│   ├── tools/               dispatch.py hub + tool modules
│   │   ├── providers.py     LLM providers (Z.ai coding/paas, DeepSeek, ...)
│   │   └── workspace.py     Canonical workspace anchor + layout repair
│   ├── infra/               Job runner, output offload, workspace FS
│   ├── modules/             Module-pack loader
│   ├── prompts/             System prompts + tool registry
│   ├── skills/              Agent-editable skill files
│   ├── nodes/               LangGraph nodes (think, execute, initialize)
│   ├── lab/                 8 deliberately vulnerable Flask apps
│   ├── tests/               500 offline tests
│   ├── kb.sqlite3           Compiled KB (gitignored — build with pull kb)
│   └── kb_cache/            Downloaded tarballs (gitignored)
├── Modules/                 Module packs (Tools/ + Mods/), 49 packs, 93 tools
├── suijin_agent/            THE agent workspace (see Agent Workspace)
├── docs/adr/                Architecture decision records
├── install.sh               One-command installer
├── Dockerfile, docker-compose.yml
├── CHANGELOG.md, CONTRIBUTING.md, SECURITY.md
└── README.md

Переносимость: все пути разрешаются через Path(__file__).resolve().parent — переименовывайте или перемещайте папку проекта свободно. Требования: suijin/ и Modules/ должны находиться на одном уровне; suijin_agent/ — в корне проекта (suijin/suijin_agent — символическая ссылка, автоматически восстанавливается при запуске).


Архитектура — Suijin OS

См. ARCHITECTURE.md — руководство по ОС: подсистемы ядра, последовательность загрузки, иерархическая модель и шаблон модуля (одна папка, один манифест, одна точка входа).

Дорожная карта (завершена)

Suijin перестраивается как модульная операционная система для автоматизации безопасности — та же функциональность, тот же интерфейс, те же команды везде; внутренности становятся сменными модулями. Аналогия: ядро + системные пакеты + встроенные приложения + устанавливаемое сообществом ПО.

Дизайн (зафиксирован)

Слой Описание Форма
Ядро 12 подсистем только из стандартной библиотеки: контракты (протоколы модулей/инструментов), контекст ("таблица системных вызовов", передаваемая каждому модулю), события (pub/sub вместо кросс-импортов), реестр (парсинг манифестов, граф зависимостей DAG, иерархии), контроллер (boot() — анализ сцены загрузки + API управления), задания, VFS (контрольный пункт на границе файлов), безопасность (декларируемые разрешения, принудительно применяемые один раз), конфигурация (слоистое слияние), мониторинг состояния (отчёт о загрузке), журнал (кольцевой лог с ротацией), ошибки suijin/kernel/
Rust-ядро Крейт suijin-core (PyO3/maturin, ABI3-колёса): resolve_dag + check_paths — единственные функции с чистым вводом/выводом. Чисто-питоновские реализации остаются постоянными тестовыми оракулами; pipx install suijin никогда не требует Rust-среды native/suijin-core/
Основной уровень Не может быть отключён (загрузка абортируется без них): platform (рабочая область/конфиг/время выполнения), tools (реестр + диспетчеризация), agent (граф/узлы/память), console (CLI/TUIs/UI/MCP — меню и глаголы регистрируются через хуки, поэтому отключённые модули действительно скрывают свои пункты меню) suijin/modules/
Рекомендуемый уровень Включённые по умолчанию, но отключаемые по отдельности: providers, redteam, blueteam, knowledge, ops + 49 наборов инструментов (конвертированные, с пространством имён — перекрытие встроенного требует явного флага overrides) в составе пакета
Установленный уровень Модули сообщества в ~/.suijin/modules/, обнаруживаемые при каждой загрузке; зависимости отображаются с точными командами pip (--with-deps — опция по желанию); сломанные модули изолируются — загрузка продолжается ~/.suijin/modules/
Менеджер модулей Текстовый TUI (suijin module): иерархический список, детали по модулю (зависимости / инструменты, разрешения, последняя загрузка), включение/отключение, установка/удаление, отчёт о загрузке. Тихая загрузка: молчит, если всё здорово Фаза 4

Форма модуля: одна папка, plugin.json (id, version, tier, requires, provides, permissions, overrides), модуль входа, реализующий register(ctx) / start(ctx) / stop(ctx). Вложенные физические модули (agent/graph, agent/nodes…) разрешаются как один плоский граф зависимостей. suijin module init генерирует шаблон соответствующего модуля.

Статус

Фаза Область Статус
0 Декуплирование на месте: разделение "божественного импорта", загрузчик с "раздвоением мозга", побочные эффекты на время импорта, одна регистрация заданий, шов сервисов (инверсии = 0), ленивые mkdir [выполнено] завершено
1 Ядро — ВСЕ 12 подсистем живы (контракты, события, контекст, реестр, контроллер, задания, VFS, безопасность, конфигурация, мониторинг, журнал, ошибки), тест POST полной загрузки, линтер чистоты [выполнено] завершено
1.5 Rust-ядро (resolve_dag + check_paths) [выполнено] завершено — затем УДАЛЕНО в v4.1: чистая реализация была байт-в-байт идентична и быстрее в доставке; kernel/native.py — единственное ядро сейчас
2 Основной уровень на ядре [выполнено] завершено
3 Рекомендуемый уровень + конвертированные пакеты [выполнено] завершено (49 устаревших пакетов включены в v4.1; +35 новых в v4.1.0, +39 в v4.3.0 — всего 123)
4 TUI-менеджер модулей + система установки [выполнено] завершено
5 Линтер границ, блокирующийся в CI · ARCHITECTURE.md (руководство по ОС) · пакеты самодостаточны (нет швов) [выполнено] завершено
6 Завершение модуляризации: чистый разрыв (шины удалены), всё — модуль, консолидация выходов, аудит-трейл v2, ступени навыков/дополнений, 4 пути установки [выполнено] завершено (v4.1–v4.3)

Каждая фаза блокируется: весь набор тестов зелёный, ruff чист, поведение проверено. Старые пути импорта были удалены без шимов в чистом разрыве v4.1 — см. CHANGELOG.

Устранение неисправностей

Симптом Исправление
ModuleNotFoundError: suijin Запустите из корня репозитория или используйте install.sh.
Интерфейс завершает работу сразу Запустите в реальном терминале (без перенаправления потоков); см. suijin doctor.
Вызовы инструментов возвращают Invalid Tool Проверьте suijin modules — в манифесте пакета или его бинарном файле могут отсутствовать данные (suijin tools отмечает пробелы).
Отсутствует nmap/gobuster brew install nmap gobuster feroxbuster john / apt install ...
Нет API-ключа Режим эвристики работает без него. Добавьте suijin/.env (ZAI_API_KEY=...) и проверьте с помощью suijin env.
Z.ai возвращает 403 Несоответствие конечной точки/оплаты — установите zai_endpoint в coding (тариф) или paas (оплата по факту). См. Поставщики LLM.
Порт 5906 занят lsof -i :5906; другие лаборатории используют 5900–5905 / 5700 (suijin labs).
База знаний (KB) не индексируется suijin pull kb --status — если не построена, выполните suijin pull kb.

Часто задаваемые вопросы (FAQ): Можно ли запустить без LLM? Да — эвристики, детекторы и диспетчеризация инструментов работают; LLM добавляет логику и качество отчетности. Это законно? Только для систем, которыми вы владеете или имеете письменное разрешение на тестирование.


Глоссарий

Термин Значение
Пакет модулей Самостоятельный набор инструментов (каталог с manifest.json) — поставляется в suijin/modules/ или устанавливается пользователем в ~/.suijin/modules/
База знаний (KB) Офлайн-индекс полнотекстового поиска (FTS5) для HackTricks/GTFOBins и т.д., создаваемый командой suijin pull kb
Граф знаний Постоянное хранилище находок, флагов, исправлений и профилей атакующих, разделяемое обеими командами
Супервайзер Бесплатный детектор шаблонов, наблюдающий за красной командой на наличие циклов и пропусков
Подчиненный агент Вспомогательный агент, создаваемый для выполнения задачи в ограниченной области (максимум 3 параллельных)
Тарпит Защита, замедляющая атакующего за счет реальных задержек ответа
Канарейка Приманка-артефакт, которая оповещает при доступе
Лестница ответов Политика эскалации синей команды, ключевая по оценке детектора
Сессия Одна операция красной или синей команды, от начала до отчета

Вклад и благодарности

Вклад приветствуется — см. CONTRIBUTING.md. Уязвимости в самом Suijin сообщайте через SECURITY.md. Решения документируются в docs/adr/.

Создан William Jiang (руководитель разработки) и Roland Poon (дизайн и управление проектом). Вдохновлен RedAmon и Sakana Fugu. Лицензия MIT.

Войдите, чтобы оставить комментарий