
Обнаружение открытых AI-сервисов
Платформа для интернет-масштабного обнаружения и тестирования безопасности инфраструктуры AI-агентов.
AIMap находит, снимает отпечатки и проверяет на безопасность публично доступные AI-эндпоинты — MCP-серверы, экземпляры Ollama, прокси vLLM/LiteLLM, цепочки LangServe, приложения Gradio, узлы ComfyUI и многое другое. По сути, это Shodan, но специально созданный для поверхности атаки AI-агентов.
Создано Bishop Fox.
Предупреждение Этот инструмент предназначен только для авторизованного тестирования на проникновение и исследований безопасности. Вы должны использовать AIMap только против систем, которые вам принадлежат или на тестирование которых у вас есть явное письменное разрешение. Несанкционированный доступ к компьютерным системам незаконен. Bishop Fox не несёт никакой ответственности за неправомерное использование или ущерб, причинённый этим инструментом. Используйте ответственно.
┌─────────────┐ ┌──────────────┐ ┌───────────┐
│ React SPA │────▶│ FastAPI │────▶│ MongoDB │
│ (Vite) │ WS │ Backend │ │ │
└─────────────┘ └──────┬───────┘ └───────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Shodan │ │ Nuclei │ │ Redis │
│ API │ │ Scanner │ │ Streams │
└──────────┘ └──────────┘ └──────────┘
Бэкенд — Python/FastAPI с асинхронным MongoDB (Motor), Redis Streams для потоковой передачи логов атак и механизмом обнаружения, который оркестрирует запросы Shodan → проверки активности httpx → сканирование по шаблонам Nuclei → конвейер обогащения.
Фронтенд — React 18 + TypeScript + Tailwind CSS + shadcn/ui. Включает 3D-глобус (globe.gl), потоковую передачу атак в реальном времени через WebSocket и поисковый интерфейс в стиле Shodan.
Сканирование — 5 пользовательских YAML-шаблонов Nuclei для обнаружения MCP-серверов, перечисления инструментов MCP, обнаружения API, совместимых с OpenAI, обнаружения LangServe и тестирования утечки промптов.
| Протокол | Метод обнаружения | Запросы Shodan |
|---|---|---|
| MCP (Model Context Protocol) | SSE-транспорт, JSON-RPC, пути /mcp/sse | 4 запроса |
| Ollama | Порт по умолчанию 11434, отпечаток продукта | 3 запроса |
| vLLM / LiteLLM / LocalAI | Эндпоинты /v1/models, /v1/chat/completions | 4 запроса |
| LangServe / LangChain | Эндпоинты Playground, маркеры langserve | 2 запроса |
| OpenClaw / Clawdbot | Панель управления, порт 18789 | 3 запроса |
| Open WebUI / LibreChat | Обнаружение по заголовку | 2 запроса |
| Gradio | Заголовок, водяной знак в подвале, хэш фавикона | 3 запроса |
| Streamlit | Заголовок, хэш фавикона | 2 запроса |
| ComfyUI / Stable Diffusion | Заголовок, обнаружение по порту | 4 запроса |
| HuggingFace TGI | HTML-маркеры | 1 запрос |
| Общий инференс | Пути /api/generate, /api/tags | 2 запроса |
Каждый эндпоинт получает оценку риска от 0 до 10, вычисляемую из:
| Фактор | Влияние на оценку |
|---|---|
| Отсутствие аутентификации | +4.0 |
| Неизвестный статус аутентификации | +1.0 |
| Доступно 10+ инструментов | +2.0 |
| Доступно 5+ инструментов | +1.0 |
Инструмент критического риска (например, exec_code, run_shell) | +1.0 каждый |
Инструмент высокого риска (например, query_db, file_read) | +0.5 каждый |
Открытый CORS (*) | +1.0 |
| Отсутствие TLS | +0.5 |
| Утёк системный промпт | +0.5 |
| Доступны модели | +1.0 |
| Обнаружена нецензурированная модель | +2.0 |
| Регистрация включена (без приглашения) | +1.5 |
| Опасная комбинация (например, нет аутентификации + инструмент выполнения кода) | +1.0 каждый |
# Клонирование
git clone [email protected]:BishopFox/aimap.git
cd aimap
# Настройка
cp .env.example .env
# Отредактируйте .env — как минимум укажите SHODAN_API_KEY
# Запуск
docker compose up --build
Это запустит 4 сервиса:
Откройте http://localhost для доступа к интерфейсу.
# Бэкенд
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Фронтенд (отдельный терминал)
cd frontend
npm install
npm run dev # запускается на http://localhost:5173
Убедитесь, что MongoDB запущен локально на порту 27017. Redis опционален — бэкенд использует буферы in-memory, если Redis недоступен.
Создайте файл .env в корне проекта:
# Обязательные
SHODAN_API_KEY=your_shodan_api_key
# Опционально — Censys как дополнительный источник обнаружения
CENSYS_API_ID=
CENSYS_API_SECRET=
# Опционально — включает AI-анализ атак
ANTHROPIC_API_KEY=
# MongoDB (по умолчанию подходит для локальной разработки)
MONGODB_URI=mongodb://localhost:27017
MONGODB_DB=aimap
# Redis (по умолчанию подходит для локальной разработки; опционально)
REDIS_URL=redis://localhost:6379/0
# CORS (по умолчанию разрешены все источники)
CORS_ORIGINS=*
# Modal serverless (отправляет сканирования/атаки в контейнеры Modal)
MODAL_ENABLED=false
# Clerk auth — см. ниже
CLERK_ISSUER=
AIMap использует Clerk для аутентификации. Чтобы включить:
# .env (корень проекта)
CLERK_ISSUER=https://your-app.clerk.accounts.dev
# frontend/.env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
Чтобы отключить аутентификацию (локальная разработка, демо): оставьте CLERK_ISSUER пустым или не заданным. Бэкенд будет принимать все запросы с синтетической local идентификацией пользователя.