FRELY / BLOG

Что делает среда-песочница, когда ИИ выполняет команды на вашем компьютере

Разрешать ИИ выполнять shell-команды на вашем компьютере удобно. Он может устанавливать зависимости, запускать тесты, читать логи и чинить сборку. Но это также значит, что программа, которую вы не писали, управляемая текстом, который вы не проверяли, работает от имени вашей учётной записи.

По умолчанию эта учётная запись может читать ваши SSH-ключи, облачные учётные данные, токены реестров пакетов и профиль браузера. Команде не обязательно быть вредоносной, чтобы нанести вред. Достаточно prompt-инъекции, спрятанной на веб-странице или в комментарии к issue, чтобы внешне совершенно обычная команда прочитала секрет и отправила его куда-то.

Вопрос «вы уверены?» перед каждой командой эту проблему не решает: люди подтверждают то, что не могут полностью прочитать. Лучший ответ — сделать опасное невозможным по умолчанию и позволять человеку открыть узкую дверь, когда она действительно нужна. Для этого и существует песочница.

Что такое srt

srt — это open-source среда-песочница от Anthropic (@anthropic-ai/sandbox-runtime). Она создана для Claude Code и может использоваться как утилита командной строки или как библиотека. Она помещает любой процесс и всё, что этот процесс запускает, в рамки ограничений на файлы и сеть, которые обеспечивает операционная система. Ни образа контейнера, ни виртуальной машины здесь нет.

В собственном README она названа бета-версией исследовательского превью, поэтому воспринимайте её как прочный строительный блок, а не как готовую гарантию.

Как она ограничивает файлы

Правила для файлов просто сформулировать:

  • Чтение по умолчанию разрешено везде. Вы перечисляете места, которые нужно скрыть, с помощью denyRead, например папки с учётными данными.
  • Запись по умолчанию запрещена везде. Вы перечисляете места, куда команде можно писать, с помощью allowWrite — обычно это папка проекта и временный каталог. denyWrite главнее allowWrite, поэтому из разрешённой папки можно вырезать защищённый файл.

Чтение устроено как список запретов, а не список разрешений. Это практично, ведь инструментам нужно читать множество системных файлов, но это же значит, что песочница скрывает лишь то, что кто-то догадался перечислить.

Как она ограничивает сеть

По умолчанию доступ к сети полностью запрещён. Команда может выйти в сеть только через прокси, которые работают вне песочницы, и именно эти прокси решают, какие домены разрешены.

  • macOS: команда выполняется под сгенерированным профилем Seatbelt (sandbox-exec), который разрешает обращение только к локальному порту прокси.
  • Linux: команда выполняется под bubblewrap с удалённым сетевым namespace, поэтому единственный путь наружу — через прокси, доступные по Unix-сокетам, смонтированным внутрь песочницы.

HTTP и HTTPS идут через HTTP-прокси. Остальной TCP-трафик — через SOCKS5-прокси. Оба применяют списки разрешённых и запрещённых доменов. Unix-сокеты по умолчанию заблокированы.

Почему это хороший подход

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

Чего srt не делает

Песочница — не волшебный щит. Честные ограничения важны, потому что они определяют, для чего инструменту можно доверять.

  • Она надёжна ровно настолько, насколько настроена. Если список разрешённых доменов открыт, всё, что команда может прочитать, может быть отправлено наружу. Если секрета нет в списке запретов, песочница его не скрывает.
  • Бета-версия. Сам проект так о себе и говорит, и его параметры могут измениться.
  • Различия платформ. Поддерживаются macOS и Linux. В Linux нужны bubblewrap, socat и ripgrep. Поддержка Windows в srt находится на стадии альфы, и Frely CLI не запускает команды в песочнице на Windows.
  • Некоторые опции намеренно ослабляют защиту. Разрешение Unix-сокетов, вложенных песочниц или Apple Events — каждый из этих вариантов открывает путь в обход изоляции. README предупреждает об этом.
  • Она ограничивает дерево процессов одной команды. Она не защитит от человека, который сам отдаст ИИ свой пароль, или от файла, который вы сами скопируете из песочницы.

Как Frely CLI использует srt

Frely CLI позволяет управлять компьютером силами вашего ИИ: ИИ просит, CLI выполняет команды на вашем устройстве. Каждая команда, которую Frely CLI выполняет для удалённого ИИ-клиента, сначала проходит через srt. Вот как это выглядит на практике — по исходному коду CLI.

Значения по умолчанию

  • Запись: команда может писать внутри папки workspace и системного временного каталога. Больше никуда.
  • Папки с учётными данными скрыты. CLI запрещает чтение SSH-ключей, конфигураций AWS, Google Cloud, Kubernetes и GitHub CLI, ключей GnuPG, сохранённых учётных данных git и файлов с токенами реестров пакетов (.npmrc, .pypirc, учётные данные Cargo). Собственные учётные данные устройства Frely не могут быть открыты никаким одобрением.
  • Чувствительные места защищены от записи. Стартовые файлы shell вроде .zshrc и .bashrc, macOS LaunchAgents и папки с учётными данными защищены от записи. Широкое разрешение наподобие «писать в моей домашней папке» их не охватывает. Открыть одно из них можно, только назвав этот точный путь.
  • .git/hooks остаётся заблокированным. Хуки запускают программы вне песочницы, поэтому ни одно одобрение их не открывает.
  • При сбое всё блокируется. Если песочница не может запуститься на устройстве (неподдерживаемая платформа или отсутствующая зависимость), команда отклоняется с сообщением о причине. Она никогда не выполняется молча без песочницы.

Просьба о большем — узко

Когда команде нужно то, что скрывает песочница, ИИ не может просто взять это. Он просит, и владелец устройства одобряет запрос на сайте Frely — с помощью ключа доступа (passkey) или кода аутентификатора, а не нажатием кнопки в чате. В запросе названы причина и точная команда. Одобрение может быть настолько узким, что охватывает лишь одну группу учётных данных (например SSH, но не AWS), одну папку кэша или один конкретный каталог.

Если ничего узкого не подходит, владелец может одобрить выполнение команды без песочницы. Это последний вариант, а не выбор по умолчанию, и сообщения об отказе от CLI подталкивают ИИ сначала просить самый узкий вариант.

Git без передачи ключей от двери

srt блокирует запись в .git/config репозитория, потому что конфигурация git может заставить git запустить программы позже, вне песочницы. Это же блокирует повседневные команды вроде git push -u и git remote add.

Frely CLI разрешает такие записи для обычных команд, а затем проверяет. Перед командой он делает копию каждого .git/config в workspace, после её завершения сравнивает и удаляет любой добавленный параметр, который заставил бы git запустить программу: fsmonitor, credential helper, собственный pager или shell-алиас. Результат сообщает ИИ, что было удалено. Процессы, оставленные командой работать в фоне, останавливаются.

Работа с сетью изнутри песочницы

Поскольку srt маршрутизирует только трафик HTTP, HTTPS и SOCKS, таким инструментам, как ssh, нужна помощь. CLI направляет ssh, scp и sftp через прокси песочницы. Для клиентов баз данных и других инструментов, работающих с «сырым» TCP, встроенная команда frely tunnel открывает локальный порт внутри песочницы. Если вы выходите в интернет через локальный прокси (например, Clash), frely sandbox proxy позволяет песочнице им пользоваться. Frely только читает ваши настройки прокси и не меняет их.

Чего не покрывает использование srt во Frely CLI

Мы предпочитаем, чтобы вы знали о границах:

  • Исходящий сетевой трафик открыт по умолчанию. CLI не ограничивает, какие домены может достигать команда, чтобы npm, pip, git и curl продолжали работать. Это значит, что ваши данные защищают именно файловые правила: секрет, который песочница может прочитать, может быть отправлен наружу. Защита достигается тем, что учётные данные недосягаемы, а не блокировкой сети.
  • Большая часть вашей домашней папки доступна для чтения. Список запретов покрывает известные места хранения учётных данных, но не всё личное. Файлы, которые вы храните в других местах (файл .env в другом проекте, заметки, документы), доступны для чтения команде, выполняющейся в песочнице.
  • Одобренный доступ — это настоящий доступ. Если вы одобрите доступ к SSH-ключам, команда сможет их прочитать. Одобряйте то, что понимаете, и предпочитайте самый узкий вариант.
  • Защита .git/config — это проверка постфактум. Она отменяет опасные настройки после завершения команды. Она смотрит на известные настройки git, связанные с запуском программ, и признаёт собственное ограничение: процесс, ускользнувший от очистки между командами, будет замечен при следующей проверке, а не мгновенно.
  • Она ограничивает команды, а не людей. Песочница ограничивает то, к чему команда может прикоснуться. Она не помешает вам одобрить что-то неразумное и не заменит заблокированный экран и надёжный вход в учётную запись.
  • srt — бета-версия исследовательского превью, и Frely CLI наследует этот статус.

Коротко

ИИ, который может выполнять команды, безопасен ровно настолько, насколько надёжны стены вокруг этих команд. srt строит эти стены на уровне операционной системы: писать нигде, кроме проекта, скрывать папки с учётными данными и пропускать сетевой трафик через привратника. Frely CLI удерживает эти стены по умолчанию, превращает их открытие в осознанный, узкий шаг, одобренный человеком, и прямо говорит, чего он не покрывает.

All posts