Сканеры переключились на AI-инфраструктуру: масштабная разведка MCP-серверов и LLM-интерфейсов зафиксирована в логах веб-хостинга

security

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

Описание

В ходе анализа были обработаны записи Apache и ModSecurity с одного хостинга, обслуживающего несколько низконагруженных виртуальных хостов. Среди них - сайт на WordPress, пара самописных бэкендов и статический религиозный портал. Такой сервер можно назвать типичным представителем "цифрового фона", который миллионами существует в сети и не привлекает внимания профессиональных злоумышленников. Однако именно на нём была зафиксирована активность, которую автор исследования характеризует как ранее не документированную.

Основной объём запросов, заблокированных ModSecurity, составили классические категории: сканирование Spring Boot Actuator, перебор путей .env, попытки доступа к .git/config и флуд через xmlrpc WordPress. Но наряду с этим шумом выделилась группа из примерно 200 запросов, связанных с AI-агентами. Она включает в себя попытки установить соединение по протоколу контекста модели (Model Context Protocol, MCP), зондирование API больших языковых моделей (Large Language Model, LLM), а также поиск файлов с секретами AI-ассистентов. Примечательно, что MCP-рукопожатия поступали с 49 уникальных IP-адресов, что говорит о распределённом, а не точечном характере сканирования.

Ключевой особенностью этих запросов является то, что они не просто обращаются к URL, а корректно реализуют протокол. Каждый POST-запрос к пути /mcp содержал валидное тело JSON-RPC 2.0 с методами инициализации. Сканер отправляет правильно сформированный handshake с реальной версией протокола и ожидает ответа. Если сервер отвечает на такой вызов, следующим шагом злоумышленник пытается перечислить инструменты, которые MCP-сервер предоставляет, а также источники данных, к которым он подключён. По сути, открытый и неаутентифицированный MCP-сервер - это удалённое меню всего, к чему имеет доступ AI-агент: базы данных, файловые системы, внутренние API. Такая уязвимость представляет собой один из наихудших сценариев для безопасности.

Параллельно с попытками обнаружить работающие MCP-серверы сканеры активно собирали конфигурационные файлы AI-ассистентов, таких как Claude и Cursor. Запрошенные пути (например, /.claude/mcp.json, /.cursor/mcp.json, /.vscode/mcp.json) указывают на то, что злоумышленники используют актуальный и точный список, сформированный на основе реальных знаний о структуре хранения настроек этих инструментов. Особого внимания заслуживает применение метода HEAD для проверки файлов с учётными данными (например, /.claude/.credentials.json). HEAD-запрос возвращает только заголовки без тела, что позволяет сканеру экономить трафик и проверять наличие файла перед его загрузкой. Такая оптимизация говорит о зрелой и масштабной кампании, а не о случайном любопытстве.

Также в логах присутствовали запросы к конечным точкам, предназначенным для получения списка моделей LLM. Самые распространённые из них - GET /v1/models (эндпоинт, совместимый с API OpenAI) и GET /api/tags (эндпоинт Ollama). Если хотя бы один из них отвечает без аутентификации, это означает, что на сервере запущена модель, которой может воспользоваться любой желающий. Злоумышленник получает бесплатные вычислительные ресурсы и потенциальную точку для дальнейшего проникновения в сеть.

Вместе с AI-разведкой исследователь обнаружил сопутствующую методику - попытки подделки серверных запросов (Server-Side Request Forgery, SSRF) для кражи токенов облачных метаданных. Запросы вида GET /fetch?url=http://metadata.google.internal/...token были направлены на внутренний сервис метаданных Google Cloud, который возвращает токен сервисного аккаунта. Сканер перебирал различные имена параметров (url, uri, path, dest), чтобы найти любой прокси-эндпоинт, который может перейти по указанному URL. В контексте AI-инфраструктуры это особенно опасно, поскольку MCP-серверы и инструменты для работы с LLM часто включают функции загрузки содержимого по ссылке, что превращает их в готовые SSRF-примитивы.

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

Для специалистов по информационной безопасности и администраторов серверов этот случай служит предупреждением. Атаки на AI-агентов уже стали частью стандартного инструментария интернет-сканирования. Открытый MCP-сервер предоставляет полный удалённый доступ ко всем данным и функциям, к которым подключён AI. Файлы с учётными данными ассистента в корне веб-сервера - это готовые ключи доступа. LLM-интерфейс без аутентификации - бесплатные вычислительные мощности и точка входа в инфраструктуру. Всем трём категориям угроз необходимо уделять внимание как критически важным активам, доступным из сети. Факты сканирования, зафиксированные в логах, показывают, что злоумышленники уже начали охоту.

Индикаторы компрометации

Запрос / Путь Описание
POST /mcp (JSON-RPC initialize) Активный сервер Model Context Protocol для перечисления инструментов и источников данных
GET /sse Транспорт Server-Sent Events, используемый старыми MCP-серверами
/.claude/mcp.json, /.cursor/mcp.json Конфигурация MCP-клиента с конечными точками серверов и иногда API-ключами
/.vscode/mcp.json, /.mcp/config.json Конфигурация MCP на уровне редактора и проекта
HEAD /.claude/.credentials.json Сохранённые учётные данные AI-ассистента по программированию. HEAD проверяет существование файла перед запросом
GET /v1/models, /api/tags Неаутентифицированная конечная точка LLM (совместимая с OpenAI или Ollama)
/fetch?url=...metadata.google.internal SSRF для кражи токена сервисного аккаунта GCP через прокси-эндпоинт
/var/run/secrets/.../serviceaccount/token Токен сервисного аккаунта Kubernetes, получаемый через обход пути или некорректную маршрутизацию

Комментарии: 0