
Descubrir servicios de IA expuestos
Plataforma de descubrimiento y pruebas de seguridad a escala de Internet para infraestructura expuesta de agentes de IA.
AIMap encuentra, identifica y prueba la seguridad de endpoints de IA expuestos públicamente — servidores MCP, instancias Ollama, proxies vLLM/LiteLLM, cadenas LangServe, aplicaciones Gradio, nodos ComfyUI y más. Piensa en Shodan, pero diseñado específicamente para la superficie de ataque de agentes de IA.
Creado por Bishop Fox.
Advertencia Esta herramienta está destinada únicamente a pruebas de penetración autorizadas e investigación de seguridad. Solo debes usar AIMap contra sistemas que poseas o para los que tengas permiso explícito por escrito. El acceso no autorizado a sistemas informáticos es ilegal. Bishop Fox no asume ninguna responsabilidad y no se hace responsable del mal uso o daño causado por esta herramienta. Úsala de forma responsable.
┌─────────────┐ ┌──────────────┐ ┌───────────┐
│ React SPA │────▶│ FastAPI │────▶│ MongoDB │
│ (Vite) │ WS │ Backend │ │ │
└─────────────┘ └──────┬───────┘ └───────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Shodan │ │ Nuclei │ │ Redis │
│ API │ │ Scanner │ │ Streams │
└──────────┘ └──────────┘ └──────────┘
Backend — Python/FastAPI con MongoDB asíncrono (Motor), Redis Streams para streaming de registros de ataque, y un motor de descubrimiento que orquesta consultas Shodan → comprobaciones de actividad httpx → escaneos de plantillas Nuclei → pipeline de enriquecimiento.
Frontend — React 18 + TypeScript + Tailwind CSS + shadcn/ui. Incluye un globo 3D (globe.gl), streaming de ataques en tiempo real vía WebSocket y una interfaz de búsqueda al estilo Shodan.
Escaneo — 5 plantillas Nuclei YAML personalizadas para detección de servidores MCP, enumeración de herramientas MCP, detección de API compatible con OpenAI, detección de LangServe y pruebas de filtración de avisos.
| Protocolo | Método de detección | Consultas Shodan |
|---|---|---|
| MCP (Model Context Protocol) | Transporte SSE, JSON-RPC, rutas /mcp/sse | 4 consultas |
| Ollama | Puerto por defecto 11434, huella del producto | 3 consultas |
| vLLM / LiteLLM / LocalAI | Endpoints /v1/models, /v1/chat/completions | 4 consultas |
| LangServe / LangChain | Endpoints de Playground, marcadores langserve | 2 consultas |
| OpenClaw / Clawdbot | Panel de control, puerto 18789 | 3 consultas |
| Open WebUI / LibreChat | Detección por título | 2 consultas |
| Gradio | Título, marca de agua en el pie de página, hash del favicon | 3 consultas |
| Streamlit | Título, hash del favicon | 2 consultas |
| ComfyUI / Stable Diffusion | Título, detección por puerto | 4 consultas |
| HuggingFace TGI | Marcadores HTML | 1 consulta |
| Inferencia genérica | Rutas /api/generate, /api/tags | 2 consultas |
Cada endpoint recibe una puntuación de riesgo de 0 a 10 calculada a partir de:
| Factor | Impacto en la puntuación |
|---|---|
| Sin autenticación | +4.0 |
| Estado de autenticación desconocido | +1.0 |
| 10+ herramientas expuestas | +2.0 |
| 5+ herramientas expuestas | +1.0 |
Herramienta de riesgo crítico (ej., exec_code, run_shell) | +1.0 cada una |
Herramienta de alto riesgo (ej., query_db, file_read) | +0.5 cada una |
CORS abierto (*) | +1.0 |
| Sin TLS | +0.5 |
| Aviso del sistema filtrado | +0.5 |
| Modelos expuestos | +1.0 |
| Modelo sin censura detectado | +2.0 |
| Registro habilitado (sin invitación requerida) | +1.5 |
| Combinación peligrosa (ej., sin autenticación + herramienta de ejecución de código) | +1.0 cada una |
# Clonar
git clone [email protected]:BishopFox/aimap.git
cd aimap
# Configurar
cp .env.example .env
# Editar .env — como mínimo configurar SHODAN_API_KEY
# Iniciar
docker compose up --build
Esto inicia 4 servicios:
Abre http://localhost para acceder a la interfaz.
# Backend
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Frontend (terminal separada)
cd frontend
npm install
npm run dev # se inicia en http://localhost:5173
Asegúrate de que MongoDB se esté ejecutando localmente en el puerto 27017. Redis es opcional — el backend recurre a buffers en memoria cuando Redis no está disponible.
Crea un archivo .env en la raíz del proyecto:
# Requerido
SHODAN_API_KEY=tu_clave_api_shodan
# Opcional — Censys como fuente de descubrimiento adicional
CENSYS_API_ID=
CENSYS_API_SECRET=
# Opcional — habilita análisis de ataques impulsado por IA
ANTHROPIC_API_KEY=
# MongoDB (los valores por defecto funcionan para desarrollo local)
MONGODB_URI=mongodb://localhost:27017
MONGODB_DB=aimap
# Redis (los valores por defecto funcionan para desarrollo local; opcional)
REDIS_URL=redis://localhost:6379/0
# CORS (por defecto permite todos los orígenes)
CORS_ORIGINS=*
# Modal serverless (despacha escaneos/ataques a contenedores Modal)
MODAL_ENABLED=false
# Autenticación Clerk — ver más abajo
CLERK_ISSUER=
AIMap utiliza Clerk para autenticación. Para habilitarlo:
# .env (raíz del proyecto)
CLERK_ISSUER=https://tu-app.clerk.accounts.dev
# frontend/.env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
Para deshabilitar la autenticación (desarrollo local, demos): deja CLERK_ISSUER vacío o sin configurar. El backend aceptará todas las solicitudes con una identidad de usuario sintética local.