Статья Обнаружение открытых LLM и MCP-серверов в интернете: OSINT-разведка GenAI-поверхности атаки

Разобранный серверный модуль на антистатическом коврике с открытым портом, светящимся красным. Экран диагностики выводит строку об уязвимости без авторизации, щуп мультиметра касается платы.


175 000 инстансов Ollama и больше 8 000 MCP-серверов торчат в публичном интернете - это данные Bishop Fox (vendor report, требует независимой верификации). В ходе демонстрационного сканирования 91% найденных AI-эндпоинтов не требовал никакой аутентификации. Bitsight TRACE независимо нашла порядка 1 000 открытых MCP-серверов, Knostic - 1 862, и каждый из 119 вручную проверенных инстансов отдал полный список внутренних инструментов без единого запроса на авторизацию.

Для пентестера тут новый класс целей, который стандартные EASM-платформы пока не видят. Self-hosted LLM и MCP-серверы выставлены наружу с полнофункциональным API, отдают имена моделей, системные промпты и перечень инструментов - но при этом остаются за пределами типичного чеклиста внешней разведки. По сути - admin:admin нового поколения, только вместо панели роутера - inference API с доступом к внутренним системам.

Место в kill chain: зачем пентестеру AI-разведка на периметре​

[Применимо: внешний пентест, bug bounty, EASM] Подробнее - в нашем материале про asset management пентест.

Обнаружение открытых AI-эндпоинтов - этап разведки (Reconnaissance по MITRE ATT&CK), который раскладывается на несколько техник:
  • Search Open Technical Databases (T1596) - запросы к Shodan, Censys, FOFA для поиска характерных сигнатур AI-фреймворков
  • Active Scanning (T1595) - тестовые запросы к обнаруженным эндпоинтам для подтверждения типа сервиса и состояния аутентификации
  • Gather Victim Network Information / IP Addresses (T1590.005) - сбор данных об IP-адресах, портах и сервисах AI-инфраструктуры цели
Бизнес-логика атаки: открытый AI-эндпоинт - не просто утечка данных, а точка входа в цепочку эксплуатации. Реальный кейс от CloudSEK AIVigil показывает цепочку от и до: полностью открытый MCP-сервер на Spring Boot-приложении с AI-обработкой голоса -> перечисление инструментов через tools/list -> обнаружение утилиты загрузки аудио, принимающей произвольные URL без валидации -> SSRF к AWS Instance Metadata Service (http://169.254.169.254/) -> действующие IAM-credentials и секреты баз данных. От разведки до кражи credentials - без единого запроса аутентификации.

Масштаб подтверждается данными Endor Labs (цитируется по CloudSEK): из 2 614 проанализированных MCP-реализаций 82% используют файловые операции, уязвимые к path traversal (CWE-22), 67% - API с рисками инъекции кода (CWE-94), 34% подвержены command injection (CWE-78). При этом лишь 13% организаций, по данным Bishop Fox (vendor report), имеют средства контроля безопасности под AI-инфраструктуру. Проблема усугубляется GenAI shadow IT: разработчик разворачивает Ollama или MCP-сервер для внутренних экспериментов, забывает закрыть порт за firewall - через несколько дней Shodan индексирует открытый инстанс. Я вижу это постоянно.

За январь-февраль 2026 года зарегистрировано более 30 CVE, нацеленных на MCP-серверы и инфраструктуру. Из критичных: CVE-2025-6514 в mcp-remote (CVSS 9.6, OS command injection через crafted authorization\_endpoint URL, CWE-78), CVE-2025-49596 в MCP Inspector (CVSS 9.4, отсутствие аутентификации между клиентом Inspector и прокси, CWE-306) и CVE-2025-54136 в Cursor IDE (CVSS 7.2, CWE-78; вектор PR:H - нужен write-доступ к доверенному MCP-конфигу в shared-репозитории или на машине цели). Google Threat Intelligence Group в отчёте Adversarial Misuse of Generative AI (январь 2025) сообщала об использовании Gemini государственными группировками для разведки и подготовки атак; распространение этих методов на MCP-инфраструктуру предполагается, но не подтверждено публичными отчётами.

Shodan-дорки для обнаружения self-hosted LLM и GenAI-эндпоинтов​

1782807705238.webp

Требования к окружению​

  • ОС: GNU/Linux / macOS / Windows (любая)
  • RAM: 2 ГБ+ (работа через веб-интерфейсы и CLI-утилиты)
  • Shodan: бесплатный аккаунт (ограниченное число запросов) или paid API
  • Censys: бесплатный аккаунт (250 запросов/мес)
  • curl: стандартная установка
  • Python 3.8+: для скриптов автоматической верификации (опционально)
  • httpx: для массовой проверки живых хостов (опционально, go install github.com/projectdiscovery/httpx/cmd/httpx@latest)
  • Интернет: обязателен

Ollama: 175 000 инстансов без пароля​

Ollama - самый массовый self-hosted LLM-рантайм. При запуске по умолчанию выставляет HTTP API на порт 11434 без аутентификации. Обращаешься к корневому пути - сервер возвращает строку Ollama is running. Этот fingerprint однозначно идентифицирует фреймворк: по данным AIMap от Bishop Fox, ни один другой рантайм не возвращает эту строку.

Базовый набор Shodan-запросов:
Код:
"Ollama is running" port:11434
http.title:"Ollama" port:11434
"Ollama is running" country:RU
"Ollama is running" org:"Amazon"
Первый запрос ищет характерную строку ответа на дефолтном порту. Третий ограничивает выдачу российским сегментом - полезно при пентесте конкретной организации. Четвёртый фильтрует по облачному провайдеру.

Нашли IP - верификация занимает один запрос: curl http://<ip>:11434/api/tags вернёт JSON с перечнем загруженных моделей. Путь /v1/models отдаёт ту же информацию в OpenAI-совместимом формате. Эндпоинт /api/generate позволяет отправить произвольный промпт и получить ответ. Без токена, без ключа, без rate limiting.

С точки зрения пентестера открытый Ollama означает: Prompt Injection (LLM01:2025 по OWASP LLM Top 10), System Prompt Leakage (LLM07:2025 - если модель использует системный промпт с бизнес-логикой) и Unbounded Consumption (LLM10:2025 - без rate limiting атакующий жжёт GPU-ресурсы цели). По данным AIMap, для Ollama доступны тесты model listing, model weight exposure verification и prompt injection.

vLLM, LiteLLM и проблема OpenAI-совместимых API​

[Применимо: внешний пентест, EASM]

Помимо Ollama, в дикой природе встречаются vLLM, LiteLLM, LocalAI, LangServe, Hugging Face TGI и десятки других inference-фреймворков. Засада в том, что большинство из них выставляет OpenAI-совместимый API на перекрывающихся портах 8000–8080. Универсальный запрос "v1/models" port:8000 ненадёжен для атрибуции конкретного фреймворка - слишком много шума.

По данным Bishop Fox, надёжная идентификация требует проверки framework-specific эндпоинтов в определённом порядке:

ФреймворкПоложительный идентификаторСтатус сигнатуры
Ollama"Ollama is running" на корневом пути, порт 11434Надёжный
vLLMЭндпоинт /version с версией фреймворкаНадёжный
LiteLLMСтрока litellm в ответе /healthНадёжный
LocalAIСобственный health-эндпоинт с характерной сигнатуройНадёжный
Hugging Face TGIСпецифичный health-эндпоинтНадёжный
llama.cppЭндпоинт /slotsПланируемый, не стандартизирован
Triton, LM Studio, JanНет уникальных сигнатурТолько generic /v1/models

Стратегия простая: сначала проверяем framework-specific эндпоинты, только потом fallback на generic /v1/models. Это сразу режет false positive rate. Инстансы, атрибутированные только через /v1/models, маркируются как "generic OpenAI-compatible endpoint" - для отчёта хватит, но точный фреймворк остаётся неизвестным.

В Censys, FOFA и ZoomEye логика та же, отличается синтаксис: body="Ollama is running" в FOFA, services.http.response.body:"Ollama is running" в Censys.

MCP server reconnaissance: обнаружение открытых MCP-серверов в интернете​

1782807741852.webp

Model Context Protocol использует JSON-RPC 2.0 поверх HTTP. MCP-сервер предоставляет инструменты (tools), ресурсы (resources) и промпты (prompts), которые AI-агент может вызывать для взаимодействия с внешними системами. По данным CloudSEK, на GitHub создано более 13 000 реализаций MCP-серверов только за 2025 год. BlueRock Security, по собственным данным, проанализировала более 7 000 MCP-серверов и обнаружила, что 36,7% уязвимы к SSRF (vendor report, требует верификации).

Верификация MCP-эндпоинта через JSON-RPC​

MCP поддерживает два транспорта для удалённого доступа: Streamable HTTP (современный, путь /mcp) и SSE (устаревший, пути /sse + /message). Bitsight TRACE описывает detection payload - стандартное MCP-рукопожатие:
Bash:
curl -s -X POST http://<target>/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":1,"method":"initialize", "params":{"protocolVersion":"2025-06-18", "capabilities":{}, "clientInfo":{"name":"recon","version":"0.1"}}}'
Если MCP-сервер работает без аутентификации, ответ содержит protocolVersion (сервер вернёт согласованную версию - при необходимости можно повторить запрос с 2025-03-26 или другой версией), serverInfo с именем и версией сервера и capabilities - перечень поддерживаемых возможностей. HTTP 200 без предшествующего 401/403 - полное отсутствие авторизации. Для legacy SSE-транспорта схема двухэтапная: GET на /sse для получения session URL, затем POST с initialize на полученный адрес.

По данным Bishop Fox, классификация обнаруженного эндпоинта определяется кодом ответа: HTTP 200 на /v1/models или /mcp - сервер открыт. HTTP 401/403 - аутентификация настроена. Заголовок WWW-Authenticate позволяет определить тип: Bearer/OAuth, Basic auth или API key. Каждый обнаруженный эндпоинт получает поле auth_status, что позволяет агрегировать no_auth_count по всему датасету.

Для Shodan-поиска MCP-серверов можно использовать элементы JSON-RPC ответа: строки "protocolVersion" и "serverInfo" в HTTP body. Подход менее надёжен, чем активная верификация, но даёт первичный список кандидатов для дальнейшей проверки.

Что раскрывает tools/list и почему это опаснее, чем кажется​

После успешной инициализации - вызов метода tools/list. Он возвращает JSON с полным перечнем зарегистрированных инструментов: имена, описания, схемы аргументов. По данным CyCognito, для атакующего это готовая action map: какие системы доступны через MCP-сервер (БД, файловая система, облачные API, shell), какие операции можно выполнить (чтение файлов, HTTP-запросы, выполнение команд), какие аргументы принимает каждый инструмент.

Интроспекция MCP-сервера становится угрозой в комбинации: внешняя доступность + callable-инструменты + отсутствие ограничений. Имена и описания инструментов раскрывают привилегированные операции и внутренние интеграции, сокращая время планирования эксплуатации.

Кейс CloudSEK - наглядная иллюстрация: среди инструментов MCP-сервера телекоммуникационной платформы нашлась утилита загрузки аудио по произвольному URL. Валидации входных данных ноль. Подстановка адреса AWS IMDS превратила её в SSRF-вектор. Паттерн не уникален: CVE-2026-33626 в LMDeploy (CVSS 7.5, CWE-918) описывает ту же ситуацию - функция load_image() в модуле обработки изображений принимала произвольные URL без проверки внутренних IP-адресов.

Отдельно стоит цепочка CVE в mcp-server-git от LF Projects: CVE-2025-68143 (CVSS 6.5, CWE-22) - git_init создавал репозитории по произвольным путям без валидации (затрагивает версии до 2025.9.25); CVE-2025-68144 (CVSS 6.3, CWE-88) - git_diff и git_checkout передавали user-controlled аргументы в CLI без санитизации, позволяя перезаписывать файлы через флаги вроде --output=/path/to/file; CVE-2025-68145 (CVSS 6.4, CWE-22) - обход ограничения --repository через неправильную проверку путей. CVE-2025-68144 и CVE-2025-68145 затрагивали версии до 2025.12.17, CVE-2025-68143 - до 2025.9.25.

AIMap: автоматизация разведки AI-поверхности атаки​

1782807760420.webp

Ручная работа с Shodan-дорками и curl масштабируется плохо - это понимает каждый, кто пробовал прогнать больше десятка хостов руками. Bishop Fox выпустила AIMap - open-source платформу для обнаружения AI-инфраструктуры в масштабах интернета.

AIMap объединяет пять функций: discovery (32 предустановленных Shodan-запроса под известные AI-сигнатуры), fingerprinting (Nuclei-шаблоны и live HTTP-проверки), scoring (оценка от 0 до 10, взвешенная по статусу аутентификации, количеству exposed tools, политике CORS, TLS, утечке системных промптов), testing (protocol-specific модули: prompt injection, tool abuse, model extraction) и visualization (интерфейс с 3D-глобусом и фильтрами).

Покрытие: MCP, Ollama, vLLM, LiteLLM, LocalAI, LangServe, LangChain, Open WebUI, LibreChat, Gradio, Streamlit, ComfyUI, Stable Diffusion, Hugging Face TGI и generic inference API. По заявлению Bishop Fox, оценка выше 7 баллов обычно указывает на эксплуатабельные условия - unauthenticated эндпоинт с code execution в комбинации с exposed system prompts.

Модули discovery и fingerprinting работают в read-only режиме. Активные модули атак требуют явного подтверждения цели оператором - ответственность за соблюдение законодательства на операторе.

Статус инструмента: AIMap выпущен Bishop Fox, open source, доступен на GitHub. Данные об активности репозитория на момент написания отсутствуют - проверьте текущий статус перед использованием.

ПараметрAIMapРучные Shodan-доркиEASM-платформы (CyCognito)
AI-специфичностьДа, 32 запроса + fingerprintsРучная настройка под каждый фреймворкНачальная поддержка MCP
Scoring0–10, взвешенныйНетИнтегрирован в общий risk score
Активное тестированиеДа (opt-in)НетНет
СтоимостьБесплатноShodan APIКоммерческая лицензия
Обнаружение partial authНа roadmapНетНет

Ограничения и когда техники не работают​

[Применимо: все сценарии разведки AI-инфраструктуры]

Атрибуция OpenAI-совместимых API. Множество фреймворков выставляют одинаковый /v1/models на портах 8000–8080. Generic Shodan-запрос даёт массу false positive. Triton, LM Studio, llama.cpp и Jan не имеют надёжных уникальных сигнатур - определить конкретный фреймворк без framework-specific эндпоинтов невозможно.

Частичная аутентификация. MCP-сервер может требовать auth на одних путях и пропускать на других. Обнаружение таких неконсистентностей - открытая задача: AIMap планирует эту функцию, но в текущем релизе её нет. CVE-2025-49596 в MCP Inspector - прямой пример: отсутствие аутентификации между клиентом Inspector и прокси давало RCE, хотя основной сервер мог быть защищён.

CDN и reverse proxy. Эндпоинты за Cloudflare или API gateway могут не индексироваться Shodan и Censys. Их обнаружение требует активного сканирования конкретных IP-диапазонов цели.

Honeypots. Bitsight в ходе исследования обнаружила потенциальные MCP-honeypots. Как отличить honeypot от реального сервера на этапе разведки - вопрос открытый.

Динамичность. AI-инфраструктура меняется быстрее традиционных сервисов. По данным CyCognito, MCP-поверхность "высокодинамична": новые инструменты добавляются через конфигурацию вне стандартных процессов деплоя. Снимок поверхности устаревает за часы.

Юридические ограничения. Поиск через Shodan/Censys - пассивная разведка. Отправка initialize и tools/list к чужому MCP-серверу - активное сканирование, требующее авторизации. Scope пентеста должен явно включать AI-инфраструктуру.

Чеклист: AI-разведка на внешнем пентесте​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Процедура занимает 30-60 минут дополнительного времени на фазе разведки и заметно расширяет карту атаки.

AI-разведка уже включается в методологии ведущих EASM-вендоров (CyCognito, Bishop Fox AIMap) - практика переходит в стандарт. Сейчас окно: организации развернули AI-компоненты быстрее, чем обновили процессы управления внешней поверхностью атаки. По данным глобального опроса, который цитирует CyCognito, 49% ИТ-руководителей не имеют полной видимости даже собственных традиционных активов - AI-инфраструктура выпадает из поля зрения тем более.

Проблема глубже, чем показывают цифры. MCP-сервер - не обычный REST API с CRUD-операциями. Это прокси к набору инструментов, который меняется через правку конфигурации без деплоя. CyCognito точно формулирует: MCP - это callable surface, риск которого определяется тем, какие инструменты exposed и на какие системы они имеют доступ. Стандартные ASM-решения этот перечень не отслеживают.

Я вижу одну и ту же картину: команда разработки подключает MCP-сервер к AI-агенту, забывает закрыть HTTP-порт, через неделю Shodan индексирует tools/list с функциями вроде exec_shell и read_file. Мы наблюдаем проблему "дефолтных настроек", только вместо admin:admin - полностью открытый inference API с доступом к внутренним системам. Разница в blast radius: один открытый MCP-сервер может оказаться шлюзом к нескольким внутренним сервисам одновременно.

Если в вашем чеклисте внешней разведки до сих пор нет AI-дорков - вы оставляете на столе целый класс находок, которые через год будет стыдно пропустить. На WAPT эту цепочку - от Shodan-дорка до SSRF через MCP - проходят в модуле внешней разведки с лабами.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab