Модель не является границей безопасности
System prompt объясняет правила, но не обеспечивает изоляцию. Агент читает внешние документы, страницы и тикеты, где может встретить prompt injection; он также способен ошибиться в команде. Поэтому разрешение должно проверяться исполняющим слоем независимо от текста модели.
Модель угроз
Зафиксируйте активы и каналы: секреты, исходный код, пользовательские файлы, внутренняя сеть, cloud metadata, package registries и внешние API. Рассмотрите чтение чужих данных, изменение файлов, эксфильтрацию через DNS/HTTP, fork bomb, майнинг, загрузку вредоносного пакета и обход approval через другой инструмент.
Одноразовое окружение
Создавайте sandbox на задание или короткую сессию из известного immutable image. После выполнения уничтожайте filesystem и процессы. Не монтируйте Docker socket, домашний каталог хоста и общие credentials. Root внутри контейнера без корректной границы runtime всё ещё может быть опасен.
Файловая система и данные
Корень — read-only, рабочая папка — отдельный volume с лимитом размера. Входные файлы копируются явно, результат выгружается после проверки типа и размера. Пути нормализуются до policy check, symlink и path traversal запрещаются. Чувствительные наборы не смешиваются между tenants.
Сеть deny by default
Отключите исходящую сеть по умолчанию. Если workflow требует доступ, разрешайте конкретные hosts, протоколы и методы через egress proxy; блокируйте private ranges, metadata endpoints и произвольный DNS. Прокси добавляет identity задания, rate limits, журнал и фильтрацию ответа.
Секреты через брокер полномочий
Не показывайте модели постоянный API key. Агент просит capability: «прочитать issue 123» или «создать черновик письма». Брокер проверяет tenant, scope, approval и бюджет, затем выполняет действие сам либо выдаёт короткоживущий token. Секрет не попадает в prompt, stdout и артефакты.
Лимиты и аварийная остановка
Ограничьте wall-clock time, CPU, RAM, число процессов, размер диска, output bytes, сетевые запросы и стоимость внешних вызовов. У каждого задания есть kill switch. Таймаут процесса не заменяет отмену дочерних процессов и отзыв временных credentials.
Проверка и rollout
Создайте adversarial набор: команды чтения соседних каталогов, запрос metadata endpoint, архив с symlink, бесконечный цикл и документ с инструкцией украсть секрет. Запускайте новые images и policies на canary, версионируйте их вместе с workflow и сохраняйте причину каждого deny.
Контейнер, microVM или удалённый runner
Контейнер быстро запускается и подходит низкорисковому коду при жёсткой конфигурации. MicroVM усиливает границу ядра ценой старта и эксплуатации. Удалённый специализированный runner удобен для браузера или сборок. Выбор делайте по последствиям побега, недоверенности кода и требуемым устройствам, а не по одному benchmark.
| Контур | Плюс | Цена |
|---|---|---|
| Container | быстрый старт | общее ядро |
| MicroVM | сильнее изоляция | сложнее pool |
| Remote runner | спецсреда | сеть и доверие |
Supply chain внутри песочницы
Запрет доступа к хосту не защищает от вредного dependency. Фиксируйте версии и hashes, используйте внутренний proxy registry, сканируйте image и создавайте SBOM. Динамическая установка пакета требует отдельного разрешения; имя пакета от модели нельзя автоматически считать доверенным.
Артефакты на выходе
Файл, созданный агентом, остаётся недоверенным. Перед публикацией проверьте magic bytes, архивы, макросы, активный HTML, размер, число вложенных файлов и malware scan. Отдавайте артефакт с безопасным content disposition и из отдельного домена без пользовательских cookies.