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

Claude Code —restricted: безопасный режим для непроверенных задач

26 августа 2026 года Johann Rehberger опубликовал атаку на Claude Code auto mode с 60–80% успеха (embracethered.com). На следующий день Anthropic выпустил Claude Code 2.1.248 с флагом --restricted (changelog). Совпадение по времени — прямая реакция на публикацию Rehberger.

--restricted — это не новый permission mode, а CLI-флаг, который убирает из агента инструменты выполнения кода и ограничивает файловый доступ текущей директорией. В этой статье — разбор, что именно делает флаг, когда его включать и почему он не заменяет песочницу.

Что делает --restricted

Раздел changelog Claude Code v2.1.248 — флаг --restricted
Раздел 2.1.248 changelog Claude Code: появление флага –restricted. Источник: docs.claude.com.

Флаг --restricted (или переменная окружения CLAUDE_CODE_RESTRICTED=1) появился в Claude Code 2.1.248 (changelog):

Раздел changelog Claude Code v2.1.248 — описание флага --restricted
Раздел changelog Claude Code v2.1.248 с описанием флага –restricted. Источник: docs.claude.com

Вот пять изменений, которые вносит флаг:

1. Убирает Bash и аналогичные tools

С --restricted из набора инструментов агента удаляются все tools, которые запускают команды или выполняют код. Это Bash — основной инструмент, через который Rehberger добился выполнения произвольного кода (шаг 2 атаки: curl вместо WebFetch, шаг 4: запуск Python-скрипта).

Без Bash агент теряет возможность:
— запускать скрипты и команды
— устанавливать зависимости
— обращаться к git из командной строки
— скачивать файлы через curl/wget

2. Убирает WebFetch (кроме явно указанных в –tools)

Инструмент WebFetch — точка входа первой атаки Rehberger. Сервер с вредоносным контентом возвращал ошибку 415, после чего агент переключался на curl в Bash. С --restricted и WebFetch удалён — агент не может обращаться к веб-страницам.

Исключение: если WebFetch явно указан в флаге --tools. Это позволяет включить веб-доступ для конкретных проверенных задач.

3. Файловые tools ограничены рабочей директорией

Инструменты Read, Write и Edit сохраняются, но работают только внутри текущей рабочей директории (CWD). Агент не может прочитать ~/.ssh/id_rsa, .env с токенами или файлы в родительских директориях.

Это ограничивает поверхность файловой системы, которую агент способен затронуть.

4. Отказывает в bypassPermissions

Флаг --dangerously-skip-permissions (alias bypassPermissions) блокируется. Даже если вы попытаетесь запустить агента без ограничений, --restricted не позволит этого сделать.

5. Игнорирует все settings-файлы

--restricted не читает:
~/.claude/settings.json (пользовательские настройки)
.claude/settings.json (проектные настройки)
.claude/settings.local.json (локальные настройки)

Это значит, что ни allow-листы, ни deny-правила, ни custom permissions не влияют на поведение флага. Он работает как жёсткий кордон.

Сравнение инструментов: обычный режим vs --restricted
Что убирает и что ограничивает –restricted. Авторская схема по материалам docs.claude.com

Как запустить

Через CLI-флаг:

claude --restricted "проанализируй код в текущей директории"

Через переменную окружения:

export CLAUDE_CODE_RESTRICTED=1
claude "рефактори модуль auth"

В комбинации с permission mode:

claude --restricted --permission-mode auto "напиши тесты для utils.py"

Флаг работает с любым permission mode (default, acceptEdits, plan, auto, dontAsk). Он не конфликтует с ними — --restricted действует на уровне выше, убирая tools до того, как permission system решает, одобрить или отклонить вызов.

Почему --restricted — не замена auto mode

Auto mode и --restricted решают разные задачи.

Auto mode — это permission mode, в котором второй модели (safety classifier) поручено одобрять или отклонять действия агента вместо пользователя. Классификатор работает на уровне логики модели и не гарантирует безопасность.

Rehberger показал (embracethered.com, 26.08.2026):

In a few runs Claude tried to terminate the malware process once it noticed the compromise, but Auto Mode denied the cleanup command.

В некоторых прогонах Claude пытался завершить вредоносный процесс, заметив компрометацию, но auto mode заблокировал команду очистки.

Классификатор разрешил создание процесса, но запретил его завершение. Механизм защиты стал частью проблемы.

--restricted — это не классификатор и не логика модели. Это жёсткое удаление инструментов на уровне CLI. Агент физически не может вызвать Bash или WebFetch, потому что их нет в списке доступных tools. Никакая модель не решает, «можно или нельзя» — инструмент просто отсутствует.

Это качественная разница: auto mode — попытка модели отличить безопасное от опасного; --restricted — устранение опасного инструмента напрямую.

Критерий Auto mode –restricted
Что это Permission mode CLI-флаг
Механизм Safety classifier (вторая модель) Удаление tools из набора
Bash Доступен (classifier одобряет/отклоняет) Удалён полностью
WebFetch Доступен (classifier одобряет/отклоняет) Удалён (кроме –tools)
Файлы Любые (с учётом permission rules) Только CWD
bypassPermissions Доступен Отказ
Settings Активны Игнорируются
Обходимость Через цепочку атак (Rehberger: 60–80%) Физически невозможна (нет инструмента)

--restricted не делает агента «безопасным» в абсолютном смысле — файловые tools по-прежнему работают, и агент может читать/писать файлы. Но ключевой вектор атаки Rehberger (выполнение кода через Bash) полностью перекрыт.

Когда включать --restricted

Сценарий 1: Агент работает с незнакомым кодом

Форкнули репозиторий, впервые смотрите чужой проект и хотите, чтобы агент проанализировал архитектуру. Если в репозитории есть вредоносный файл (module shadowing, как в атаке Rehberger), --restricted не позволит агенту его выполнить.

git clone https://github.com/someone/unknown-repo.git
cd unknown-repo
claude --restricted "обзор архитектуры проекта"

Сценарий 2: Агент обрабатывает внешние данные

Задача — рефакторинг кода, который читает данные из API или веб-страницы. Если данные содержат prompt injection, --restricted блокирует агенту доступ к WebFetch и Bash, через которые инъекция могла бы быть реализована.

Сценарий 3: CI/CD и автоматические прогон

В пайплайне агент запускается в headless-режиме без присмотра. --restricted снижает риски, ограничивая агента только чтением/записью файлов:

claude --restricted -p "обнови зависимости и запусти проверку типов"

Обратите внимание: без Bash агент не сможет запустить npm test или cargo build. Для задач, требующих выполнения команд, --restricted в чистом виде не подходит — его комбинируют с песочницей (см. следующий раздел).

Сценарий 4: Начало работы с кодинг-агентом

Если вы впервые пробуете Claude Code и не хотите, чтобы агент имел полный доступ к вашей файловой системе и сети — --restricted как «тренировочные колёса».

--restricted + песочница: комбинация слоёв

--restricted и песочница (sandbox) — независимые механизмы, которые усиливают друг друга.

Слои защиты: auto mode + --restricted + sandbox
Четыре уровня защиты — от safety classifier до мониторинга. Авторская схема

Simon Willison (27.08.2026) и Rehberger сошлись в главном:

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.

Запускайте автономные кодинг-агенты в контейнере, VM или песочнице ОС. Ограничьте сетевой трафик. Мониторьте агентов. Не подвергайте домашние директории, SSH-ключи и облачные credential’ы рантайму агента.

Что даёт песочница без --restricted

Claude Code имеет встроенную Bash sandbox — файловую и сетевую изоляцию для команд (sandboxing). На macOS — Seatbelt, на Linux/WSL2 — Bubblewrap. Включается через /sandbox в интерфейсе.

/sandbox
{
  "sandbox": {
    "enabled": true,
    "mode": "auto-allow"
  }
}

Sandbox ограничивает Bash-команды: записи только в CWD, сети — по allowlist доменов. Но Bash по-прежнему доступен как инструмент. Модель всё ещё может пытаться выполнить команды — просто они будут работать в ограниченной среде.

Что даёт --restricted без песочницы

--restricted убирает Bash и WebFetch напрямую. Но файловые tools (Read/Write/Edit) работают в обычном permission-режиме — они не проходят через sandbox.

Если агент не нуждается в выполнении команд, а только анализирует или правит файлы — --restricted без песочницы достаточен.

Что даёт комбинация

Механизм Что блокирует Что пропускает
Только --restricted Bash, WebFetch, файлы за пределами CWD, bypassPermissions, все settings Read/Write/Edit в CWD
Только sandbox Bash за пределами CWD и allowlist, сетевые подключения за пределами allowlist Bash в sandbox, все остальные tools
--restricted + sandbox Bash (удалён), WebFetch (удалён), файлы только в CWD, сеть только по allowlist Read/Write/Edit в CWD

Комбинация закрывает оба вектора: --restricted убирает инструменты выполнения кода, sandbox ограничивает то, что остаётся.

Практический пример запуска:

# В контейнере с restricted
docker run --rm -v $(pwd):/workspace -w /workspace \
  claude-code --restricted -p "рефактори модуль auth"

Для дополнительной изоляции сети:

docker run --rm --network none \
  -v $(pwd):/workspace -w /workspace \
  claude-code --restricted -p "обзор кодовой базы"

Подробнее про архитектуру песочниц — в отдельной статье: Песочницы для ИИ-агентов.

Ограничения --restricted

Флаг решает конкретную проблему — убирает инструменты выполнения кода. Но у него есть границы.

Файловые tools остаются активными

Read, Write и Edit работают в CWD. Если в рабочей директории лежит вредоносный файл (отравленный .py, скрипт с prompt injection в комментариях), агент его прочитает и может последовать инструкциям из файла.

Атака Rehberger не начинается с выполнения кода — она начинается с чтения README и CSV-файлов. --restricted не защищает от injection через файловый контент.

Нет изоляции от сети

--restricted не управляет сетевыми подключениями. Файловые tools не подключаются к сети, но если вы добавите MCP-сервер с сетевым доступом, агент сможет через него отправлять данные.

Не заменяет мониторинг

Даже с --restricted стоит проверять git-диффы после работы агента. Ограничение инструментов снижает вероятность вредоносных действий, но не исключает возможность тихого внедрения вредоносного кода через файловые правки.

Ограничивает функционал

Без Bash агент не может:
— запускать тесты (npm test, pytest, cargo test)
— устанавливать зависимости
— обращаться к git (команды git выполняются через Bash)
— запускать сборку (make, cargo build, go build)

Для задач, требующих выполнения команд, --restricted в чистом виде непригоден. Решение — комбинация с sandbox (см. раздел выше) или использование --tools для явного добавления необходимых инструментов.

MCP-серверы не ограничены

--restricted не влияет на MCP-серверы, подключённые к агенту. Если MCP-сервер предоставляет tools с доступом к сети или файлам за пределами CWD — --restricted их не блокирует. Управление MCP-инструментами — отдельная настройка.

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

Режимы разрешений Claude Code — таблица из документации
Таблица permission modes из документации Claude Code. Источник: code.claude.com
Подход Что делает Защита от Rehberger Когда использовать
Manual mode Каждое действие — запрос у пользователя Полная (если вы проверяете) Чувствительные задачи
Auto mode Classifier проверяет действия Ненадёжная (60–80% обхода) Удобство, но не безопасность
--restricted Убирает Bash/WebFetch Высокая (инструмент отсутствует) Непроверенный код, внешние данные
Bash sandbox Файловая и сетевая изоляция Bash Средняя (Bash доступен в sandbox) Автономная работа с командами
--restricted + sandbox Убирает tools + изоляция Максимальная из доступных Автономная работа, CI/CD
Контейнер/VM Полная изоляция ОС Максимальная Полная изоляция от хоста

Реальная иерархия защиты

На момент публикации безопасная конфигурация для работы с ненадёжным контентом:

  1. Контейнер/VM — агент не видит вашу файловую систему, SSH-ключи, credential’ы
  2. --restricted — внутри контейнера: убирает Bash/WebFetch
  3. Sandbox — ограничивает файловый доступ и сеть на уровне ОС
  4. Сетевые ограничения — файрвол, --network none в Docker
  5. Мониторинг — логирование, проверка диффов, kill cord
  6. Отдельные credential’ы — временные ключи с минимальными правами

Не обязательно использовать все шесть уровней. Минимум для автономной работы с ненадёжным контентом: --restricted + sandbox. Для полностью изолированной среды — контейнер + --restricted.

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

  • --restricted появился 27 августа 2026 года — на момент публикации флаг новым и поведение может измениться в следующих версиях.
  • Флаг не решает проблему prompt injection через файловый контент — агент всё ещё читает файлы в CWD.
  • Без Bash агент не может запускать тесты, сборку и git-команды — для многих задач это критично.
  • MCP-серверы остаются за пределами контроля --restricted.
  • Auto mode по-прежнему рекомендуется Anthropic как режим по умолчанию для удобства — --restricted не конфликтует с ним, но не заменяет его функцию.

Auto mode can reduce risk if you do not run in a sandbox (when compared to –dangerously-skip-permissions), but it is not a security boundary.

Auto mode снижает риск, если вы не используете песочницу (по сравнению с –dangerously-skip-permissions), но не является рубежём безопасности.

Johann Rehberger

Блок российских реалий

Claude Code работает из России через VPN и API. Оплата — картами Visa/Mastercard, которые в РФ не работают напрямую. Реальные способы: виртуальные карты (AdvCash, ForeignKey), криптовалюта через промежуточные сервисы, посредники с иностранными картами. Anthropic не публикует список заблокированных регионов, но описаны случаи блокировки аккаунтов при подключении из определённых юрисдикций.

Флаг --restricted не зависит от региона — это локальная настройка CLI, не связанная с API и оплатой. Работает одинаково из любой страны.

Тема безопасности кодинг-агентов и --restricted в русскоязычном сегменте на момент написания не освещена. На Habr есть материалы по LLM-безопасности в общем (habr.com/ru/search/?q=prompt+injection), но специфика кодинг-агентов и флаг --restricted не разобраны. На vc.ru и Tproger публикаций по теме не обнаружено.

Вывод

--restricted — ответ Anthropic на атаку Rehberger. Флаг убирает Bash и WebFetch из набора инструментов агента, ограничивает файловые операции текущей директорией, отказывает в bypassPermissions и игнорирует все settings-файлы.

Ключевой момент: --restricted — это не замена safety classifier (auto mode) и не замена песочницы. Это отдельный слой, который устраняет конкретный вектор атаки — выполнение произвольного кода. Для максимальной защиты комбинируйте: контейнер/VM + --restricted + sandbox + сетевые ограничения + мониторинг.

На момент публикации (Claude Code 2.1.248, август 2026) флаг новым и дополнительные ограничения или расширения возможны в будущих версиях.

Дополнительные материалы по теме:


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

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

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

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

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

Adblock
detector