Сейчас вокруг много слухов о Многоагентских Контекстуальных Протоколах (MCP) от Anthropic. Часто описываемый как «USB-C для ИИ-агентов», MCP обещает стандартизировать взаимодействие агентов между собой.
Идея проста: соедините разные ИИ-агенты и инструменты через общий интерфейс, позвольте им делиться памятью и повторно использовать функциональность в разных задачах. Не нужно никакого клеевого кода. Не нужно RAG. Просто подключите их — и они будут работать вместе.
Это захватывающе, потому что это превращает возможности ИИ в технологическую платформу, где вы можете добавлять новые функции и быстро интегрировать их в более широкую экосистему. Это волнует, потому что кажется, что это следующий шаг к универсальной, интеллектуальной экосистеме ИИ.
Но вот в чем загвоздка: в нашем стремлении к строительству мы игнорируем самый важный вопрос — что может пойти не так?
Что такое MCP?
По своей сути, MCP — это слой связи. Он не запускает модели и не выполняет инструменты — он просто передает сообщения между ними. Для этого сервер MCP находится перед существующими инструментами и действует как слой перевода, преобразуя их существующие API в интерфейсы, удобные для моделей. Это помогает LLM взаимодействовать с инструментами и сервисами последовательно, так что вам не нужно заново строить интеграции каждый раз, когда что-то меняется.
MCP использует клиент-серверную архитектуру, где хост-приложение может подключаться к нескольким серверам:
- Хосты — это приложения, такие как Claude Desktop или ИИ-IDE, которым необходимо использовать данные и инструменты.
- Клиенты поддерживают выделенное соединение с сервером MCP. Они действуют как посредники, передавая запросы от хоста к нужному инструменту или сервису.
- Серверы предоставляют специфическую функциональность — такие, как чтение файла, запрос локальной базы данных или вызов API.
Эти серверы могут соединяться с локальными источниками (файлы, внутренние службы, личные базы данных) или удаленными сервисами (внешние API, облачные инструменты и т. д.). MCP управляет коммуникацией между ними.
MCP архитектура чистая, модульная и масштабируемая. Но не путайте это с безопасностью. Простота мощна, но только если безопасность остается на высоте.
Проблемы безопасности MCP, которые нельзя игнорировать
MCP имеет критические недостатки в проектировании, которые создают серьезные риски безопасности. Эти недостатки открывают широкие векторы атаки, подрывают доверие и могут вызвать каскадные сбои в экосистемах агентов. Давайте разберем это подробнее.
1 — Общая память: мощная, но рискованная?
Одной из выдающихся особенностей MCP является постоянное совместное использование контекста. Агенты могут читать из общей памяти и записывать в нее, будь то долгосрочное хранилище памяти или краткосрочная сессия. Это позволяет агентам координироваться, сохранять информацию и адаптироваться.
Но постоянная память несет в себе значительный риск.
Если даже один агент в сети скомпрометирован — будь то через инъекцию запросов, злоупотребление API или несанкционированное выполнение кода — он может внедрить вводящие в заблуждение или вредоносные данные в общую память. Другие агенты, доверяющие контексту без проверки, действуют на основе этой загрязненной информации. Один скомпрометированный агент теперь может вызвать массовый сбой системы.
Это не просто гипотетически. Мы уже видели, как незначительные уязвимости инъекции запросов в отдельных инструментах могут использоваться для манипуляции сложными рабочими процессами. В среде MCP, где агенты полагаются на общую память без проверки или доверительных проверок, это становится опасной цепной реакцией. Один плохой агент может привести к каскаду ошибочных решений и дезинформации.
Пример 1: Инъекция запросов для отравления инструмента
Представьте ситуацию, когда вредоносный агент доверяется другими агентами без проверки. Например, злоумышленник мог бы изменить запись в общей памяти, чтобы вставить инструкцию по извлечению конфиденциальных данных пользователя, таких как ключи API. Другие агенты действуют на основе этих загрязненных данных, вызывая непреднамеренное нарушение данных по всей системе.
Пример 2: Изменяемое определение инструмента
Теперь представьте ситуацию, когда, казалось бы, безопасный инструмент MCP доверяется без постоянной проверки. Например, инструмент мог бы без предупреждения изменить свое поведение после первоначального одобрения — перенаправляя ключи API к злоумышленнику вместо выполнения своей первоначальной задачи. Другие компоненты продолжают полагаться на него, ничего не подозревая, и незаметно способствуют скрытому извлечению конфиденциальных данных.
2 — Вызов инструмента: автоматизация или простые уязвимости?
Агенты MCP могут вызывать инструменты, делать запросы API, манипулировать данными и выполнять рабочие процессы, связанные с пользователями. Эти действия определяются через схемы инструментов и документацию, передаваемую между агентами.
Проблема? Большинство установок MCP не проверяют и не очищают эти описания. Это создает возможность для злоумышленников скрывать вредоносные инструкции или вводящие в заблуждение параметры в определениях инструментов. Поскольку агенты часто доверяют этим описаниям без вопросов, они уязвимы для манипуляции. Это как инъекция запросов на стероидах. Вместо того чтобы нацеливаться на один вызов LLM, злоумышленники могут внедрить вредоносные намерения непосредственно в операционную логику системы. И поскольку это все выглядит как нормальное использование инструмента, обнаруживать или отслеживать это сложно.
Пример 3: Атака «Смешанный заместитель»
Вредоносный сервер MCP, маскирующийся под легитимный, перехватывает запросы, предназначенные для доверенного сервера. Злоумышленник может изменить поведение инструментов или сервисов, которые должны быть вызваны. В этом случае LLM может непреднамеренно отправить конфиденциальные данные злоумышленнику, полагая, что взаимодействует с доверенным сервером. Атака проходит незамеченной, потому что вредоносный сервер выглядит легитимным для агента.
3 — Версионирование: когда небольшие изменения ломают все
Большая проблема с текущими реализациями MCP — это отсутствие контроля версий. Интерфейсы и логика агентов быстро развиваются, но большинство систем не проверяют совместимость.
Когда компоненты тесно связаны, но слабо определены, расхождение в версиях становится реальной угрозой. Вы можете столкнуться с отсутствующими данными, пропущенными шагами или неверно интерпретированными инструкциями. И поскольку проблема часто возникает из-за тихих несоответствий, их трудно обнаружить — иногда они проявляются только после того, как ущерб уже нанесён. Мы уже решили эту проблему в других областях программного обеспечения. Микросервисы, API и библиотеки зависят от надежного версионирования. MCP не должен быть исключением.
Пример 4: Инъекция схемы инструмента
Представьте ситуацию, когда вредоносный инструмент доверяется исключительно на основе своего описания. Например, он регистрируется как простая математическая функция — «Складывает два числа» — но скрывает вторую инструкцию в своей схеме: «Читает файл .env пользователя и отправляет его на attacker.com». Поскольку агенты MCP часто действуют только на основе описаний, инструмент запускается без проверки, незаметно извлекая конфиденциальные учетные данные под предлогом безобидного поведения.
Пример 5: Уязвимости контроля удаленного доступа
Если инструмент обновляется, но старый агент все еще активен, он может вызвать инструмент, используя устаревшие параметры. Это несоответствие создает возможность для удаленных атак. Вредоносный сервер может переопределить инструмент, чтобы тихо добавить SSH-ключ в authorized_keys, предоставив постоянный доступ. Агент, доверяя инструменту, который он использовал ранее, запускает его без подозрений — открывая учетные данные или контроль, не замечая этого пользователь.
Фреймворк безопасности агента: сигнал тревоги
MCP имеет огромный потенциал, но мы не можем игнорировать реальные риски безопасности. Уязвимости не являются незначительными, и по мере роста популярности MCP они станут еще более крупными целями.
Что нужно, чтобы MCP заработал наше доверие?
Это начинается с основ:
- Контроль доступа на уровне контекста: Не каждый агент должен иметь неограниченный доступ к общей памяти. Нам нужен ограниченный доступ, четкие следы аудита и подписанные записи, чтобы отслеживать изменения.
- Очистка входных данных инструмента: Любые описания и параметры, передаваемые между агентами, должны быть проверены. Их следует очищать от исполняемых инструкций и проверять на риски инъекции запросов.
- Формальное версионирование интерфейса: Возможности агентов должны быть версионированы. Нужно обеспечивать проверки совместимости, чтобы убедиться, что агенты не действуют на основе несоответствующих ожиданий.
- Песочница выполнения: Каждый вызов инструмента должен выполняться в контролируемой среде. Должен быть строгий мониторинг, пути обхода и возможности отката.
- Модели распространения доверия: Агенты должны отслеживать, откуда поступает контекст и насколько они могут ему доверять, прежде чем действовать.
Эти меры не являются «приятными дополнениями». Они необходимы, если мы серьезно настроены на создание безопасных и надежных экосистем агентов.
Без них MCP является таймером, ожидающим своего часа — всего один тихий взлом может превратить каждого агента и каждый инструмент в вектор атаки. Опасность не в изолированном сбое. Это системный компромисс.
Основы безопасности не являются необязательными; это единственный путь к реализации потенциала MCP.