# Безопасность ## Обзор Neotask разработан с архитектурой, ориентированной на безопасность. Gateway по умолчанию привязывается к localhost, все чувствительные данные шифруются в состоянии покоя, а выполнение команд агентов может быть изолировано в контейнерах-sandbox. ## Сетевая безопасность ### Только loopback по умолчанию Gateway прослушивает только `127.0.0.1` (localhost), если только вы явно не измените режим привязки. По умолчанию нет внешнего сетевого доступа. ### Аутентификация Все WebSocket-соединения требуют аутентификации: - **Аутентификация по токену**, Bearer-токен (UUID или пользовательская строка) - **Аутентификация по паролю**, пароль, хешированный bcrypt - **Доверенный прокси**, предварительно аутентифицированные заголовки от обратных прокси - **Локальное доверие**, loopback-соединения неявно доверенные ### Безопасность удалённого доступа Для удалённого доступа рекомендуемый подход, **Tailscale VPN** или **SSH-туннелирование**, никогда не открывайте Gateway напрямую в интернет. ## Сопряжение устройств ### Как работает сопряжение Каждый клиент, подключающийся к Gateway, должен быть сопряжён: 1. Устройство представляет свою идентичность (отпечаток + публичный ключ) 2. Gateway выдаёт запрос сопряжения (nonce) 3. Устройство подписывает nonce своим приватным ключом 4. Вы подтверждаете устройство через UI 5. Gateway выдаёт токен устройства для будущих соединений ### Модель доверия - **Локальные устройства** (loopback) автоматически одобряются для удобства - **Нелокальные устройства** требуют явного подтверждения - Токены устройств хранятся локально и повторно используются при переподключении - Устройства можно отозвать в любое время ## Шифрование ### Данные в состоянии покоя - **AES-256-GCM**, все токены, секреты и ключи API шифруются в состоянии покоя - **Ключи, производные от машины**, ключи шифрования производятся через scrypt из идентичности устройства - **Нет хранения в открытом виде**, токены никогда не хранятся в открытом виде ### Данные в транзите - **TLS**, HTTPS для API-коммуникации - **WSS**, безопасный WebSocket для подключений к Gateway (при использовании Tailscale Serve или обратного прокси) - **HMAC-подписание**, целостность запросов с nonce и меткой времени ## Изоляция в sandbox ### Изоляция на основе Docker Выполнение команд агентов может быть изолировано в Docker-контейнерах: - **Профили на уровне агента**, каждый агент может иметь собственную конфигурацию sandbox - **Ограничения ресурсов**, настраиваемые лимиты CPU, памяти и таймаутов - **Сетевая изоляция**, контейнеры могут быть изолированы от сети - **Ограничение файловой системы**, агенты получают доступ только к своему рабочему пространству - **Пользовательские образы**, использование предсобранных образов с установленными конкретными инструментами ### Области действия sandbox | Область | Описание | |-------|-------------| | **На сессию** | Новый контейнер для каждой сессии | | **На агента** | Постоянный контейнер для каждого агента | | **Общий** | Общий контейнер для всех агентов | ### Доступ к рабочему пространству Агенты в sandbox могут получать доступ к своей директории рабочего пространства (смонтированной в контейнер), но не могут получать доступ к файловой системе хоста за пределами своего рабочего пространства. ## Подтверждение выполнения команд Управляйте тем, какие команды агенты могут выполнять на узлах и хосте Gateway: ### Режимы | Режим | Описание | |------|-------------| | **Allowlist** | Выполняются только предварительно одобренные команды | | **Ask** | Неизвестные команды запрашивают подтверждение пользователя | | **Full** | Без ограничений (используйте с осторожностью) | ### Конфигурация на уровне узла Каждый узел (macOS, безголовой хост) имеет собственную конфигурацию подтверждения exec, хранящуюся локально. Вы можете разрешить конкретные бинарные файлы (например, `/usr/bin/docker`, `/usr/local/bin/terraform`), заблокировав всё остальное. ## Расширенный режим Некоторые операции требуют выполнения непосредственно на хосте Gateway (не в sandbox). Расширенный режим: - Ограничен явным разрешением в конфигурации агента - Доступен только на хосте Gateway - Отключён по умолчанию - Подлежит аудиту через логирование ## Аудит безопасности Встроенный аудит безопасности проверяет: - Права доступа к файлам конфигурации (должны быть 600) - Права доступа к файлам сессий - Версию Node.js (патчи безопасности) - Обнаружение секретов в открытом виде - Валидацию белого списка плагинов - Аудит открытых сетевых интерфейсов - Полноту конфигурации аутентификации Аудит может автоматически исправить многие проблемы, если ему дать разрешение. ## Лучшие практики 1. **Держите Gateway на loopback**, используйте Tailscale или SSH для удалённого доступа 2. **Включите изоляцию в sandbox**, запускайте команды агентов в Docker-контейнерах 3. **Используйте белые списки exec**, ограничивайте команды, которые агенты могут запускать на узлах 4. **Задайте токены аутентификации**, всегда настраивайте аутентификацию по токену, даже для loopback 5. **Проверяйте разрешения агентов**, там, где возможно, используйте минимальные профили инструментов 6. **Обновляйте Neotask**, обновления включают патчи безопасности 7. **Регулярно проводите аудит**, запускайте аудиты безопасности для выявления неправильных настроек 8. **Ограничивайте загрузку плагинов**, устанавливайте только доверенные плагины