
Découvrir les services IA exposés
Plateforme de découverte à l'échelle d'Internet et de tests de sécurité pour l'infrastructure d'agents IA exposée.
AIMap découvre, identifie et teste la sécurité des endpoints IA exposés publiquement — serveurs MCP, instances Ollama, proxys vLLM/LiteLLM, chaînes LangServe, applications Gradio, nœuds ComfyUI, et plus encore. Pensez à Shodan, mais spécialement conçu pour la surface d'attaque des agents IA.
Développé par Bishop Fox.
Avertissement Cet outil est destiné uniquement aux tests d'intrusion autorisés et à la recherche en sécurité. Vous devez utiliser AIMap uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test. L'accès non autorisé à des systèmes informatiques est illégal. Bishop Fox décline toute responsabilité et n'est pas responsable de tout usage abusif ou dommage causé par cet outil. Utilisez-le de manière responsable.
┌─────────────┐ ┌──────────────┐ ┌───────────┐
│ React SPA │────▶│ FastAPI │────▶│ MongoDB │
│ (Vite) │ WS │ Backend │ │ │
└─────────────┘ └──────┬───────┘ └───────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Shodan │ │ Nuclei │ │ Redis │
│ API │ │ Scanner │ │ Streams │
└──────────┘ └──────────┘ └──────────┘
Backend — Python/FastAPI avec MongoDB asynchrone (Motor), Redis Streams pour la diffusion des journaux d'attaque, et un moteur de découverte qui orchestre le pipeline : requêtes Shodan → vérifications de disponibilité httpx → scans de modèles Nuclei → enrichissement.
Frontend — React 18 + TypeScript + Tailwind CSS + shadcn/ui. Comprend un globe 3D (globe.gl), la diffusion des attaques en temps réel via WebSocket, et une interface de recherche de type Shodan.
Scanning — 5 modèles Nuclei YAML personnalisés pour la détection de serveurs MCP, l'énumération d'outils MCP, la détection d'API compatibles OpenAI, la détection de LangServe et les tests de fuite de prompt.
| Protocole | Méthode de détection | Requêtes Shodan |
|---|---|---|
| MCP (Model Context Protocol) | Transport SSE, JSON-RPC, chemins /mcp/sse | 4 requêtes |
| Ollama | Port par défaut 11434, empreinte produit | 3 requêtes |
| vLLM / LiteLLM / LocalAI | Endpoints /v1/models, /v1/chat/completions | 4 requêtes |
| LangServe / LangChain | Endpoints Playground, marqueurs langserve | 2 requêtes |
| OpenClaw / Clawdbot | Tableau de bord de contrôle, port 18789 | 3 requêtes |
| Open WebUI / LibreChat | Détection basée sur le titre | 2 requêtes |
| Gradio | Titre, filigrane du pied de page, hash du favicon | 3 requêtes |
| Streamlit | Titre, hash du favicon | 2 requêtes |
| ComfyUI / Stable Diffusion | Titre, détection basée sur le port | 4 requêtes |
| HuggingFace TGI | Marqueurs HTML | 1 requête |
| Inférence générique | Chemins /api/generate, /api/tags | 2 requêtes |
Chaque endpoint reçoit un score de risque de 0 à 10 calculé à partir de :
| Facteur | Impact sur le score |
|---|---|
| Aucune authentification | +4.0 |
| Statut d'authentification inconnu | +1.0 |
| 10+ outils exposés | +2.0 |
| 5+ outils exposés | +1.0 |
Outil à risque critique (p. ex. exec_code, run_shell) | +1.0 chacun |
Outil à risque élevé (p. ex. query_db, file_read) | +0.5 chacun |
CORS ouvert (*) | +1.0 |
| Absence de TLS | +0.5 |
| Prompt système divulgué | +0.5 |
| Modèles exposés | +1.0 |
| Modèle non censuré détecté | +2.0 |
| Inscription ouverte (aucune invitation requise) | +1.5 |
| Combinaison dangereuse (p. ex. aucune authentification + outil d'exécution de code) | +1.0 chacun |
# Clone
git clone [email protected]:BishopFox/aimap.git
cd aimap
# Configure
cp .env.example .env
# Edit .env — at minimum set SHODAN_API_KEY
# Launch
docker compose up --build
Cela démarre 4 services :
Ouvrez http://localhost pour accéder à l'interface.
# Backend
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
# Frontend (separate terminal)
cd frontend
npm install
npm run dev # starts on http://localhost:5173
Assurez-vous que MongoDB s'exécute localement sur le port 27017. Redis est optionnel — le backend bascule sur des tampons en mémoire lorsque Redis est indisponible.
Créez un fichier .env à la racine du projet :
# Required
SHODAN_API_KEY=your_shodan_api_key
# Optional — Censys as an additional discovery source
CENSYS_API_ID=
CENSYS_API_SECRET=
# Optional — enables AI-powered attack analysis
ANTHROPIC_API_KEY=
# MongoDB (defaults work for local dev)
MONGODB_URI=mongodb://localhost:27017
MONGODB_DB=aimap
# Redis (defaults work for local dev; optional)
REDIS_URL=redis://localhost:6379/0
# CORS (default allows all origins)
CORS_ORIGINS=*
# Modal serverless (dispatches scans/attacks to Modal containers)
MODAL_ENABLED=false
# Clerk auth — see below
CLERK_ISSUER=
AIMap utilise Clerk pour l'authentification. Pour l'activer :
# .env (project root)
CLERK_ISSUER=https://your-app.clerk.accounts.dev
# frontend/.env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
Pour désactiver l'authentification (développement local, démos) : laissez CLERK_ISSUER vide ou non défini. Le backend acceptera toutes les requêtes avec une identité utilisateur local synthétique.