Все статьи

White Rabbit — аудитор серверов в Claude Code

5 мин чтения Обновлено 8 сентября 2026
Security AI Claude Code

Я периодически проверяю свой боевой сервер и окружения проектов в разработке. Смотрю настройки SSH, открытые порты, логи входов, обновления пакетов. Данные приходится собирать из нескольких мест, а потом сопоставлять: какой сервис слушает порт, закрывает ли его фаервол, что происходило в логах.

Часть этой работы я перенёс в Claude Code и оформил в плагин White Rabbit. В нём лежат скрипты сбора данных, справочники проверок и инструкции для разбора результатов. Мне хотелось получать отчёт, по которому понятно, что проверять и исправлять в первую очередь.

Исправления плагин предлагает командами для ручного запуска. Сам аудит проходит с включённым хуком, который проверяет Bash-команды и блокирует те, что не разрешены политикой read-only.

Как запустить аудит сервера

После подключения плагина полный аудит запускается из Claude Code:

/wr all user@host

White Rabbit собирает состояние сервера, SSH-логи, веб-логи и список пакетов ОС. Затем сопоставляет находки между источниками и сравнивает их с предыдущим прогоном, если он есть. Результат сохраняется в общий отчёт.

Можно запустить только нужную часть:

КомандаЧто проверяет
/wr server user@hostSSH, фаервол, порты, привилегированные учётные записи, механизмы закрепления и Docker
/wr logs user@hostSSH/auth-логи: перебор паролей и пользователей, успешные входы с подозрительных адресов
/wr web user@hostAccess-логи nginx и Caddy: обращения к чувствительным файлам, сканирование, подозрительные запросы
/wr cve user@hostИзвестные уязвимости установленных пакетов ОС

Команда /wr без аргументов показывает доступные проверки и состояние защитных ограничений. Для аудита нужна отдельная сессия с активным хуком: он ограничивает Bash-команды всей сессии, поэтому обычной разработкой в ней заниматься неудобно. На локальной машине должен быть jq — без него хук блокирует выполнение.

Сбор данных по SSH

На проверяемый сервер не нужно устанавливать агент. Коллекторы используют доступные системные утилиты: ss, journalctl, dpkg или rpm, команды просмотра фаервола. Скрипт передаётся в Bash через SSH. Например, из каталога плагина сбор состояния сервера выглядит так:

ssh user@host 'bash -s' < scripts/collect/server_snapshot.sh

На выходе получается текст с именованными секциями: порты, сервисы, пользователи, настройки SSH и другие данные. С этим форматом дальше работают анализаторы и Claude. Если для части проверки не хватает прав или утилиты, это ограничивает полноту аудита.

На большом access-логе пришлось переделать сбор. На сервере с 1,3 миллиона запросов коллектор накапливал слишком много данных в переменных, и SSH-сессия обрывалась с кодом 255. Теперь веб-коллектор обрабатывает поток и по умолчанию оставляет последние 200 тысяч строк. Если сработало ограничение, он добавляет пометку в отчёт: старые записи не анализировались.

Как блокируются изменения

Я не хотел, чтобы во время проверки сервер заодно начали чинить. Поэтому в White Rabbit есть PreToolUse-хук для Bash: до запуска команды он проверяет запрещённые шаблоны, перенаправления вывода и допустимость команд в пайпе.

Например, rm, chmod, apt install и изменение правил фаервола попадают под запрет. Если хук не может разобрать входные данные или прочитать файлы политики, команда тоже блокируется. Проверка зависимости от jq в hooks/guard.sh выглядит так:

if ! command -v jq >/dev/null 2>&1; then
  echo "White Rabbit guard: jq not found — failing closed (read-only)." >&2
  exit 2
fi

Для локальных скриптов анализа понадобилось отдельное правило. Их нужно разрешать, но одного имени correlate.sh недостаточно: файл с таким именем может лежать где угодно. Хук сверяет полный канонический путь со списком скриптов внутри плагина. Одноимённый файл из другой папки это разрешение не получает.

Хук проверяет команды по правилам и шаблонам. Полноценной песочницей он от этого не становится. Его нужно включить при запуске сессии; само упоминание read-only в промпте ограничений не добавляет.

Как разбираются находки

Мне важно видеть связь между данными из разных источников. Например, ufw status может показывать активный фаервол, а Docker — публиковать порт контейнера наружу. В отчёте сопоставляются настройки фаервола и опубликованные порты, чтобы такое расхождение не потерялось между двумя списками.

Похожая история с логами. Если один IP перебирал SSH-пароли и сканировал веб-приложение, White Rabbit связывает эту активность. Успешный SSH-вход с адреса, замеченного в атаках, получает высокий приоритет. Дальше нужно проверить пользователя, время входа и саму сессию: одного совпадения IP недостаточно, чтобы объявить сервер взломанным.

Для пакетов ОС анализатор ищет CVE через OSV.dev. Приоритет учитывает CISA KEV — каталог уязвимостей с известной эксплуатацией — и EPSS, оценку вероятности эксплуатации. Сейчас в этот отчёт входят только находки, для которых уже доступно исправление. Уязвимости без патча такой список не покрывает. Нерелевантную находку можно подавить через VEX с обоснованием.

При повторном аудите находки помечаются как [NEW], [UNCHANGED] или [RESOLVED]. Так проще проверить результат исправлений и заметить новые проблемы.

Добавление проверок

Порядок аудита описан в skills/, справочники лежат в knowledge/, скрипты сбора — в scripts/collect/. Анализаторы в scripts/analyze/ обрабатывают уже собранные данные локально.

Если нужные данные уже есть в отчёте коллектора, новую проверку можно описать в markdown: что искать, с чем сопоставлять, какой риск отметить и что предложить для исправления. Так устроена, например, проверка опубликованных Docker-портов в knowledge/checks/docker.md. Если данных не хватает, придётся дополнить коллектор.

Ограничения

Сборщики, анализаторы и хук проверяются поведенческими тестами на подготовленных данных. Интерпретация Claude зависит от модели: она может пропустить связь между событиями или переоценить находку. В отчёте мне нужны исходные факты, чтобы можно было проверить её вывод.

Логи и конфиги при этом тоже недоверенный ввод. В HTTP-запросе может оказаться текст с инструкцией для модели. Плейбуки требуют воспринимать его как данные, но это не даёт гарантии защиты от prompt injection. Данные, переданные Claude для разбора, обрабатываются сервисом модели — это нужно учитывать при аудите клиентских серверов.

Сейчас White Rabbit закрывает разовый аудит настроек сервера, логов и CVE пакетов ОС. Проверка исходников и зависимостей приложения пока в планах. Между запусками он сервер не наблюдает, а предложенные исправления я проверяю и применяю отдельно.

Репозиторий: github.com/IvanShishkin/white-rabbit.