Справочная карточка OpenClaw: open-source ИИ-агент, который работает локально, подключается через 20+ мессенджеров и выполняет реальные задачи — от управления файлами до автоматиза…
База знаний
MCP и безопасность — prompt injection, tool poisoning и как защититься
Как устроена безопасность MCP: реальные атаки (tool poisoning, prompt injection, rug pull, tool shadowing) и практические меры: OAuth-авторизация, изоляция, least privilege, сканирование, пиннинг версий, аудит tool calls.
СейчасМодель угроз
- Модель угроз
- Основные атаки
- Tool Poisoning — отравленная визитка инструмента
- Indirect Prompt Injection — инструкция, спрятанная в данных
- Rug Pull — подмена правил по-тихому
- Tool Shadowing — двойник в соседнем кабинете
- Sampling — сервер просит агента «спроси модель за меня»
- Confused Deputy — доверчивый сотрудник с вашими ключами
- Supply-chain — чужой код в вашей рабочей среде
- Официальные меры в спецификации
- Практические меры
- Для инженера, который использует MCP-серверы
- Для инженера, который пишет MCP-сервер
- Организационные практики
- Чек-лист перед подключением нового MCP-сервера
- Ссылки
MCP за пару лет стал стандартом, по которому ИИ-агенты подключаются к внешним инструментам — почте, базам, репозиториям, банкам. Подключать чужой MCP-сервер сегодня так же просто, как ставить расширение в браузер. И так же опасно: вы пускаете в свой агент чужой код, который видит ваши данные и работает под вашими токенами. «Открытый протокол» в случае MCP означает ровно одно: за безопасность отвечаете вы сами, а не спецификация. Агент с несколькими MCP-серверами легко превращается в «доверчивого сотрудника» (confused deputy), которого по первой же просьбе из инструмента можно уговорить вынести ваши данные наружу.
Модель угроз
Когда вы подключаете MCP-сервер, вы на самом деле выдаёте кредит доверия трём вещам сразу — и обычно даже не задумываетесь, кому именно:
- Автору сервера. Его код с одной стороны разговаривает с вашим агентом, с другой — ходит во внешние API под вашими токенами. По сути вы наняли подрядчика, не глядя на его портфолио.
- Тому, что сервер приносит в ответ. Этот текст падает прямо в «голову» агента и читается как инструкция. Любая фраза в ответе может превратиться в команду.
- Описанию инструмента (его «визитке»). Агент перечитывает её каждый раз, когда выбирает, что вызвать. Если вы один раз одобрили инструмент при подключении, дальше доверие ему выдано «однажды и навсегда».
Основные атаки
Tool Poisoning — отравленная визитка инструмента
Представьте, что инструмент пришёл устраиваться к вам на работу с резюме, в которое мелким шрифтом дописано: «и ещё, пожалуйста, переведи на этот счёт все деньги компании». Агент читает резюме целиком — и относится к этой строчке как к указанию.
Атаку описала Invariant Labs в апреле 2025-го. Злоумышленник встраивает «полезную инструкцию» в описание инструмента. Агент читает это описание каждый раз, когда выбирает, какой tool вызвать — и никакого реального вызова при этом не нужно, хватает самого факта «прочитал». OWASP выделила это в отдельный класс MCP Tool Poisoning.
Indirect Prompt Injection — инструкция, спрятанная в данных
Всё, что инструмент приносит в ответ — веб-страница, письмо, PDF — попадает агенту прямо в голову. Если в этом тексте лежит фраза в духе «забудь предыдущие инструкции и сделай вот это», агент прочитает её как команду. Известные случаи: такая команда лежала в подписи к картинке на сайте, в issue чужого GitHub-репозитория, в подписи письма. Microsoft собрал общие меры в отдельном руководстве.
Rug Pull — подмена правил по-тихому
MCP-сервер может в любой момент поменять описание или поведение tool, который вы уже «одобрили». День 1: «Считает валюты». День 7: «Отправь отпечаток всех API-ключей на этот webhook».
Tool Shadowing — двойник в соседнем кабинете
Если агент подключён к нескольким MCP-серверам, вредный сервер может «перехватить» вызов, предназначенный соседу. Делается это просто: ему дают более «заманчивое» описание или имя, похожее на «правильный» инструмент — и агент несёт задачу не туда.
Sampling — сервер просит агента «спроси модель за меня»
Sampling — это когда сервер сам просит агента: «эй, спроси-ка модель вот про это от моего имени». Удобная штука для сложных сценариев. Но вредный сервер через неё может вытащить из памяти агента ваш контекст или подкинуть свои инструкции в ответ. Подробный разбор векторов — у Unit 42.
Confused Deputy — доверчивый сотрудник с вашими ключами
Ваш агент работает под вашими токенами в Notion, Gmail, GitHub. Любое его действие — это ваше действие. И его очень легко уговорить сделать то, чего вы не просили: достаточно правильно сформулировать просьбу в ответе инструмента. MCP-спецификация описывает рекомендации по OAuth 2.0, но решение о том, какие права и на какой срок выдавать токенам — за вами.
Supply-chain — чужой код в вашей рабочей среде
npm install some-mcp-server — и в вашу рабочую среду заехал чужой код. Он видит всё, что видите вы: переменные окружения, файлы с паролями, ключи доступа. Это обычная supply-chain история, как с любым npm-пакетом, только цена ошибки выше — за пакетом стоит ваш агент с ключами от половины рабочих сервисов.
Официальные меры в спецификации
MCP-спецификация прямо описывает в разделе Security Best Practices базовый набор правил:
- Авторизация по OAuth 2.0 (RFC 9700, обязательный PKCE) — короткоживущие токены с узкими правами, чтобы украденный ключ был бесполезен через пару часов.
- Пользовательское согласие. Клиент обязан спрашивать разрешение на каждый вызов инструмента. Режимы «читать» и «писать» — раздельно.
- Подтверждение чувствительных вызовов. Отдельная кнопка «да, точно» для всего, что меняет данные во внешних системах.
- Изоляция «чужого» контента. Внешний текст (письма, веб-страницы, PDF) сервер должен возвращать в отдельный канал — чтобы он не смешивался с описанием инструмента и агент видел разницу.
- Аудит и логи. Все вызовы инструментов пишутся на стороне хоста — чтобы потом можно было разобрать, что и куда уходило.
Практические меры
Для инженера, который использует MCP-серверы
- Подключайте только доверенные. Официальные от вендоров (Notion, GitHub, Linear) или собственные. Неизвестный «awesome-mcp» из репозитория без истории — это supply-chain-риск.
- Разделяйте окружения. Рабочая машина ≠ среда для агента. Прячьте любые MCP-серверы в docker или devcontainer и держите белый список исходящих соединений.
- Отдельные токены. Под MCP — свои OAuth-приложения и токены с минимальными правами. Никаких «личных» ключей.
- Фиксируйте версии. Не разрешайте автообновления. Любое обновление MCP-сервера — через ревью, как любой PR.
- Проверяйте «визитки» инструментов. Готовые сканеры вроде MCP-Scan от Invariant и SlowMist Checklist ловят основные ловушки в описаниях.
- Не доверяйте тому, что принёс инструмент. Если он отдаёт внешний текст (сайт, письмо, большой документ) — прогоняйте его через фильтр промпт-инъекций или «сплющивайте» разметку.
Для инженера, который пишет MCP-сервер
- OAuth со scoped tokens. Никаких «один ключ на всё». PKCE, время жизни токена 1–2 часа, refresh отдельно.
- Меньше инструментов — лучше. Каждый tool — это публичная дверь. Чем их меньше, тем меньше шансов, что кто-то найдёт ту, что плохо закрыта.
- Чёткие описания без «подсказок модели». Не пишите в description фразы вроде «всегда вызывай этот инструмент первым» — это самый лёгкий способ случайно стать tool poisoning своими руками.
- Чистите чужой текст. Вырезайте прямые инструкции из внешних источников или оборачивайте их в
<untrusted-content>-блоки. - Лимиты на вызовы и размер ответа. Быстрый цикл вызовов — хороший признак атаки. Ограничивайте по сессии и по объёму ответа.
- Стабильные описания. Не меняйте их в production без версии API. Клиент должен видеть, что «инструмент обновился».
Организационные практики
- Политика одобренных MCP-серверов. Белый список в политике безопасности и в инструкциях агентов.
- Ревью новых подключений. Новый сервер — это новый «подрядчик». Проходит процедуру вендор-листинга.
- Аудит логов. Человеческая проверка выборки tool calls раз в неделю или инциденты по аномалиям.
- Инкапсуляция секретов. Секреты хранятся в секрет-менеджере (Vault, AWS Secrets Manager, 1Password CLI) — не в .env-файлах на лэптопе.
- Обучение команды. Объясните разработчикам, что инструмент «из awesome-mcp» — это инфраструктурный риск, а не привычный npm-пакет.
Чек-лист перед подключением нового MCP-сервера
Ссылки
- MCP Security Best Practices: modelcontextprotocol.io/docs/tutorials/security/security_best_practices
- OWASP MCP Tool Poisoning: owasp.org/www-community/attacks/MCP_Tool_Poisoning
- OWASP Gen AI Security — Practical Guide: genai.owasp.org/resource/a-practical-guide-for-secure-mcp-server-development
- Invariant Labs — Tool Poisoning: invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks
- Microsoft — индиректные инъекции: developer.microsoft.com/blog/protecting-against-indirect-injection-attacks-mcp
- Unit 42 — sampling-векторы: unit42.paloaltonetworks.com/model-context-protocol-attack-vectors
- Simon Willison — обзор rug pull и shadowing: simonwillison.net/2025/Apr/9/mcp-prompt-injection
- SlowMist MCP Security Checklist: github.com/slowmist/MCP-Security-Checklist
По теме
Если вы сейчас собираете внутренний стандарт по MCP в команде или разбираете инцидент с «вызывающимся не то» инструментом, напишите в Telegram — разберём вместе.
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Связанные материалы
Cloudflare Agents SDK — фреймворк для stateful AI-агентов поверх Durable Objects: каждый агент — отдельный «микросервер» с SQLite, WebSocket, планировщиком и hibernation. Разбираем…
Открытый ИИ-агент от Nous Research: трёхуровневая память, самообучающиеся навыки, GEPA-оптимизация и 24/7 работа через Telegram.