Перейти к содержимому

Песочницы для ИИ-агентов: запускаем код изолированно

Автономный кодинг-агент может читать ваши файлы, запускать команды в терминале и подключаться к сети. 26 августа 2026 года Johann Rehberger показал, что агент в auto mode можно заставить выполнить произвольный код с вероятностью до 80% — а модуль безопасности сам блокировал попытку агента исправить ситуацию (embracethered.com). Simon Willison подвёл итог коротко:

«Run unattended coding agents in a container, VM or OS sandbox. Restrict network egress. Monitor your agents. Do not expose home directories, SSH keys, cloud credentials, … to the agent runtime.»

«Запускайте автономных кодинг-агентов в контейнере, виртуальной машине или песочнице ОС. Ограничивайте сетевой выход. Следите за агентами. Не открывайте домашние каталоги, SSH-ключи, облачные credential’ы … среде выполнения агента.»

— Simon Willison, simonwillison.net (27.08.2026)

В этой статье — практический гайд по уровням изоляции: что ограничивать, какие песочницы доступны, как настроить минимальную защиту для Claude Code, Codex и OpenCode.

Что изолировать и зачем

Кодинг-агент — это программа, которая выполняет произвольные команды. Без изоляции она имеет доступ ко всему, что видит ваш пользователь:

Ресурс Риск при отсутствии изоляции
Файловая система Чтение SSH-ключей, credential’ов, .env-файлов, .gitconfig
Сеть (egress) Отправка данных на внешний сервер, скачивание вредоносного кода
CPU / RAM Бесконечный цикл while True, исчерпание памяти
Процессы Запуск дочерних процессов за пределами песочницы
Git Внедрение вредоносных коммитов в репозиторий
MCP-серверы Перехват вызовов инструментов, несанкционированные действия

Песочница ограничивает один или несколько из этих ресурсов так, что даже если агент будет скомпрометирован через prompt injection или враждебный код в репозитории, ущерб будет локализован.

Уровни изоляции: от настроек до отдельного ядра

Существует несколько подходов, и они образуют нарастающую лестницу. Чем выше уровень — тем сложнее настройка, но тем надёжнее защита.

Уровни изоляции кодинг-агентов
Уровни изоляции кодинг-агентов: от разрешений модели до аппаратно-изолированных VM. Авторская схема

Уровень 1: Разрешения модели и флаги CLI

Минимальная защита — не разрешать агенту выполнять опасные действия на уровне модели.

Claude Code --restricted (v2.1.248, 27.08.2026): убирает встроенные инструменты для выполнения команд и кода, а также WebFetch. Файловые инструменты работают только в пределах рабочей директории. Флаг bypassPermissions блокируется. Файлы настроек пользователя, проекта и локальные игнорируются (changelog).

claude --restricted

Codex CLI: флаг --full-auto включает автономный режим, но без внешней песочницы агент всё равно имеет доступ к файловой системе и сети.

OpenCode: работает в TUI-режиме, каждая команда запрашивает подтверждение по умолчанию.

Этот уровень защищает от случайных ошибок, но не от целенаправленных атак. Классификатор auto mode в Claude Code блокировал cleanup-команду агента, который обнаружил компрометацию (Rehberger):

«The safety mechanism itself can become part of the failure.»

«Механизм безопасности сам становится частью проблемы.»

Уровень 2: Встроенная песочница Claude Code (Seatbelt / Bubblewrap)

Claude Code включает песочницу Bash-команд на уровне операционной системы. В macOS используется фреймворк Seatbelt, на Linux и WSL2 — Bubblewrap (docs.claude.com).

Документация Claude Code: sandboxing
Официальная документация встроенной песочницы Claude Code: Seatbelt на macOS, Bubblewrap на Linux/WSL2. Источник: docs.claude.com.

Что ограничивает:
— Файловая система: по умолчанию доступна только рабочая директория и /tmp
— Сеть: фильтрация по доменам (первый запрос к новому домену требует подтверждения)
— Каждая Bash-команда и дочерние процессы изолированы

Что НЕ ограничивает: встроенные файловые инструменты (Read, Edit, Write), MCP-серверы, хуки — они работают на хосте.

Запуск:

/sandbox

Команда открывает панель песочницы с выбором режима: auto-allow (команды в песочнице одобряются автоматически) или regular permissions (с подтверждением).

Для более широкой изоляции Claude Code предлагает sandbox runtime (@anthropic-ai/sandbox-runtime) — оборачивает весь процесс Claude Code, включая файловые инструменты, MCP и хуки, в одну границу. Это beta-релиз (docs.claude.com):

npx @anthropic-ai/sandbox-runtime claude

Уровень 3: Docker-контейнеры и Docker Sandboxes

Контейнер изолирует весь стек: файловую систему, сеть, процессы. Классический подход для автономных агентов.

Обычный Docker-контейнер:

docker run --rm -it \
  --network=none \
  --read-only \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  --cpus=2 --memory=4g \
  -v $(pwd):/workspace \
  claude-code-image

Ключевые флаги:
--network=none — полная изоляция сети (или --network=bridge с iptables-правилами для допуска API)
--read-only — файловая система доступна только по mount-точкам
--cap-drop=ALL — отбрасываются Linux- capabilities
--security-opt=no-new-privileges — запрет повышения привилегий
--cpus, --memory — ограничения ресурсов

Docker Sandboxes (от Docker Inc., docs.docker.com) — бесплатный продукт, использующий microVM вместо контейнеров. Не требует Docker Desktop. Команда sbx создаёт изолированную среду с собственным Docker-демоном. Micah Lee описал полную схему настройки (micahflee.com):

  1. Отдельный ключ подписи коммитов (agent-only signing key)
  2. Ограниченный GitHub PAT с доступом к одному репозиторию
  3. Изолированный SSH-агент, передающий только ключ для подписи
  4. Агент работает в sbx-песочнице, коммиты подписаны и помечены (agent) в имени автора

Уровень 4: Виртуальные машины

VM дают полную изоляцию на уровне ядра: свой kernel, свои процесс, своя сеть. Это самый надёжный уровень, но и самый тяжёлый.

Типовые варианты:

Технология Cold start Warm exec Изоляция Подходит для
QEMU/KVM 5–30 с 10–50 мс Ядро + гипервизор Серверы, CI/CD
VirtualBox 10–45 с 20–80 мс Ядро + гипервизор Локальная разработка
Firecracker (microVM) 0.125–1 с <10 мс Ядро + hardware isolation Serverless, высокая нагрузка
smolvm 0.6–1.5 с ~50 мс Ядро + hardware isolation Быстрый запуск ненадёжного кода

smolvm — hardware-isolated VM для запуска ненадёжного Python и JavaScript. Simon Willison протестировал smolvm 1.8.3: offline-образы, ограничения CPU/RAM, read-only mount входных данных, writable mount для выходных, guest-enforced timeouts (simonwillison.net). Подробный разбор — в отдельном кейсе про smolvm.

Docker Sandboxes (microVM от Docker) — промежуточный вариант между контейнером и полноценной VM: собственное ядро, но с workspace sync и удобным CLI (docs.claude.com).

Уровень 5: Claude Code на вебе

Claude Code на вебе (claude.ai/code) запускает каждую сессию в управляемой Anthropic виртуальной машине. Сетевой прокси фильтрует исходящий трафик, GitHub-токен хранится за пределами песочницы (docs.claude.com). Не требует локальной инфраструктуры, но требует подписку Claude.

Сравнение подходов

Подход Что изолирует Нужен Docker Простота настройки Уровень защиты
Флаги модели (--restricted) Инструменты модели Нет Минимальный Низкий
Встроенная песочница Claude Code Bash-команды Нет Низкая Средний
Sandbox runtime Весь процесс Claude Code Нет Низкая Средний–высокий
Dev Container Полная среда разработки Да Средняя Высокий
Docker-контейнер (кастомный) Полная среда разработки Да Средняя–высокая Высокий
Docker Sandboxes (microVM) Ядро + среда Нет (standalone) Средняя Очень высокий
Полноценная VM (QEMU/KVM) Ядро ОС Нет Высокая Максимальный
Claude Code на вебе Ядро ОС (управляемый) Нет Нулевая Высокий

Что ограничивать: чек-лист настройки песочницы

Что ограничивает песочница
Что ограничивает песочница: ФС, сеть, CPU/RAM, процессы, git. Авторская схема

Независимо от выбранного уровня, вот что нужно настроить:

Файловая система

  • Не монтировать домашний каталог агенту — только проект
  • Запретить запись в .git/hooks, .git/config, .claude/, .mcp.json (sandbox runtime делает это по умолчанию)
  • Использовать read-only mount для входных данных, writable — только для вывода

Сеть

  • Блокировать egress по умолчанию (--network=none в Docker)
  • Разрешить только api.anthropic.com (или другой API-эндпоинт) и необходимый минимум
  • Не разрешать широкие домены (например, github.com — через прокси с TLS-termination)
  • Рассмотреть egress-фильтрацию через iptables для контейнеров

CPU и RAM

  • --cpus=2 --memory=4g — разумные лимиты для кодинг-агента
  • Внутри VM: настроить CPU/RAM limits через гипервизор
  • smolvm: guest-enforced timeouts предотвращают while True

Процессы

  • --cap-drop=ALL + --security-opt=no-new-privileges
  • В VM: PID namespaces, ограничение числа процессов
  • Запрет запуска Docker-сокета изнутри песочницы

Git

  • Отдельный ключ подписи коммитов (по схеме Micah Lee)
  • Ограниченный GitHub PAT с доступом к одному репозиторию
  • В имени автора коммита — пометка (agent)

Минимальные песочницы для каждого агента

Claude Code

Быстрый старт (встроенная песочница):

# Включить песочницу для всех проектов
# ~/.claude/settings.json:
{ "sandbox": { "enabled": true, "failIfUnavailable": true } }

# Или точечно:
/sandbox
# Выбрать auto-allow

Для автономной работы (sandbox runtime):

# Настройка (~/.srt-settings.json):
{
  "filesystem": {
    "allowWrite": ["/Users/you/project"],
    "denyWrite": [".git/hooks", ".git/config", ".claude", ".mcp.json"]
  },
  "network": {
    "allowedDomains": ["api.anthropic.com"]
  }
}

# Запуск:
npx @anthropic-ai/sandbox-runtime claude

Для максимальной изоляции (--dangerously-skip-permissions + контейнер):

docker run --rm -it \
  --network=none \
  --read-only \
  --cap-drop=ALL \
  --cpus=2 --memory=4g \
  -v $(pwd):/workspace \
  -w /workspace \
  claude-code-image \
  claude -p "описание задачи" --dangerously-skip-permissions

На macOS запуск от root с этим флагом запрещён — нужен контейнер как внешняя граница.

Codex CLI

Codex поддерживает --full-auto для автономной работы. Для изоляции:

# Запуск в Docker
docker run --rm -it \
  --network=none \
  -v $(pwd):/workspace \
  -w /workspace \
  codex-image \
  codex --full-auto "описание задачи"

OpenCode

OpenCode работает в режиме TUI с запросом подтверждения каждой команды. Для изоляции используйте dev container или Docker:

docker run --rm -it \
  --network=none \
  -v $(pwd):/workspace \
  -w /workspace \
  opencode-image \
  opencode

Выбор подхода: чек-лист

Ответьте на вопросы и найдите свой уровень:

  1. Агент работает на вашей машине или на сервере?
  2. На вашей → встроенная песочница Claude Code или sandbox runtime (уровень 2–3)
  3. На сервере → Docker/dev container или VM (уровень 3–4)

  4. Вы запускаете агента автономно (без присмотра)?

  5. Да → обязательна внешняя изоляция (контейнер/VM/runtime)
  6. Нет → встроенная песочница достаточна

  7. Какой уровень доверия к коду в репозитории?

  8. Свой код, проверенный → встроенная песочница
  9. Чужой код или зависимости → Docker/VM
  10. Полностью ненадёжный → VM с --network=none

  11. Нужна ли сеть агенту?

  12. Только API-запросы → разрешить api.anthropic.com через прокси
  13. Нет сети → --network=none
  14. Широкий доступ → egress-фильтрация с white list

  15. Сколько ресурсов вы готовы выделить?

  16. Минимум → встроенная песочница
  17. Средне (2–4 CPU, 4–8 GB RAM) → Docker-контейнер
  18. Много (своя среда) → dev container или VM

Российские реалии

При настройке песочницы для агента в России есть особенности.

Docker в России

Docker Engine (Apache 2.0) доступен бесплатно и без ограничений. Docker Hub периодически блокирует российские IP-адреса (май 2024, начало 2026) — для скачивания образов используйте зеркала:

  • cr.yandex/mirror — Яндекс Container Registry
  • dockerhub.timeweb.cloud — зеркало TimeWeb
  • registry.sel.cloud — Selectel Container Registry
  • dockerhub1.beget.com — зеркало Beget

Документация по обходу: tproger.ru.

Docker Desktop для организаций с выручкой >$10M требует лицензии (docker.com/pricing). Для личного использования и малого бизнеса — бесплатно, но продажи в Россию прекращены. Альтернативы: Rancher Desktop (rancherdesktop.io), Podman (podman.io). Отдельная RU-инструкция по замене Docker Desktop в рунете встречается редко и быстро устаревает — проверяйте актуальность на момент публикации.

Claude Code из России

Anthropic не включает Россию в список поддерживаемых стран. Оплата российскими картами (Visa/Mastercard/Mir/UnionPay) не работает — Stripe фильтрует транзакции по BIN-коду.

Рабочие варианты:
— Виртуальные зарубежные карты (Плати по миру, Exnode)
— Прокси-сервисы: МТС Оплата продаёт подписку Claude AI с оплатой через СБП (payment.mts.ru)
— Карты банков соседних стран (Казахстан, Кыргызстан, Турция)

Подробнее: vc.ru, rb.ru.

Виртуальные машины и изоляция

QEMU/KVM, VirtualBox — полностью доступны, открытый исходный код, без ограничений. На российских VPS-провайдерах (TimeWeb, Selectel, reg.ru) KVM-ускорение доступно по умолчанию. RED OS и Astra Linux документируют настройку виртуализации (redos.red-soft.ru).

Рунет: опыт изоляции агентов

Тема песочниц для ИИ-агентов в русскоязычном сегменте освещена:

Честные ограничения

Песочницы — необходимый слой защиты, но не панацея.

Встроенная песочница Claude Code изолирует только Bash-команды. Файловые инструменты, MCP-серверы и хуки работают за пределами песочницы. Если агент может читать файлы — он может передать их содержимое через Bash-команду в разрешённый домен.

Docker-контейнер не изолирует ядро ОС. Утечки ядра (container escape) теоретически возможны при неправильной настройке capabilities. Используйте --cap-drop=ALL и --security-opt=no-new-privileges.

Сетевой фильтр по умолчанию не inspect TLS. Код внутри песочницы может использовать domain fronting для обхода white list. Если критична конфиденциальность — настройте прокси с TLS termination.

Песочница не влияет на отправляемые данные. Промпты и файлы, которые читает Claude Code, передаются в API Anthropic — с песочницей или без неё (docs.claude.com).

Команды outside sandbox. В Claude Code команды, которые не могут работать в песочнице (например, docker или требующие доступа к macOS-приложениям через Apple Events), запускаются за её пределами. Такие команды помечаются «Bash command (unsandboxed)».

Вывод

Изоляция кодинг-агента — не опциональная мера, а необходимый минимум при автономной работе. Rehberger показал, что даже классификатор безопасности может блокировать попытку агента исправить компрометацию. Simon Willison повторяет: контейнер, VM или песочница ОС — это не «если хочется», а «всегда».

Начните с малого — включите встроенную песочницу Claude Code (/sandbox). Для автономных прогонов добавьте sandbox runtime или Docker-контейнер с --network=none. Для ненадёжного кода — VM.

Ссылки и источники

Перелинковка:

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка / 5. Количество оценок:

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

Adblock
detector