Охота на AI-инфраструктуру: ханипот поймал сканер MCP-серверов

10 марта 2026 года наш мультисервисный ханипот зафиксировал необычную активность. Один IP-адрес за 10 минут методично прошёлся по 8 сервисам — SSH, Telnet, HTTP/HTTPS, MySQL, Docker API, Memcached, Winbox — и среди прочего отправил JSON-RPC запрос инициализации Model Context Protocol (MCP). Это первый задокументированный нами случай, когда MCP-сканирование выступает не как исследовательский инструмент, а как модуль в составе мультипротокольного сканера.

Статья содержит разбор пойманного пейлоада, IOC, Suricata-сигнатуру и Shodan/Censys-дорки для детекции MCP-сканирования.

Что такое MCP и зачем его сканировать

Model Context Protocol — открытый стандарт от Anthropic, позволяющий LLM-агентам (Claude, GPT, Copilot) подключаться к внешним инструментам: файловым системам, базам данных, API, CI/CD. MCP-сервер — посредник между AI-агентом и инфраструктурой.

Проблема: исследование Knostic (июль 2025) через Shodan выявило 1 862 MCP-сервера в интернете; сообщества сообщают о 8 000+ (февраль 2026). Из 119 проверенных Knostic серверов ни один не требовал аутентификации. MCP-спецификация не предусматривает обязательную аутентификацию — OAuth 2.1 добавлен как опциональный в версии 2025-06-18.

Что получает атакующий при доступе к открытому MCP-серверу:

  • Список всех инструментов (tools/list) — файловые операции, shell, API-ключи

  • Вызов любого инструмента без аутентификации

  • Prompt injection через описания инструментов

  • Использование LLM через sampling — сервер может вызвать модель клиента

  • Эксфильтрация данных через tool poisoning

За 2025 год задокументировано как минимум 8 серьёзных инцидентов с MCP — от эксфильтрации всей истории WhatsApp до supply chain атаки через mcp-remote (CVE-2025-6514, 437 000 загрузок).

Что мы поймали

Инфраструктура ханипота

Ханипот включает пять контейнеров:

Контейнер

Порты

Что эмулирует

Cowrie

22, 23

SSH/Telnet с записью команд

Dionaea

21, 80, 443, 445, 1433, 3306, 5060, 5900, 6379, 8080, 9200, 11211, 27017

FTP, HTTP, SMB, MSSQL, MySQL, SIP, VNC, Redis, Elasticsearch, Memcached, MongoDB

Docker API

2375

Незащищённый Docker daemon

Winbox

8291

MikroTik Winbox

PyRDP

3389

RDP MitM proxy

Таймлайн атаки

Один IP — 95[.]51[.]243[.]130 (Orange Polska, Варшава, DSL-подключение ojl130[.]internetdsl[.]tpnet[.]pl) — за 10 минут прошёлся по всем доступным сервисам:

12:29:08  SSH (22)        → TCP connect, закрыл
12:29:08  Telnet (23)     → TCP connect, закрыл
12:30:10  MySQL (3306)    → получил баннер MySQL 5.7.16
12:31:10  HTTP (80)       → GET / (curl/8.7.1)
12:31:10  HTTPS (443)     → GET / (curl/8.7.1)
12:31:10  Memcached(11211)→ команда "stats"
12:31:10  HTTP (80)       → ★ MCP initialize (JSON-RPC)
12:37:54  Docker (2375)   → GET /version
12:37:55  Docker (2375)   → GET /v1.43/containers/json
12:37:56  Docker (2375)   → POST /v1.43/containers/create
                            Image=alpine, Cmd=["cat","/etc/shadow"]
12:38:08  Winbox (8291)   → probe (1 byte)
12:40:10  MySQL (3306)    → повторное подключение
13:35:21  SSH (22)        → SSH-2.0-OpenSSH_10.2, KEX exchange

Ранее (08:27 UTC) тот же IP отправил 10-байтовый пейлоад VPNCONNECT на HTTP-порт — зонд на VPN-сервисы. Это дополнительное подтверждение мультипротокольности.

Обратите внимание: это не брутфорс. Ни одной попытки аутентификации на SSH или MySQL. Сканер собирает информацию — баннеры, версии, доступные сервисы. Единственная «атакующая» операция — попытка создать Docker-контейнер для чтения /etc/shadow.

MCP-пейлоад

Ключевая находка — файл http-d5ot3gbc.tmp, сохранённый Dionaea:

{
  "jsonrpc": "2.0",
  "id": 2634208,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "sampling": {},
      "elicitation": {},
      "roots": {"listChanged": true}
    },
    "clientInfo": {
      "name": "gitmc-org-mcp-scanner",
      "version": "1.0.0"
    }
  }
}

Разберём поле за полем:

method: "initialize" — стандартный MCP handshake. Если на другом конце MCP-сервер, он ответит своими capabilities и server info, после чего клиент может запросить список инструментов через tools/list.

protocolVersion: "2025-06-18" — самая свежая версия спецификации MCP. Сканер актуален.

capabilities — клиент заявляет поддержку:

  • sampling — сервер может запросить генерацию текста у LLM клиента (reverse-доступ к модели)

  • elicitation — сервер может запросить ввод данных от пользователя

  • roots — клиент готов сообщить серверу список рабочих директорий (scope файловых операций)

Это полный набор клиентских capabilities. Сканер заявляет максимальную совместимость, чтобы сервер раскрыл все свои возможности в ответе.

clientInfo.name: "gitmc-org-mcp-scanner" — самоидентификация. Мы проверили: домен gitmc.org нигде не зарегистрирован публично, в GitHub нет проекта с таким именем. Есть легитимный проект GitMCP (MCP-прокси для GitHub-репозиториев) — но это другой инструмент и другой домен.

id: 2634208 — идентификатор запроса. JSON-RPC спецификация не требует последовательных id, но высокое числовое значение может указывать на то, что наш ханипот — далеко не первая цель в этой кампании.

Docker API: не только разведка

Помимо MCP, тот же IP провёл классическую атаку на открытый Docker API:

GET  /version                    → определил версию Docker
GET  /v1.43/containers/json      → получил список контейнеров
POST /v1.43/containers/create    → создать alpine + cat /etc/shadow

Цель — получить хэши паролей хоста через проброшенный Docker socket. User-Agent везде — curl/8.7.1, без кастомизации.

SSH fingerprint

При повторном SSH-подключении в 13:35 сканер выполнил полный KEX exchange:

  • Версия: SSH-2.0-OpenSSH_10.2 (вышел в октябре 2025)

  • HASSH: eeca2460550b9ded084ecf2f70a75356

  • Примечательно: в списке KEX-алгоритмов — mlkem768x25519-sha256 и sntrup761x25519-sha512 (post-quantum криптография, поддержка с OpenSSH 9.9+)

OpenSSH 10.2 с post-quantum KEX на бытовом DSL-подключении — это скорее целенаправленно подготовленная сканирующая система (или residential proxy), чем заражённый роутер.

Контекст: зачем сканировать MCP

Таймлайн инцидентов с MCP (2025)

Источник: A Timeline of MCP Security Breaches

Дата

Инцидент

Последствия

Апрель 2025

Tool poisoning через WhatsApp MCP

Эксфильтрация всей истории чата

Май 2025

Prompt injection в GitHub MCP

Утечка приватных репозиториев через публичный PR

Июнь 2025

Asana MCP — cross-tenant

Проекты одной организации видны другой

Июнь 2025

Anthropic Inspector RCE

Удалённое выполнение кода при отладке

Июль 2025

mcp-remote supply chain (CVE-2025-6514)

Command injection, 437K загрузок

Июль 2025

Filesystem MCP sandbox escape

Доступ к произвольным файлам

Сентябрь 2025

Fake Postmark MCP

Скрытая пересылка email атакующему

Октябрь 2025

Smithery Registry breach

Компрометация 3 000 MCP-серверов

Масштаб проблемы

Как упоминалось выше, Knostic выявил 1 862 MCP-сервера через Shodan, а сообщества сообщают о 8 000+. Ни один из проверенных не требовал аутентификации. С тех пор проблема выросла: Bitsight (декабрь 2025) нашёл ~1 000 серверов без авторизации, некоторые с доступом к Kubernetes-кластерам и shell-командам; Astrix (октябрь 2025) проанализировал 5 200+ open-source серверов и обнаружил, что 53% используют небезопасные статические секреты, а OAuth внедрили лишь 8,5%.

MCP-сервер обычно работает на стандартных HTTP-портах (80, 443, 8080), что делает его невидимым для обычного сканирования портов. Обнаружение требует проверки на прикладном уровне — отправки JSON-RPC initialize и анализа ответа. Именно это делает пойманный нами сканер.

Что видят ханипоты: хронология наблюдений

Наша находка — не единственная, но она занимает конкретное место на таймлайне:

  • Ноябрь 2025GreyNoise развернула MCP-ханипоты трёх конфигураций (без аутентификации, с API-ключом, с «утёкшим» ключом). Результат: все обнаружены за дни, но ни одного MCP-специфичного пейлоада. Только фоновый шум — HTTP-зонды, SSH-тычки.

  • Январь 2026 — в еженедельном OAST-отчёте GreyNoise Labs зафиксирована кампания command injection в mcpServerConfig с OVH IP, с OAST-callback через Interactsh. Первый публичный сигнал активной эксплуатации MCP.

  • Февраль 2026 — исследователь Kai запустил публичный MCP-сервер с honeypot-инструментами (get_aws_credentials). За 135 вызовов — один hit на honeypot-тул через 3 часа после деплоя. Также зафиксировано использование опубликованных security-исследований как карты для поиска целей.

  • Март 2026 (наша находка) — MCP initialize как модуль мультипротокольного сканера, который параллельно проверяет SSH, MySQL, Docker API, Memcached и Winbox.

Динамика очевидна: от «ничего не видим» до «MCP-разведка встроена в массовые сканеры» — четыре месяца.

Что отличает эту находку

До сих пор MCP-сканирование описывалось исключительно в контексте security-исследований. Knostic использовал Shodan, Cisco выпустила mcp-scanner, Pangea — mcpscanner. Все это — инструменты для аудита. GreyNoise в ноябре 2025 не зафиксировала ни одного MCP-специфичного пейлоада на своих ханипотах и сделала вывод: «MCP-серверы обнаруживаются, но пока не атакуются целенаправленно».

Четыре месяца спустя мы зафиксировали MCP-сканирование в составе мультипротокольного сканера, который параллельно проверяет SSH, MySQL, Docker API, Memcached и Winbox. Мы не можем достоверно установить, является ли это единым инструментом или набором скриптов, но паттерн — последовательный обход 8 сервисов с одного IP за 10 минут с попыткой создания Docker-контейнера — характерен для автоматизированного сканера, а не ручного исследования.

Это указывает на то, что MCP-сканирование переходит из фазы «исследователи изучают проблему» в фазу «операционное использование в сканирующих тулкитах». Паттерн знакомый: когда Shodan начал индексировать Kubernetes API, незащищённые кластеры вскоре массово взламывали для криптомайнинга. MCP, по всей видимости, находится на аналогичной траектории.

Рекомендации

Для операторов MCP-серверов

  1. Не выставляйте MCP-серверы в интернет без аутентификации. MCP-спецификация с версии 2025-06-18 поддерживает OAuth 2.1 — используйте его

  2. Проверьте, не торчит ли ваш сервер наружу:

    # Shodan
    shodan search '"jsonrpc" "initialize" "protocolVersion"'
    
    # Censys
    services.http.response.body:"protocolVersion" AND services.http.response.body:"initialize"
    
  3. Ограничьте capabilities — не включайте sampling и roots если не нужно

  4. Мониторьте запросы — JSON-RPC initialize от неизвестных клиентов = разведка

Для SOC/Blue Team

  1. IDS/WAF правило — детектируйте "method":"initialize" + "protocolVersion" в HTTP body

  2. Suricata сигнатура (для сетей, где MCP-трафик не ожидается; в средах с легитимным MCP привяжите к $EXTERNAL_NET):

    alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"MCP Server Scan Detected"; \
      content:"initialize"; content:"protocolVersion"; content:"clientInfo"; \
      content:"jsonrpc"; sid:2026031001; rev:1;)
    
  3. Docker API — порт 2375 без TLS = гарантированный взлом. Используйте TLS + клиентские сертификаты

Для разработчиков AI-агентов

  1. Принцип минимальных привилегий — каждый MCP tool должен иметь минимальные права

  2. Не доверяйте tool descriptions — они могут быть отравлены (tool poisoning)

  3. Логируйте все вызовы — аудит-трейл MCP-операций необходим для расследований

IOC

Тип

Значение

Контекст

IP

95[.]51[.]243[.]130

Source IP, Orange Polska, Warsaw

User-Agent

curl/8.7.1

HTTP-запросы сканера

HASSH

eeca2460550b9ded084ecf2f70a75356

SSH-2.0-OpenSSH_10.2

MCP client

gitmc-org-mcp-scanner v1.0.0

Самоидентификация в JSON-RPC

MCP proto

2025-06-18

Запрашиваемая версия протокола

Docker path

/v1.43/containers/create

Image: alpine, Cmd: cat /etc/shadow

rDNS

ojl130[.]internetdsl[.]tpnet[.]pl

Reverse DNS

MITRE ATT&CK

  • T1595.002 — Active Scanning: Vulnerability Scanning

  • T1046 — Network Service Discovery

  • T1190 — Exploit Public-Facing Application (незащищённый Docker API)

  • T1610 — Deploy Container (попытка создания контейнера)

  • T1613 — Container Discovery

  • T1552.001 — Unsecured Credentials: Credentials In Files (/etc/shadow)

Заключение

MCP — молодой протокол, который стремительно набирает популярность. Вместе с ростом adoption растёт и поверхность атаки. В ноябре 2025 GreyNoise не видела MCP-пейлоадов на ханипотах. В январе 2026 появились первые command injection в MCP-конфиги. В марте 2026 наш ханипот показал, что MCP-разведка уже встроена в мультипротокольные сканеры наряду с SSH, Docker и MySQL.

Если вы используете MCP в production — проверьте, не смотрит ли ваш сервер в интернет. Вероятно, его уже просканировали.


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