
اكتشف خدمات الذكاء الاصطناعي المكشوفة
منصة اكتشاف واختبار أمني على مستوى الإنترنت للبنية التحتية المكشوفة لوكلاء الذكاء الاصطناعي.
يكتشف AIMap نقاط النهاية المكشوفة علنًا للذكاء الاصطناعي، ويأخذ بصماتها، ويختبرها أمنيًا — خوادم MCP، ومثيلات Ollama، ووكلاء vLLM/LiteLLM، وسلاسل LangServe، وتطبيقات Gradio، وعقد ComfyUI، والمزيد. فكّر في Shodan، لكنه مصمم خصيصًا لسطح الهجوم الخاص بوكلاء الذكاء الاصطناعي.
من تطوير 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. تتميز بكرة أرضية ثلاثية الأبعاد (globe.gl)، وبث هجمات في الوقت الفعلي عبر WebSocket، وواجهة بحث بأسلوب Shodan.
الفحص — 5 قوالب Nuclei YAML مخصصة لكشف خوادم MCP، وتعداد أدوات MCP، وكشف نقاط النهاية المتوافقة مع OpenAI، وكشف LangServe، واختبار تسريب التعليمات.
تستقبل كل نقطة نهاية درجة مخاطر من 0 إلى 10 تُحسب من:
# 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
هذا يشغّل 4 خدمات:
افتح http://localhost للوصول إلى الواجهة.
# 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
تأكد من تشغيل MongoDB محليًا على المنفذ 27017. Redis اختياري — تتراجع الواجهة الخلفية إلى مخازن مؤقتة في الذاكرة عندما يكون Redis غير متاح.
أنشئ ملف .env في جذر المشروع:
# 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 Clerk للمصادقة. للتفعيل:
# .env (project root)
CLERK_ISSUER=https://your-app.clerk.accounts.dev
# frontend/.env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
لتعطيل المصادقة (التطوير المحلي، العروض التوضيحية): اترك CLERK_ISSUER فارغًا أو غير معيّن. ستقبل الواجهة الخلفية جميع الطلبات بهوية مستخدم محلية (local) اصطناعية.
ollama, mcp_protocol, vllm) أو أدخل استعلام Shodan مخصصًاnet:<cidr> إلى كل استعلام)استخدم شريط البحث مع صيغة استعلام بأسلوب Shodan:
protocol:mcp # MCP servers
auth:none # No authentication
risk:critical # Risk score >= 9.0
risk:high # Risk score 7.0 – 8.9
risk:medium # Risk score 4.0 – 6.9
risk:low # Risk score 1.0 – 3.9
tool:query_db # Endpoints exposing a specific tool
country:US # By country code
port:11434 # By port number
org:"Amazon AWS" # By hosting organization (quote multi-word values)
has:system_prompt # Endpoints with leaked system prompts
اجمع عوامل التصفية بحرية:
protocol:mcp auth:none country:US # Unauthenticated MCP servers in the US
risk:critical tool:exec_code # Critical endpoints with code execution tools
protocol:ollama port:11434 # Ollama on default port
أي نص لا يطابق نمط key:value يُعامل كبحث نص حر عبر جميع الحقول المفهرسة.
تتميز الصفحة الرئيسية بكرة أرضية ثلاثية الأبعاد تفاعلية تعرض جميع نقاط النهاية المكتشفة:
قوالب مخصصة في دليل templates/:
جميع نقاط النهاية مسبوقة بـ /api/.
aimap/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI app, lifespan, CORS, routers
│ │ ├── config.py # Pydantic settings from env
│ │ ├── auth.py # Clerk JWT verification (bypass when CLERK_ISSUER empty)
│ │ ├── database.py # Async MongoDB (Motor) connection
│ │ ├── limiter.py # SlowAPI rate limiting
│ │ ├── routes/
│ │ │ ├── endpoints.py # CRUD + search + globe + enrichment
│ │ │ ├── scans.py # Scan lifecycle + execution + WebSocket
│ │ │ └── attack.py # Attack dispatch + Redis Streams + WebSocket
│ │ ├── discovery/
│ │ │ ├── orchestrator.py # Scan pipeline: Shodan → httpx → Nuclei → ingest
│ │ │ ├── shodan_adapter.py # 32 curated Shodan queries + result normalization
│ │ │ ├── nuclei_runner.py # Nuclei subprocess runner + finding parser
│ │ │ └── base.py # SourceAdapter abstract base
│ │ └── services/
│ │ ├── attack_mcp.py # MCP protocol attack engine
│ │ ├── attack_ollama.py # Ollama attack engine
│ │ ├── attack_openclaw.py # OpenClaw/Clawdbot attack engine
│ │ ├── enrichment.py # Shodan/Nuclei enrichment + risk scoring
│ │ ├── live_probe.py # HTTP probing for model/tool enumeration
│ │ ├── search.py # Shodan-style query parser → MongoDB filters
│ │ ├── redis_client.py # Async Redis singleton with fallback
│ │ └── concurrency.py # Semaphore + Redis-based slot limiting
│ ├── Dockerfile
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Routes + Clerk auth wrapper
│ │ ├── pages/
│ │ │ ├── Marketing.tsx # Public landing page with 3D globe
│ │ │ ├── Landing.tsx # Authenticated dashboard with globe
│ │ │ ├── Search.tsx # Endpoint search with query syntax
│ │ │ ├── Explore.tsx # Browse/filter all endpoints
│ │ │ ├── AgentDetail.tsx # Single endpoint deep-dive
│ │ │ ├── TestAgent.tsx # Attack test launcher
│ │ │ ├── Scans.tsx # Scan management
│ │ │ └── Ranges.tsx # CIDR range management
│ │ ├── components/
│ │ │ ├── GlobeVisualization.tsx # globe.gl 3D globe + legend
│ │ │ ├── Layout.tsx # App shell (sidebar + navbar)
│ │ │ └── ui/ # shadcn/ui components
│ │ ├── hooks/useApi.ts # SWR hooks for all API endpoints
│ │ └── lib/api-client.ts # Fetch wrapper with Clerk token injection
│ ├── Dockerfile
│ ├── nginx.conf
│ └── tailwind.config.js
├── templates/ # Nuclei YAML templates
├── docs/ # GitHub Pages static site
├── docker-compose.yml
├── .env.example
└── README.md
تفرض المنصة حدود تزامن عامة لمنع إساءة الاستخدام:
عند استخدام Docker Compose، تُطبق هذه الحدود عبر عدادات Redis (عبر الحاويات). في وضع التطوير المحلي، تتراجع إلى asyncio.Semaphore (عملية واحدة).
لأحمال عمل الفحص الثقيلة، يمكن إرسال الفحوصات والهجمات إلى حاويات Modal:
MODAL_ENABLED=true
عند التفعيل، ستستدعي POST /scans/{id}/run و POST /attack الدالتين modal.Function.from_name("aimap", "run_scan_task") / run_attack_task بدلاً من التشغيل محليًا. يتراجع إلى التنفيذ المحلي إذا فشل إرسال Modal.
رخصة MIT. راجع LICENSE للتفاصيل.
هذا المشروع يُصان بواسطة Bishop Fox.
| البروتوكول | طريقة الكشف | استعلامات 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 | استعلامان |
| OpenClaw / Clawdbot | لوحة التحكم، المنفذ 18789 | 3 استعلامات |
| Open WebUI / LibreChat | كشف قائم على العنوان | استعلامان |
| Gradio | العنوان، العلامة المائية في التذييل، تجزئة الأيقونة المفضلة | 3 استعلامات |
| Streamlit | العنوان، تجزئة الأيقونة المفضلة | استعلامان |
| ComfyUI / Stable Diffusion | العنوان، كشف قائم على المنفذ | 4 استعلامات |
| HuggingFace TGI | علامات HTML | استعلام واحد |
| الاستدلال العام | مسارا /api/generate و /api/tags | استعلامان |
| العامل | تأثير الدرجة |
|---|
| عدم وجود مصادقة | +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 لكل توليفة |
| القالب | الغرض |
|---|
mcp-server-detect.yaml | يكتشف خوادم MCP عبر نقل SSE واستجابة قدرات JSON-RPC |
mcp-tool-enum.yaml | يعدد الأدوات المكشوفة بواسطة خوادم MCP (الأسماء، الأوصاف، مخططات الإدخال) |
openai-compat-detect.yaml | يكتشف نقاط النهاية المتوافقة مع OpenAI عبر /v1/models |
langserve-detect.yaml | يكتشف عمليات نشر LangServe مع playground مكشوف |
prompt-leak.yaml | يحاول استخراج التعليمات النظامية عبر تقنيات حقن شائعة |
| الطريقة | المسار | الوصف |
|---|
GET | /health | فحص الصحة |
GET | /endpoints | قائمة نقاط النهاية (مرقمة الصفحات، قابلة للتصفية) |
POST | /endpoints/search | بحث متقدم بصيغة الاستعلام |
GET | /endpoints/globe | البيانات الجغرافية للكرة الأرضية ثلاثية الأبعاد |
GET | /endpoints/stats | إحصائيات مجمعة |
GET | /endpoints/{id} | تفاصيل نقطة النهاية |
POST | /endpoints/{id}/enrich | تشغيل الإثراء لنقطة نهاية واحدة |
POST | /endpoints/enrich-all | إثراء بالجملة |
GET | /scans | قائمة الفحوصات |
POST | /scans | إنشاء فحص |
POST | /scans/{id}/run | تنفيذ فحص |
GET | /scans/query-presets | الاستعلامات الجاهزة المتاحة في Shodan |
WS | /scans/{id}/progress | تقدم الفحص المباشر |
POST | /attack | إطلاق اختبار هجوم |
WS | /attack/{id}/stream | بث سجل الهجوم في الوقت الفعلي |
GET | /attack/{id}/status | حالة الهجوم |