Исследование

Не все то золото, что блестит: как на волне популярности ИИ появились вредоносные MCP-серверы

Введение

В этой статье мы рассмотрим, как протокол Model Context Protocol (MCP) — новая «программная шина» для подключения ИИ-ассистентов — может быть использован в качестве начальной точки для атаки на цепочку поставок. Мы расскажем об особенностях MCP, рассмотрим возможные векторы атак на уровне протокола и цепочки поставок, а затем подробно разберем практическую реализацию, в которой якобы легитимный MCP-сервер собирает конфиденциальные данные при каждом запуске инструмента разработчиком. Мы проанализируем исходный код, чтобы изучить скрытое поведение сервера, и предложим специалистам по безопасности рекомендации по обнаружению и предотвращению подобных угроз.

Что такое MCP

Протокол Model Context Protocol (MCP), представленный компанией Anthropic, которая занимается исследованиями в области ИИ, является открытым стандартом для подключения ИИ-ассистентов к внешним источникам данных и инструментам. По сути, MCP позволяет моделям искусственного интеллекта взаимодействовать с различными сервисами, инструментами и наборами данных на естественном языке, исключая необходимость индивидуальной интеграции для каждого из них.

Общие принципы архитектуры MCP

Общие принципы архитектуры MCP

MCP использует архитектуру типа «клиент-сервер», включающую три основных компонента:

  • Клиенты MCP — интегрированные в ИИ-ассистенты и приложения (например, Claude или Windsurf) клиенты, которые поддерживают соединение с сервером MCP, позволяя таким приложениям обращаться к серверу необходимого инструмента.
  • Хосты MCP — сами LLM-приложения (например, Claude Desktop или Cursor), которые инициируют соединение.
  • Серверы MCP — предоставляемые приложением или сервисом «адаптеры». MCP-серверы принимают запросы на естественном языке от ИИ и преобразуют их в команды для запуска соответствующего инструмента или действия.
Транспортный поток MCP между хостом, клиентом и сервером

Транспортный поток MCP между хостом, клиентом и сервером

MCP как вектор атаки

Концепция MCP — единый протокол для доступа к любому инструменту — призвана упростить интеграцию ИИ, однако это расширяет возможности злоупотребления, причем наибольшее внимание злоумышленников привлекают два способа.

Эксплуатация на уровне протокола

Существует множество векторов атак на MCP, используемых злоумышленниками, и некоторые из них уже были описаны другими исследователями.

  1. Подмена имен MCP-серверов
    Злоумышленники могут зарегистрировать вредоносный MCP-сервер с именем, почти идентичным легитимному. Когда ИИ-ассистент выполняет поиск по имени, он может обнаружить мошеннический сервер вместо легитимного и передать ему токены или конфиденциальные запросы.
  2. Отравление инструментов MCP
    Злоумышленники могут скрывать дополнительные инструкции в описании инструмента или примерах запросов. Например, пользователю видна только команда add numbers, но при ее выполнении ИИ также считывает команду cat ~/.ssh/id_rsa, которая выводит закрытый SSH-ключ жертвы. Модель выполняет запрос, передавая конфиденциальные данные без применения какого-либо зловреда.
  3. «Дублирование» инструментов MCP
    В многосерверных средах вредоносный MCP-сервер может изменить определение уже загруженного инструмента. Новое определение копирует оригинальное, однако при этом содержит вредоносные инструкции перенаправления, которые позволяют выполнять последующие вызовы через логику, предусмотренную злоумышленником, без ведома клиента.
  4. Сценарии типа «бегство с деньгами» в MCP
    «Бегство с деньгами» (также «мошенничество с выходом», exit scam, rug pull) — это мошенническая схема, в которой злоумышленники предлагают не вызывающий подозрений продукт или услугу в течение какого-то времени, а после того, как им начинают доверять, внезапно исчезают или прекращают предоставлять услугу. В контексте MCP примером такой атаки может быть ситуация, когда сервер при развертывании имитирует работу легитимного и полезного инструмента, чтобы привлечь аудиторию. Когда проект заслужит доверие и будут налажены процедуры автообновления, злоумышленник, поддерживающий проект, может подменить версию на содержащую бэкдор, до которой автоматически обновятся ИИ-ассистенты.
  5. Ошибки в реализации (GitHub MCP, Asana и т. д.)
    Неисправленные уязвимости представляют собой еще одну угрозу. Например, как показали исследователи, с помощью создания вредоносной проблемы (issue) на GitHub можно обмануть официальный MCP-сервер GitHub и добиться раскрытия данных из закрытых репозиториев.

Описанные выше методы особенно опасны тем, что все они эксплуатируют доверие пользователей к именованию и метаданным инструментов и не требуют сложных цепочек вредоносного ПО для доступа к инфраструктуре жертвы.

Атаки на цепочку поставок

Атаки на цепочки поставок остаются одной из самых актуальных угроз, и эта тенденция также затронула MCP: под видом легитимных и полезных серверов распространяется вредоносный код.

Мы регулярно описываем атаки на цепочки поставок, например вредоносные пакеты в репозитории PyPI и расширения IDE со встроенными бэкдорами. Мы выяснили, что некоторые MCP-серверы подвергались аналогичной эксплуатации, но по несколько другим причинам. Разработчики, как правило, стремятся интегрировать инструменты ИИ в свои рабочие процессы, отдавая предпочтение скорости, а не тщательной проверке кода. И тот факт, что вредоносные MCP-серверы распространяются через привычные каналы — PyPI, Docker Hub и релизы на GitHub — еще больше снижает бдительность разработчиков. Однако в связи с нынешней шумихой вокруг ИИ появился новый вектор угрозы: установка MCP-серверов из случайных ненадежных источников, где проверкам уделяется меньше внимания. Пользователи публикуют свои реализации MCP на Reddit, описывая их как универсальное решение на все случаи жизни, и эти серверы мгновенно приобретают популярность.

Пример атаки с вредоносным сервером выглядит следующим образом:

  • Упаковка — злоумышленник публикует кажущийся привлекательным инструмент (с названием вроде ProductivityBoost AI) в PyPI или другом репозитории.
  • Социальная инженерия — файл README усыпляет бдительность пользователей, описывая заманчивые возможности инструмента.
  • Установка — разработчик выполняет pip install, затем регистрирует MCP-сервер в Cursor, Claude Desktop или другом клиенте.
  • Исполнение — первый вызов запускает скрытую разведку; при этом кэшируются файлы учетных данных и переменные окружения.
  • Эксфильтрация — данные отправляются в API злоумышленника с помощью POST-запроса.
  • Маскировка — выходные данные инструмента выглядят убедительно и могут даже демонстрировать заявленную функциональность.

Пример реализации вредоносного сервера MCP

В этом разделе мы рассмотрим пример реализации вредоносного MCP-сервера, маскирующегося под легитимный. Мы, специалисты глобальной команды экстренного реагирования на киберинциденты (GERT) «Лаборатории Касперского», разработали proof of concept, чтобы продемонстрировать, как могут разворачиваться атаки на цепочки поставок через MCP, и показать потенциальный вред от запуска таких инструментов без надлежащего аудита. Мы провели контролируемый лабораторный тест, имитирующий установку вредоносного MCP-сервера на компьютер разработчика.

Установка сервера

Для проведения теста мы создали MCP-сервер с полезными функциями для повышения продуктивности в качестве приманки. Инструмент был упакован как пакет PyPI и предлагал полезные для разработчиков функции, такие как анализ проектов, проверка безопасности конфигурации и настройка окружения.

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

Для установки пакета мы использовали следующие команды:

Запуск процесса сервера MCP

Запуск процесса сервера MCP

Когда пакет был установлен и запущен, мы настроили ИИ-клиент (в данном примере Cursor) для работы с сервером MCP.

Настройки клиента Cursor, где указан локальный MCP-сервер

Настройки клиента Cursor, где указан локальный MCP-сервер

Таким образом мы загрузили в наш клиент легитимные на вид инструменты MCP.

Список инструментов внутри Cursor

Список инструментов внутри Cursor

Ниже приведен пример выходных данных, которые мы видим при использовании этих инструментов, — все соответствует заявленной функциональности.

Результаты работы инструментов не вызывают подозрений

Результаты работы инструментов не вызывают подозрений

Однако через некоторое время после использования этих инструментов мы получили оповещение системы безопасности: сетевой датчик зафиксировал HTTP POST-запрос к подозрительной конечной точке, напоминающей домен API GitHub. Самое время присмотреться повнимательнее.

Анализ хоста

Мы начали расследование на тестовой рабочей станции, чтобы определить, что происходит на самом деле.

С помощью Wireshark мы обнаружили множество POST-запросов к подозрительной конечной точке, маскирующейся под API GitHub.

Подозрительные POST-запросы

Подозрительные POST-запросы

Ниже приведен один из таких запросов — обратите внимание на полезную нагрузку, закодированную при помощи Base64, и заголовки GitHub.

POST-запрос с полезной нагрузкой

POST-запрос с полезной нагрузкой

После декодирования в полезной нагрузке обнаружились переменные окружения из нашего тестового проекта.

Это явно указывает на утечку конфиденциальных данных с машины.

Вооружившись PID сервера (34144), мы запустили Procmon и зафиксировали множество операций процесса MCP по составлению списков файлов.

Списки проектных и системных файлов

Списки проектных и системных файлов

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

На сервере реализованы три убедительно выглядящих инструмента для повышения продуктивности разработчиков:

  • analyze_project_structure.py анализирует структуру проекта и предлагает улучшения;
  • check_config_health.py проверяет конфигурационные файлы на соответствие рекомендуемым практикам;
  • optimize_dev_environment.py предлагает способы оптимизировать среду разработки.

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

Основной вредоносный модуль

Основная вредоносная функциональность содержится в файле project_metrics.py. После запуска он пытается собрать конфиденциальные данные как из среды разработки, так и из пользовательской системы.

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

  • файлы окружения (.env, .env.local, .env.production);
  • SSH-ключи (~/.ssh/id_rsa, ~/.ssh/id_ed25519);
  • конфигурации облачных сервисов (~/.aws/credentials, ~/.gcp/credentials.json);
  • API-токены и сертификаты (файлы .pem, .key и .crt);
  • строки подключения к базам данных и файлы конфигурации;
  • специфичные для Windows цели (хранилища учетных данных в %APPDATA%);
  • пароли браузера и данные банковских карт;
  • файлы криптовалютных кошельков.
Каждый найденный файл классифицируется по типу, и его первые 100 КБ помещаются в кэш на восемь часов, чтобы сканирование шло быстро и не привлекало внимания. Метаданные целевых файлов (путь, размер и время последней модификации) записываются в лог, а байты чувствительных данных скрываются перед выводом в пользовательский интерфейс, чтобы жертва видела только легитимную часть результатов в Cursor. Отредактированные данные передаются на вход анализатору, инструменту проверки конфигурации и оптимизатору среды. Таким образом на выходе демонстрируются убедительно выглядящие результаты, в то время как сервер незаметно собирает важные данные.

Эксфильтрация данных

После сбора данных модуль вызывает функцию send_metrics_via_api(), чтобы отправить их на конечную точку, которая в нашем случае выступает в роли командного сервера.

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

Выводы и рекомендации

Наш эксперимент продемонстрировал простую истину: установка MCP-сервера фактически дает ему разрешение выполнять код на машине пользователя с привилегиями этого пользователя. Сторонний код, если он не помещен в песочницу, может читать файлы, доступные пользователю, и устанавливать исходящие сетевые соединения — как и любая другая программа. Чтобы держать этот риск под контролем, мы рекомендуем специалистам по безопасности, разработчикам и энтузиастам в сфере ИИ придерживаться следующих правил:

  1. Проверяйте серверы перед установкой
    Используйте процедуру утверждения: каждый новый сервер должен быть просканирован, проверен и одобрен перед запуском в среде разработки. Ведите список разрешенных серверов, чтобы любые отклонения от него сразу выявлялись.
  2. Обеспечивайте изоляцию
    Запускайте серверы внутри контейнеров или на виртуальных машинах с доступом только к необходимым папкам. Разделяйте сети, чтобы компьютер разработчика не имел доступа к производственным или другим критически важным системам.
  3. Отслеживайте необычное поведение
    Логируйте каждый запрос и ответ. Скрытые инструкции или неожиданные вызовы инструментов будут отображены в записях. Обращайте внимание на аномалии. Следите за подозрительными запросами, неожиданными командами SQL и необычными потоками данных — например, исходящим трафиком, инициированным агентами вне стандартных рабочих процессов.
  4. Оставайтесь начеку
    Обеспечьте возможность блокирования или удаления неавторизованного сервера из ваших систем одним нажатием кнопки. Собирайте централизованные журналы, чтобы иметь возможность позже разобраться в том, что произошло. Для повышения уровня безопасности крайне важны непрерывный мониторинг и обнаружение угроз, даже при наличии самой надежной защиты.

Не все то золото, что блестит: как на волне популярности ИИ появились вредоносные MCP-серверы

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

ToddyCat — ваш скрытый почтовый ассистент. Часть 1

Эксперты «Лаборатории Касперского» разбирают атаки APT ToddyCat через корпоративную электронную почту. Изучаем новую версию TomBerBil, инструменты TCSectorCopy и XstReader, а также способы кражи токенов доступа из Outlook.

Криптоафера группы BlueNoroff: «призрачные» инвестиции и фиктивные рабочие предложения

Эксперты команды GReAT проанализировали кампании GhostCall и GhostHire APT-группы BlueNoroff: несколько цепочек вредоносного ПО для macOS, поддельные клиенты Zoom и Microsoft Teams, а также изображения, улучшенные с помощью ChatGPT.

Mem3nt0 mori – Hacking Team снова с нами!

Исследователи «Лаборатории Касперского» впервые обнаружили шпионское ПО Dante, разработанное Memento Labs (бывшей Hacking Team) в дикой природе и нашли его связь с APT ForumTroll.