
Охота на 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 и анализа ответа. Именно это делает пойманный нами сканер.
Что видят ханипоты: хронология наблюдений
Наша находка — не единственная, но она занимает конкретное место на таймлайне:
Ноябрь 2025 — GreyNoise развернула 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-серверов
Не выставляйте MCP-серверы в интернет без аутентификации. MCP-спецификация с версии 2025-06-18 поддерживает OAuth 2.1 — используйте его
Проверьте, не торчит ли ваш сервер наружу:
# Shodan shodan search '"jsonrpc" "initialize" "protocolVersion"' # Censys services.http.response.body:"protocolVersion" AND services.http.response.body:"initialize"Ограничьте capabilities — не включайте
samplingиrootsесли не нужноМониторьте запросы — JSON-RPC
initializeот неизвестных клиентов = разведка
Для SOC/Blue Team
IDS/WAF правило — детектируйте
"method":"initialize"+"protocolVersion"в HTTP bodySuricata сигнатура (для сетей, где 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;)Docker API — порт 2375 без TLS = гарантированный взлом. Используйте TLS + клиентские сертификаты
Для разработчиков AI-агентов
Принцип минимальных привилегий — каждый MCP tool должен иметь минимальные права
Не доверяйте tool descriptions — они могут быть отравлены (tool poisoning)
Логируйте все вызовы — аудит-трейл MCP-операций необходим для расследований
IOC
Тип | Значение | Контекст |
|---|---|---|
IP |
| Source IP, Orange Polska, Warsaw |
User-Agent |
| HTTP-запросы сканера |
HASSH |
| SSH-2.0-OpenSSH_10.2 |
MCP client |
| Самоидентификация в JSON-RPC |
MCP proto |
| Запрашиваемая версия протокола |
Docker path |
| Image: alpine, Cmd: cat /etc/shadow |
rDNS |
| 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 — проверьте, не смотрит ли ваш сервер в интернет. Вероятно, его уже просканировали.
Данные получены с ханипота в рамках исследования безопасности сетевой инфраструктуры.
