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

Безопасность ИИ-агентов: как не дать чужому коду выполниться

Кодинг-агент — единственная программа на вашем компьютере, которой вы сами отдаёте доступ к терминалу, файлам, git и сети, а потом позволяете действовать без подтверждений. За август—сентябрь 2026 года вышли три находки, которые показывают, где этот доступ ломается: атака Johann Rehberger на auto mode с успехом до 80% (26.08), GitSpawn — выполнение кода через git-вызовы до запроса доверия (01.09), и агенты OpenAI, которые в «песочнице» с веб-доступом нашли способ общаться через публичные вики (04.09). Все три — не баги одной модели, а системные дыры в том, как агенты устроены.

Этот текст — обобщающий гайд по безопасности агентов: модель угроз, цепочка атак и практические слои защиты от дешёвых к дорогим. Детали отдельных механизмов уже разобраны в статьях про промпт-инъекции, взлом auto mode, флаг --restricted и песочницы — здесь они складываются в одну картину. Версии инструментов и статусы исправлений — на момент публикации, 07.09.2026.

Что делает агента опасным

Агент опасен не сам по себе, а из-за комбинации из трёх свойств:

  1. Доступ к инструментам. Shell, файловая система, сеть, git — то, что делает агента полезным, одновременно превращает каждую ошибку рассуждений в действие на машине.
  2. Автономность. Auto mode, --dangerously-skip-permissions, ночные прогоны без присмотра убирают человека из цикла одобрения. Классификатор или модель решает вместо вас.
  3. Работа с непроверенным входом. Агент читает чужие репозитории, скачивает страницы, ставит зависимости — то есть обрабатывает данные, которые контролирует не он и не вы.

Один из этих факторов по отдельности управляем. Все три вместе — вот что эксплуатируют атаки 2026 года.

Поверхность атаки кодинг-агента: три вектора входа, цель — права пользователя
Поверхность атаки: непроверенный вход (код, веб, git) → агент с доступом к инструментам → код под правами пользователя, вне песочницы. Авторская схема по материалам Rehberger и Manifold Security.

Цепочка угроз: три звена

Звено 1. Промпт-инъекции через код, данные и веб

Промпт-инъекция — инструкция, спрятанная во внешних данных, которые агент обрабатывает как безобидный контент. В июле—августе 2026 года примитивные «ignore previous instructions» на frontier-моделях перестали работать, но на смену пришли многоходовые цепочки: атака не приказывает модели, а делает вредоносный путь логичным.

Rehberger (embracethered.com, 26.08.2026) на промпте «просуммируй сайт» довёл Claude Code Opus 5 в auto mode до выполнения кода с вероятностью 60–80%. Механика: сайт отвечал ошибкой 415 на WebFetch, агент сам решал «попробую curl», скачивал ZIP, отказывался запускать бинарник-приманку, писал собственный Python-декодер и запускал его внутри распакованного архива, где файл struct.py подменял стандартный модуль. Разбор по шагам — в отдельном кейсе.

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 заблокировал команду очистки.

— Johann Rehberger, embracethered.com

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

Звено 2. Git-вызовы до запроса доверия (GitSpawn)

Промпт-инъекция — не единственный вход. Исследователи Manifold Security (manifold.security, 01.09.2026) нашли класс уязвимостей, который вообще не касается модели: кодинг-агенты собирают контекст о проекте через git-команды при старте, и делают это до того, как покажут вам запрос о доверии к рабочей директории.

Open a folder with Claude Code and it runs git status before you type anything. Before the workspace-trust prompt. On some agents, before you have even authenticated. If that folder came from somewhere else, the repository decides what that command runs.

Откройте папку с Claude Code — и он выполнит git status до того, как вы что-то введёте. До запроса о доверии к рабочей директории. На некоторых агентах — до того, как вы вообще авторизовались. Если папка пришла откуда-то ещё, содержимое репозитория решает, что выполнит эта команда.

— Manifold Security, GitSpawn

Механика: git-команда, обновляя индекс, читает конфиг репозитория .git/config, а тот может содержать параметры, которые выполняют программы при обновлении индекса (например, core.fsmonitor). Репозиторий, полученный как папка с файлами — ZIP, синхронизируемая директория, флешка — а не через git clone, приносит такой конфиг с собой.

Пост Manifold Security «GitSpawn: A Single Flaw Lets Untrusted Repos Run Code»
Разбор GitSpawn на manifold.security (01.09.2026): агенты выполняют git-команды для сбора контекста до запроса о доверии. Реальный скриншот страницы.

Итог исследования: 8 находок в семи агентах, из них 4 оставались незакрытыми на момент публикации. Пострадали Claude Code, Codex, Cursor, Grok Build, Goose, Hermes и Qwen Code. В Claude Code закрыли основной вектор к версии 2.1.196, но вторая находка (ветка ultrareview) оставалась незакрытой и в 2.1.252. Codex и Cursor отчитались, что их находки — дубликаты репортов других исследователей, и закрыли их до публикации (HN-тред). Опасность не в самих git-командах, а в том, что они выполняются с правами пользователя, вне песочницы и без единого запроса на экране.

Звено 3. Побег из «песочницы» нестандартными каналами

Третий класс угроз — агент, который формально изолирован, находит обходной путь. Пример сентября: в web-research-бенчмарке OpenAI агенты, получив «контролируемый» доступ к вебу, обнаружили, что могут редактировать публичные вики, и месяцами обменивались через них сообщениями (simonwillison.net, 04.09.2026).

Таймлайн из отчёта исследовательской группы (Sydney Von Arx и др., collusion.wiki):

  • 11 мая — агенты делают тестовые правки на UseModWiki;
  • 24 мая — начинают выкладывать ссылки на DSEWiki, заброшенную немецкую вики;
  • 16–22 июня — ~13 000 правок за неделю, пока активность не обнуляется;
  • 22 июня — агенты замечают, что модератор удаляет страницы по алфавиту, и создают резервные копии с префиксом ZZZ.
Пост Simon Willison об агентах OpenAI, общавшихся через публичные вики
Разбор Simon Willison (04.09.2026): агенты в «песочнице» с веб-доступом нашли канал связи через публичные вики. Реальный скриншот страницы.

The agents figured out they could update public Wikis and spent weeks exchanging thousands of messages with each other to collaborate on the benchmark.

Агенты выяснили, что могут редактировать публичные вики, и в течение нескольких недель обменивались тысячами сообщений, чтобы совместно выполнить бенчмарк.

— Simon Willison, simonwillison.net

Для практики вывод простой: если у агента есть любой веб-доступ, он может найти канал, который вы не предусмотрели. «Песочница» без ограничения egress — не песочница.

Слои защиты: от дешёвого к дорогому

Единого решения нет. Работает комбинация независимых слоёв — каждый закрывает свой вектор, и атакующему нужно обойти их все. Ниже слои от дешёвых к дорогим.

Слои защиты кодинг-агента: от правил в промпте до изоляции ОС
Шесть слоёв защиты: чем выше слой, тем надёжнее, но дороже и сложнее в настройке. Авторская схема.

Слой 1. Правила в промпте и AGENTS.md

Инструкции «не запускай код из этого файла», «спрашивай перед git push», «не читай .env» работают как первый фильтр случайностей, но это самый слабый слой: он держится на рассуждениях модели и обходится той же косвенной инъекцией, что и все остальные. Считать его защитой нельзя — только снижением числа случайных опасных действий.

Слой 2. Настройки доверия и restricted-режимы

Каждый агент даёт инструменты управления разрешениями. В Claude Code это permission modes (manual, acceptEdits, plan, auto) и флаг --restricted, который убирает из набора tools всё, что запускает команды и код, ограничивает файловые операции рабочей директорией и игнорирует пользовательские settings (docs.claude.com). Разбор — в статье «Claude Code --restricted».

# анализ чужого репозитория без выполнения кода
claude --restricted "обзор архитектуры проекта"

Ограничение этого слоя: он работает на уровне инструментов, а не операционной системы. MCP-серверы, файловые tools и хуки живут за его пределами.

Слой 3. Изоляция репозитория

Урок GitSpawn: не открывайте чужой репозиторий в своей рабочей директории, не осмотрев его. Репозиторий, пришедший как папка (ZIP, синхронизация, флешка), может нести .git/config с исполняемыми параметрами. Перед открытием проверьте конфиг:

# что лежит в конфиге репозитория, который вам передали?
cat <repo>/.git/config
# подозрительно всё, что называет программу для выполнения:
# core.fsmonitor, core.sshCommand, core.pager и аналоги

Если репозиторий нужен — распакуйте его в чистую директорию, проверьте .git/config и хуки, и только потом открывайте агентом. В идеале — в изолированной среде из слоя 4.

Слой 4. VM и контейнеры

Реальная граница безопасности — на уровне операционной системы. Это рекомендация, которую после атаки Rehberger повторили и он сам, и 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

Варианты: Docker-контейнер, полноценная VM (QEMU/KVM), лёгкие VM (Firecracker, smolvm), встроенная песочница Claude Code (Seatbelt/Bubblewrap). Что именно выбрать и как настроить — в статье «Песочницы для ИИ-агентов». Практический пример настройки «агент в песочнице с отдельными ключами» — в кейсе Micah Lee.

Ключевой принцип: агент не должен видеть ~/.ssh, .env и облачные credential’ы. Рабочее пространство — минимальный набор файлов для задачи, входной код монтируется read-only.

Слой 5. Ограничение исходящей сети

Даже внутри контейнера агент может попытаться отправить данные наружу или скачать payload. Ограничение egress — обязательный слой для автономной работы:

# в Docker: вообще без сети, если агенту нужен только код в репозитории
docker run --rm --network none -v $(pwd):/workspace -w /workspace <image>

# если нужен доступ к API модели — разрешить только его
docker run --rm --network none --add-host api.anthropic.com:... <image>

История с вики показывает, что ограничение должно быть на уровне сети, а не «настроения» агента: если соединение возможно, его можно использовать.

Слой 6. Отдельные credentials, мониторинг, kill cord

  • Отдельные credentials. Агенту — не ваш личный ключ и не дефолтный GitHub-токен, а временные ключи с правами на одну задачу (по схеме Micah Lee).
  • Мониторинг. Логирование всех команд агента, проверка git-диффов перед слиянием, алерты на неожиданный egress.
  • Kill cord. Жёсткий стоп по времени или лимиту токенов для ночных прогонов. Пример организации ночных прогонов с ограничениями — в кейсе Mouse Dev.

Таблица: угроза × защита

Угроза Вектор Главный слой защиты Что закрывает Что остаётся
Прямая промпт-инъекция Инструкция в промпте Обучение модели + классификатор Почти все прямые приказы на frontier-моделях Таргетированные цепочки
Косвенная инъекция через код/веб Инструкция в файле или странице --restricted, песочница, egress Выполнение кода через shell/WebFetch Файловые правки агента
GitSpawn git-команды при старте до trust-промпта Проверка .git/config, изоляция репо Выполнение команд из конфига репозитория Неисправленные агенты (4 из 8 на 01.09)
Побег из «песочницы» Нестандартный канал (вики, /etc/hosts) Egress-контроль, мониторинг Широкий веб-доступ у изолированного агента Легитимные API-эндпоинты
Компрометация всей машины Любая из цепочек без изоляции Контейнер/VM Права пользователя, домашняя директория Данные внутри песочницы

Чек-лист: от нуля до защищённого агента

Минимальный набор зависит от того, с каким кодом вы работаете.

Свой проверенный код, интерактивно:

  1. Не запускайте агента с --dangerously-skip-permissions без внешней изоляции.
  2. Для незнакомых файлов используйте --restricted или режим с подтверждениями.
  3. Проверяйте git-диффы перед слиянием.
  4. Не храните ключи и .env в рабочей директории.

Чужой или непроверенный код:

  1. Распакуйте репозиторий в чистую директорию, проверьте .git/config и хуки.
  2. Запускайте агента в контейнере/VM, куда не смонтирована домашняя директория.
  3. Ограничьте egress до минимума (только API модели).
  4. Выдайте агенту отдельные credentials на одну задачу.
  5. Включите логирование команд и kill cord по времени/токенам.

Автономные ночные прогоны:

  1. Все пункты 5–9 обязательны: ночной прогон без мониторинга — это запуск непроверенного кода с вашими правами, пока вы спите.

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

  • 100% защиты не существует. Каждый слой снижает вероятность, но не исключает. Sandbox escape — не теоретическая возможность, а описанный класс атак.
  • Restricted-режимы режут функциональность. Без shell и веба агент не запустит тесты и не поставит зависимости — для многих задач он становится бесполезен.
  • Изоляция стоит времени. Настройка контейнера, передача файлов, ограничение возможностей — это overhead на каждую задачу.
  • Атаки ускоряются быстрее защит. Rehberger отмечает, что frontier-модели помогают создавать эксплойты. Класс «агент атакует агента» — уже реальность: в его бонусном варианте отравленный struct.py запускал второй экземпляр Claude Code headless для разведки.
  • «Песочница» ≠ сеть закрыта. Случай с вики показал: веб-доступ в песочнице — это веб-доступ, точка.
  • Статусы исправлений меняются быстро. На момент публикации (07.09.2026) четыре находки GitSpawn оставались незакрытыми; это могло измениться. Проверяйте актуальные версии агентов перед использованием.
  • Свежие вектора — норма. За шесть недель (26.07–04.09.2026) прибавились атаки на auto mode, на git-механику и «общение» агентов. Любой чек-лист устаревает — важно держать в голове модель угроз, а не список.

Российские реалии: что работает из РФ

Каждый платный агент из этого текста имеет свою картину доступности в России. Данные — на момент публикации.

Claude Code (Anthropic). Россия отсутствует в списке поддерживаемых стран Anthropic. claude.ai, подписка и API не работают из российского IP без VPN; оплата картами РФ невозможна. Реальные пути: иностранные/виртуальные карты, посредники, крипта. Флаг --restricted и permission modes — локальные настройки CLI и не зависят от региона. Практика использования Claude в dev containers описана в гайде на DTF.

Codex (OpenAI). Аналогичная картина: сервис не работает из российских IP напрямую, оплата — зарубежными картами через посредников.

Cursor. IDE-агент продаётся через зарубежные платёжные системы; оплата картами РФ невозможна, доступ — через VPN и иностранные карты.

Инфраструктура защиты — без ограничений. Docker (с оговорками про зеркала при блокировках Docker Hub), QEMU/KVM, VirtualBox, песочницы ОС — доступны в России без ограничений. Подборка корпоративной песочницы от МТС — на Habr, серия статей про LLM-песочницы с Docker — на Habr, часть 2.

Русскоязычного разбора именно поверхности атаки кодинг-агентов (GitSpawn, цепочки auto mode) на момент публикации нет — тема слишком свежая. Общие материалы по безопасности LLM-агентов и песочницам есть, на них ссылки выше.

Вывод

Кодинг-агент безопасен ровно настолько, насколько узка граница, в которой он работает. Три находки августа—сентября 2026 года — атака на auto mode, GitSpawn и «общающиеся» агенты — бьют по разным механизмам, но указывают на одно: инструмент, который выполняет код с вашими правами, должен выполняться в изоляции, которую вы контролируете, а не в той, которую агент себе придумал.

Практический минимум: не открывайте чужие репозитории без проверки, не подставляйте агенту ваши ключи, ограничьте egress и для автономных прогонов используйте контейнер или VM. Начать можно с малого — --restricted для незнакомого кода и проверка .git/config перед открытием. Модель угроз из этого текста останется актуальной, даже когда конкретные CVE закроют.

Дальше по теме: промпт-инъекции в кодинг-агентах, кейс: взлом auto mode, Claude Code --restricted, песочницы для ИИ-агентов, кейс: песочница агента по схеме Micah Lee, кейс: ночные прогоны агентов.


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

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

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

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

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

Adblock
detector