
露出した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スタイルの検索インターフェースを特徴としています。
スキャン — MCPサーバー検出、MCPツール列挙、OpenAI互換API検出、LangServe検出、プロンプト漏洩テストのための5つのカスタムNuclei YAMLテンプレート。
| プロトコル | 検出方法 | 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 を開いてUIにアクセスします。
# バックエンド
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はオプションです — 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 (プロジェクトルート)
CLERK_ISSUER=https://your-app.clerk.accounts.dev
# frontend/.env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
認証を無効にするには (ローカル開発、デモ): CLERK_ISSUERを空のままにするか設定しません。バックエンドはすべてのリクエストを合成されたlocalユーザーIDで受け入れます。
ollama、mcp_protocol、vllm)を選択するか、カスタムShodanクエリを入力しますnet:<cidr>を追加します)Shodanスタイルのクエリ構文で検索バーを使用します。
protocol:mcp # MCPサーバー
auth:none # 認証なし
risk:critical # リスクスコア >= 9.0
risk:high # リスクスコア 7.0 – 8.9
risk:medium # リスクスコア 4.0 – 6.9
risk:low # リスクスコア 1.0 – 3.9
tool:query_db # 特定のツールを公開しているエンドポイント
country:US # 国コードで検索
port:11434 # ポート番号で検索
org:"Amazon AWS" # ホスティング組織で検索(複数語は引用符で囲む)
has:system_prompt # システムプロンプトが漏洩しているエンドポイント
フィルターを自由に組み合わせられます。
protocol:mcp auth:none country:US # 米国の認証なしMCPサーバー
risk:critical tool:exec_code # コード実行ツールがあるクリティカルエンドポイント
protocol:ollama port:11434 # デフォルトポートのOllama
key:valueパターンに一致しないテキストは、すべての索引化されたフィールドに対するフリーテキスト検索として扱われます。
ランディングページには、発見されたすべてのエンドポイントを示すインタラクティブな3D地球儀があります。
templates/ ディレクトリ内のカスタムテンプレート:
| テンプレート | 目的 |
|---|---|
mcp-server-detect.yaml | SSEトランスポートとJSON-RPC機能レスポンスを介してMCPサーバーを検出 |
mcp-tool-enum.yaml | MCPサーバーが公開するツール(名前、説明、入力スキーマ)を列挙 |
openai-compat-detect.yaml | /v1/models を介してOpenAI互換エンドポイントを検出 |
langserve-detect.yaml | 公開されたPlaygroundを備えたLangServeデプロイメントを検出 |
prompt-leak.yaml | 一般的なインジェクション手法によるシステムプロンプト抽出を試行 |
すべてのエンドポイントは /api/ でプレフィックスされます。