>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Python

MCPサーバーに隠れた脅威やバックドアがないか確認する方法

AIアシスタントにサードパーティの拡張機能を接続することは、すぐに当たり前のことになっています。Cursor、Windsurf、Claude Desktopに新しいMCPサーバーを追加し、モデルがドキュメントを読み取ったり、データベースにクエリを実行したり、スクリプトを実行したりできるようにしていますが、実際に実行前にソースコードを読む人はほとんどいません。これは大きなミスです。

外部ツールはモデルのコンテキストとシステムに直接アクセスできます。ツールの説明に微妙な指示(プロンプトインジェクション)が含まれていたり、パッケージが環境変数を外部サーバーに密かに送信したりしている場合、手動で見抜くのは困難です。Cisco AI Defenseのチームは、オープンソースプロジェクトmcp-scannerをリリースしました — MCPサーバーの監査专门设计的命令行工具和Pythonライブラリです。

MCP Scanner

スキャナーできること

このツールは4つのMCPプロトコルエンティティ同時にチェックします:関数描述(tools)、预先配置的提示、静态资源和服务器系统指令。

内部的にはハイブリッド分析システムを実行します。スキャナーはシグネチャマッチングに限定されません — いくつかのアプローチを組み合わせています:

  1. YARAシグネチャ分析。コードとスキーマをチェックし、一般的な攻撃パターン、シェルコマンド呼び出し、サンドボックスエスケープの試みを検出します。ローカルで高速に実行でき、APIキーは不要です。
  2. LLM-as-a-judgeセマンティック検証。ツールスキーマとシステムプロンプトをモデルに送信し(OpenAI、Bedrock、Azure、またはローカルOllamaをサポート)、隠れたインジェクションや関数の説明と実際の動作の不一致を検出します。
  3. ソースコード行動監査。静的アナライザーがPython、TypeScript、Go、Rust、Javaなど8つの言語以上でdocstringを関数本体と照合します。関数が計算機だと主張しながら内部でHTTPリクエストを開始する場合、スキャナーはアラートを発生させます。
  4. PyPIとnpmパッケージのサンドボックス化。ユーティリティはパッケージをダウンロードして隔離されたDockerコンテナで実行し、システムにインストールする前に悪意のあるコードを特定します。

興味深い詳細:リポジトリにはRediness Analyzerが含まれています。20個のエヒューリスティクスを含み、純粋なエンジニアリングの問題を探します:忘れられたタイムアウト、ネットワーク障害の再試行ロジックの欠如、エラー処理の不備など。

ターミナルでのクイックスタート

ユーティリティをインストールする一番簡単な方法はvia uvです:

uv tool install --python 3.13 cisco-ai-mcp-scanner

エディターにすでに設定されているものを確認するだけの場合は、既知のコンフィグのスキャンを実行します:

mcp-scanner --scan-known-configs --analyzers yara --format summary

このコマンドはマシン上のClaude Desktop、Cursor、Windsurfのコンフィグファイルを見つけ、設定されたサーバーに接続して基本的なYARAルールを実行します。

stdio経由で実行されているローカルサーバーをチェックするには起動コマンドを渡します:

mcp-scanner --analyzers yara,prompt_defense --format table \
  stdio --stdio-command uvx --stdio-arg mcp-server-fetch

リモートエンドポイントが実行されている場合、チェックは同じように開始されます:

mcp-scanner --server-url https://mcp.deepwiki.com/mcp --analyzers yara --format summary

ユーティリティは各ツールのセキュリティステータスと検出された脅威のリストを含むサマリーを出力します。

=== MCP Scanner Results Table ===

Scan Target: http://127.0.0.1:8002/sse

Scan Target                   Tool Name     Status     API      YARA     LLM      Severity
-----------------------------------------------------------------------------------------
http://127.0.0.1:8002/sse     exec_secrets  UNSAFE     HIGH     HIGH     HIGH     HIGH
http://127.0.0.1:8002/sse     safe_command  SAFE       SAFE     SAFE     SAFE     SAFE

コードとCI/CDでの使用

このプロジェクトはCLIとしてだけでなく、スタンドアロンのSDKとしても設計されています。バックエンドゲートウェイやツール検証パイプラインに組み込んで、社内の内部レジストリに公開する前に使用すると便利です。

import asyncio
import logging
from mcpscanner import Config, Scanner, set_log_level
from mcpscanner.core.models import AnalyzerEnum

async def main():
    set_log_level(logging.ERROR)

    config = Config(
        llm_provider_api_key="your_llm_api_key"
    )
    scanner = Scanner(config)

    # Проверяем удаленный сервер
    results = await scanner.scan_remote_server_tools(
        "http://127.0.0.1:8000/mcp",
        analyzers=[AnalyzerEnum.YARA, AnalyzerEnum.LLM]
    )

    for res in results:
        status = "OK" if res.is_safe else "ВНИМАНИЕ"
        print(f"Инструмент: {res.tool_name} -> {status}")

asyncio.run(main())

クローズドループパイプライン向けに、staticモードがあります。事前にツールスキーマをJSONにエクスポートし、サーバーを起動したりネットワークリクエストを行ったりせずにオフラインでスキャンできます:

mcp-scanner --analyzers yara static --tools ./output/tools-list.json

心に留めておくべきこと

このプロジェクトはApache 2.0ライセンスの下でオープンソースです。基本的なアナライザー(YARA、pip-audit、Prompt Defense readinessチェック)は完全に自律的に無料で実行されます。

深いセマンティック分析には、LiteLLM経由の任意のLLMのAPIキー、またはOllama経由のローカルで実行されているモデルのいずれかが必要です。Cisco AI Defense Inspect APIエンジンは、すでにエンタープライズセキュリティサービスのサブスクリプションを持っている場合にオプションで接続します。

このツールは、自分でMCPサーバーを構築している開発者がリリース前にセルフチェックとして使用するのにも、社内の内部ワークフローにAIエージェントを統合するチームにも便利です。

関連プロジェクト