Безопасность

Hermes Agent реализует многоуровневую модель безопасности, которая защищает хост-систему от случайных или вредоносных действий. Семь слоёв обороны — от авторизации пользователей до контейнерной изоляции — обеспечивают безопасную работу агента как в интерактивном CLI, так и в мессенджерах.

Модель безопасности: обзор

Архитектура безопасности Hermes включает семь уровней защиты:

  • Авторизация пользователей — контроль того, кто может взаимодействовать с агентом (списки допуска, привязка через DM)
  • Одобрение опасных команд — человек в цикле для деструктивных операций
  • Контейнерная изоляция — песочница Docker/Singularity/Modal с ужесточёнными настройками
  • Фильтрация учётных данных MCP — изоляция переменных окружения для подпроцессов
  • Сканирование контекстных файлов — обнаружение prompt-инъекций в файлах проекта
  • Изоляция сессий — сессии не имеют доступа к данным или состоянию друг друга
  • Санитизация ввода — валидация параметров рабочих каталогов для предотвращения shell-инъекций

Одобрение команд

Перед выполнением каждой команды Hermes проверяет её по списку опасных паттернов. При обнаружении совпадения требуется явное подтверждение пользователя.

Режимы одобрения

Система поддерживает три режима, настраиваемых через approvals.mode в ~/.hermes/config.yaml:

  • manual (по умолчанию) — всегда запрашивает подтверждение для опасных команд
  • smart — использует вспомогательную LLM для оценки риска; безопасные команды одобряются автоматически, опасные — отклоняются, спорные — передаются пользователю
  • off — отключает все проверки (эквивалентно --yolo)
# Настройка режима одобрения
hermes config set approvals.mode manual   # всегда спрашивать (по умолчанию)
hermes config set approvals.mode smart    # LLM решает (рекомендуется)
hermes config set approvals.mode off      # пропускать всё (не рекомендуется)

YOLO-режим

YOLO-режим обходит все проверки одобрения для текущей сессии. Его можно активировать несколькими способами:

# Флаг при запуске
hermes --yolo chat -q "установи nginx"

# Переменная окружения
export HERMES_YOLO_MODE=1

# Slash-команда в сессии
/yolo

Важно: YOLO / approvals.mode: off не отключает маскирование секретов (security.redact_secrets). Это независимые механизмы.

Жёсткий блоклист

Некоторые команды настолько катастрофичны, что Hermes отказывается их выполнять при любых настройках — даже в YOLO-режиме. К ним относятся:

  • rm -rf / и его варианты — уничтожение файловой системы
  • Fork-бомбы вида :(){ :|:& };
  • Форматирование смонтированного корневого устройства
  • dd if=/dev/zero of=/dev/sd* — обнуление физического диска
  • Пайпинг непроверенных URL в sh

Маскирование секретов и PII

Hermes может автоматически скрывать конфиденциальные данные из вывода инструментов и сообщений мессенджера. Это два независимых механизма.

Маскирование секретов в выводе (security.redact_secrets)

По умолчанию вывод инструментов (терминал, read_file, веб-контент, субагенты) проходит без изменений. При включении Hermes автоматически маскирует строки, похожие на API-ключи, токены и пароли, до того, как они попадут в контекст разговора и логи.

# Включить маскирование секретов
hermes config set security.redact_secrets true

# Отключить
hermes config set security.redact_secrets false

Требуется перезапуск. Опция security.redact_secrets считывается при импорте модуля — переключение в рамках сессии не вступит в силу. Это сделано намеренно — агент не может отключить маскирование для себя во время выполнения задачи.

Маскирование PII в gateway (privacy.redact_pii)

Отдельно от секретов, при работе через мессенджеры gateway может хешировать идентификаторы пользователей и удалять номера телефонов из контекста сессии до передачи модели:

# Включить хеширование PII
hermes config set privacy.redact_pii true

# Отключить (по умолчанию)
hermes config set privacy.redact_pii false

Сравнение механизмов

Параметр Что делает Где работает По умолчанию
security.redact_secrets Маскирует API-ключи и токены Все инструменты (CLI + gateway) false
privacy.redact_pii Хеширует user ID, убирает телефоны Только gateway false
approvals.mode Контролирует одобрение команд CLI + gateway manual

Сканирование безопасности Tirith

Tirith — встроенный сканер безопасности, который анализирует файлы проекта на предмет уязвимостей и потенциальных prompt-инъекций перед тем, как агент начнёт их обрабатывать.

Включение Tirith

# Включить сканер
hermes config set security.tirith_enabled true

Параметры Tirith

  • confusable_text — обнаружение символов, которые выглядят как ASCII, но являются Unicode (homoglyph-атаки). Например, кириллическая «а» вместо латинской «a» в именах файлов или URL.
  • pipe_to_interpreter — обнаружение попыток направить вывод напрямую в интерпретатор (curl ... | python, wget | bash). Заблокировано в жёстком блоклисте, но Tirith предупреждает и о менее очевидных формах.
# Конфигурация Tirith
hermes config set security.tirith_enabled true
hermes config set security.confusable_text true
hermes config set security.pipe_to_interpreter true

Блокировка веб-сайтов

Hermes может блокировать доступ к определённым доменам через браузерный инструмент и web_extract. Полезно для предотвращения утечки данных на вредоносные ресурсы.

# Добавить домен в блоклист
hermes config set security.website_blocklist "evil.com,tracking.example.com"

Блокировка применяется ко всем инструментам, работающим с URL: web_extract, web_search, browser_navigate.

Shell hooks allowlist

Некоторые интеграции с shell-хуками требуют явного разрешения перед запуском. Управление через файл ~/.hermes/shell-hooks-allowlist.json.

При первом обращении к хуку Hermes интерактивно запрашивает разрешение. Решение сохраняется в allowlist-файл и повторно не спрашивается.

# Пример структуры файла
{
  "pre-commit": true,
  "post-merge": true,
  "pre-push": false
}

Для отключения конкретного хука установите значение false или удалите запись из файла.

Авторизация в мессенджерах

При работе через шлюз мессенджеров Hermes контролирует доступ через многоуровневую систему авторизации:

  • Флаг разрешения всех пользователей платформы (например, DISCORD_ALLOW_ALL_USERS=true)
  • Список одобренных DM-парингов
  • Списки допуска для конкретных платформ (TELEGRAM_ALLOWED_USERS)
  • Глобальный список допуска

Контейнерная изоляция

При запуске в бэкендах Docker, Singularity, Modal, Daytona или Vercel Sandbox проверки опасных команд пропускаются, поскольку сам контейнер является границей безопасности. Деструктивные команды внутри контейнера не могут навредить хост-системе.

Checkpoints и Rollback: откат изменений

Hermes умеет автоматически создавать снимки проекта перед деструктивными операциями и восстанавливать одной командой. Функция включается опционально через --checkpoints или в конфиге checkpoints.enabled: true.

Что создаёт чекпоинт

Снимки создаются автоматически перед:

  • Операциями с файлами — write_file и patch
  • Деструктивными терминальными командами — rm, mv, sed -i, dd, перенаправления вывода и git reset

Команды отката

  • /rollback — список всех чекпоинтов со статистикой изменений
  • /rollback <N> — восстановление к чекпоинту N
  • /rollback diff <N> — предпросмотр изменений
  • /rollback <N> <файл> — восстановление одного файла

Гарантии безопасности

  • Если git не найден — чекпоинты отключаются прозрачно
  • Директории с более чем 50 000 файлов пропускаются
  • Файлы larger max_file_size_mb (по умолчанию 10 МБ) исключаются
  • Общий лимит хранилища — max_total_size_mb (по умолчанию 500 МБ)
  • Автоматическая очистка auto_prune удаляет устаревшие и осиротевшие снимки

Таймаут одобрения

При появлении запроса на подтверждение у пользователя есть настраиваемое время на ответ (по умолчанию 60 секунд). Если ответ не поступил — команда отклоняется (стратегия fail-closed).

Сводка настроек безопасности

Параметр Описание Значение по умолчанию
approvals.mode Режим одобрения команд manual
security.redact_secrets Маскирование API-ключей в выводе false
privacy.redact_pii Хеширование user ID и телефонов false
security.tirith_enabled Сканер безопасности Tirith false
security.confusable_text Обнаружение homoglyph-атак false
security.pipe_to_interpreter Блокировка pipe в интерпретатор false
security.website_blocklist Список заблокированных доменов
checkpoints.enabled Система чекпоинтов для отката false