Что такое prompt injection?
Prompt injection (инъекция промпта) — это атака, при которой инструкции, спрятанные в тексте, читаемом языковой моделью, уводят её от настоящей задачи. Для кодинг-агентов такие инструкции могут прийти с веб-страницы, из issue, документа или вывода инструмента и заставить агента делать то, о чём вы не просили.
Прямая и косвенная инъекция
Для кодинг-агентов реальный риск — косвенная, ведь агенты постоянно читают внешний контент.
- Прямая: пользователь велит модели игнорировать её правила.
- Косвенная: инструкция спрятана в содержимом, которое обрабатывает модель, например в README, комментарии в коде, issue, веб-странице или ответе MCP-инструмента.
Почему это трудно решить
Модель видит свои инструкции и читаемые данные в одном потоке текста и не всегда может их различить. Поэтому нет известного метода, полностью предотвращающего prompt injection. В OWASP Top 10 для приложений на больших языковых моделях prompt injection стоит на первом месте.
Что может пойти не так с агентами
Чем больше у агента инструментов и доступа, тем больший ущерб может нанести удачная инъекция.
- Утечка секретов, таких как файлы .env или токены.
- Установка вредоносного пакета или запуск разрушительной команды.
- Незаметная закладка в коде, которую трудно найти.
- Использование MCP-инструмента для действий в сервисе, к которому у агента есть доступ.
Защита
Одной меры недостаточно; цель — ограничить ущерб, даже если атака прошла.
- Минимум привилегий: давайте агенту только инструменты и доступ, нужные для задачи.
- Всегда требуйте подтверждения для разрушительных действий и всего, что выходит наружу.
- Работайте с недоверенными репозиториями и контентом в изолированной среде, например в контейнере или VM.
- Устанавливайте MCP-серверы только из источников, которым доверяете.
- Просматривайте изменения агента перед слиянием.
Защитные меры в AgentVera
В AgentVera доступ агентов к вашим серверам и базам данных по умолчанию выключен, а рискованные действия приходят к вам.
- Автоодобрение одобряет только безопасные запросы, такие как чтение и тесты. Команды с перенаправлением (>), $() или обратными кавычками никогда не одобряются автоматически, а такие команды, как git push и rm, всегда спрашивают вас (Pro и Team).
- Доступ агентов по SSH по умолчанию выключен для каждого сервера. Когда он включён, агенты никогда не видят данные подключения или пароль, а каждый запрос проходит через ваши правила и записывается в журнал (Pro и Team).
- Доступ к базам данных тоже выключен по умолчанию. Когда он включён, он начинается в режиме только чтения, а каждый запрос агента записывается в журнал (Pro и Team).
- Секретные значения для MCP-серверов хранятся в связке ключей вашей операционной системы.
- АвтоподтверждениеПодтверждайте безопасные запросы Claude Code без вопросов; рискованные по-прежнему приходят к вам.
- SSH и SFTPСохранённые серверы, зашифрованное хранилище SSH, проброс портов, двухпанельная передача файлов и агенты на сервере.
- Менеджер баз данныхТаблицы, SQL-редактор, ER-диаграммы и доступ агентов для PostgreSQL, MySQL и SQLite.
FAQ
Можно ли полностью предотвратить prompt injection?
Ни одним из известных сегодня методов. Риск снижают ограничением прав, требованием подтверждения критических действий и изоляцией агента.
Могут ли атаковать моего кодинг-агента, пока он читает веб-страницу?
Да. Скрытый текст на странице может выглядеть для агента как инструкция. Поэтому агент, читающий веб-контент, не должен иметь возможности запускать разрушительные команды без подтверждения.
Уязвимы ли MCP-серверы для prompt injection?
Да, потому что описания инструментов и их результаты попадают в контекст модели. Используйте серверы, которым доверяете, и будьте осторожны с инструментами, подтягивающими внешний контент.
Чем prompt injection отличается от jailbreak?
Jailbreak — это попытка пользователя обойти правила безопасности модели. Prompt injection — обычно когда третья сторона прячет инструкции в содержимом, которое обрабатывает модель, чтобы использовать приложение в своих целях.