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-инфраструктуры цели
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-эндпоинтов
Требования к окружению
- ОС: 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-серверов в интернете
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"}}}'
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-поверхности атаки
Ручная работа с 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 |
| Scoring | 0–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 - проходят в модуле внешней разведки с лабами.
Последнее редактирование модератором: