メインコンテンツへ移動
AIチュートリアル

MCPサーバー設定のセキュリティリスクを監査する方法

mcp-audit-toolをインストールして使用し、Model Context Protocolの設定をスキャンする方法、12種類の検出ルール、JSONまたはSARIFレポートの生成方法、GitHub Actionsでセキュリティしきい値を適用する方法を解説します。

MCPサーバー設定のセキュリティリスクを監査する方法

mcp-audit-toolの機能

mcp-audit-toolは、Model Context Protocol(MCP)クライアント設定向けの、純粋なPython製コマンドラインセキュリティ分析ツールです。Claude Desktop、Cursor、Windsurf、Cline、Zed、VS Codeなどのクライアントで使用される設定を静的スキャンします。

MCPサーバーは、ファイルの読み取り、コマンドの実行、認証情報へのアクセス、AIアシスタントへのツール提供を行えます。安全でない設定項目が1つあるだけで、秘密情報の漏えい、過剰なファイルシステムアクセス権の付与、信頼できないパッケージのダウンロード、モデルのコンテキストへの指示の注入につながる可能性があります。この監査ツールは、MCPサーバーの実行前にこうしたリスクを特定するのに役立ちます。

このツールにNode.js、Docker、LLM APIキーは必要ありません。Python 3.9以降をサポートし、ターミナル、JSON、SARIF 2.1.0形式のレポートを生成します。

主な機能

  • macOS、Linux、Windows全体で、対応するMCP設定を自動検出します。
  • 秘密情報、コマンド実行、権限、トランスポート、認証、ツールポイズニング、サプライチェーンのリスクを対象とする12のセキュリティルールをチェックします。
  • A+からFまでのセキュリティスコアと評価を算出します。
  • 検出結果に対して、実行可能な修正案を表示します。
  • 機械可読なJSONおよびSARIFレポートをエクスポートします。
  • CI/CDパイプライン向けに、重大度に基づくビルド失敗をサポートします。
  • 将来のチェックを追加できる拡張可能なルールエンジンを使用します。

インストールとセットアップ

方法1:macOSおよびLinuxのインストーラー

READMEには、macOSおよびLinux向けの次の1行インストールコマンドが記載されています。

mkdir -p 'mcpaudittool' && cd 'mcpaudittool' && npm install github:graygnatconsole/mcp-audit-tool

インストーラーはPython 3.9以降の有無を確認し、利用可能な場合はHomebrewを通じてpipxをセットアップして、CLIを分離環境にインストールします。新しいMacでは、必要に応じて先にAppleのコマンドラインツールをインストールしてください。

xcode-select --install

方法2:pipx

pipxは、対応するすべてのプラットフォームで推奨されるインストール方法です。

pipx install git+https://github.com/graygnatconsole/mcp-audit-tool.git

方法3:pip

Python環境にパッケージを直接インストールすることもできます。

pip install git+https://github.com/graygnatconsole/mcp-audit-tool.git

方法4:ソースからインストール

リポジトリをクローンし、開発用依存関係を含めて編集可能モードでインストールします。

git clone https://github.com/graygnatconsole/mcp-audit-tool.git
cd mcp-audit-tool
pip install -e ".[dev]"

初回監査を実行する

インストール後、パスを指定せずにスキャナーを実行すると、マシン上のMCP設定が自動検出されます。

mcp-audit scan

特定の設定を1つスキャンするには、引数としてそのパスを渡します。

mcp-audit scan ~/.cursor/mcp.json

リポジトリには、テストに利用できる、意図的に脆弱性を含めたサンプルも含まれています。

mcp-audit scan examples/vulnerable-claude-config.json

ターミナルレポートには、総合スコア、評価、サーバー数と設定ファイル数、重大度別の件数、影響を受けるサーバー、ルール識別子、推奨される修正方法が含まれます。低い結果では、ハードコードされた認証情報、安全でないシェルコマンド、固定されていないパッケージ、広範なファイルシステムパス、安全でないリモートエンドポイント、疑わしいツールの説明などが特定される場合があります。

設定の自動検出を理解する

ファイルパスを指定しない場合、このツールは対応するMCPクライアントの一般的な場所を検索します。例:

  • macOS、Linux、WindowsのアプリケーションサポートディレクトリにあるClaude Desktopの設定。
  • Cursorの~/.cursor/mcp.json。
  • macOS上のWindsurfの~/.codeium/windsurf/mcp_config.json。
  • 該当するVS CodeのグローバルストレージディレクトリにあるClineの設定。
  • macOSおよびLinux上のZedの~/.config/zed/settings.json。
  • .vscode/mcp.json、.cursor/mcp.json、.mcp.json、mcp.jsonなどのプロジェクトレベルのファイル。

監査範囲を明確にしたい場合は、自動検出に頼らず、正確な設定ファイルを渡してください。

検出ルールを確認する

利用可能なチェック項目を一覧表示するには、rulesコマンドを使用します。

mcp-audit rules

組み込みルールには次のものがあります。

  • MAT-001:サーバーの環境変数に含まれる、OpenAI、Anthropic、GitHub、AWS、Slack、Googleの秘密情報、または秘密鍵のハードコード。
  • MAT-002:ホストの機密環境変数をサーバープロセスに渡している。
  • MAT-003:ラグプルやサプライチェーンのリスクを生む可能性がある、固定されていないnpx、uvx、pipxパッケージ。
  • MAT-004:curlまたはwgetの出力をシェルにパイプしている。
  • MAT-005:rm -rf、sudo、chmod 777、evalなどの危険なコマンド。
  • MAT-006:コマンドインジェクションのリスクを高めるシェルの-cラッパー。
  • MAT-007:/、~、$HOMEをルートとするファイルシステムサーバー。
  • MAT-008:平文HTTPを使用するリモートMCPサーバー。
  • MAT-009:認証が設定されていないリモートMCPサーバー。
  • MAT-010:ツールの説明に含まれる隠し命令の兆候。ツールポイズニングを示唆する可能性があります。
  • MAT-011:自動承認リストに登録された破壊的なツール。
  • MAT-012:ワイルドカード*権限。

JSONおよびSARIFレポートを生成する

別のスクリプトやセキュリティプロセスで検出結果を利用する必要がある場合は、JSONを使用します。

mcp-audit scan --format json --output report.json

GitHub Code ScanningなどのSARIF互換システム向けには、SARIF 2.1.0ファイルを生成します:

mcp-audit scan --format sarif --output results.sarif

これらの形式は、ターミナル出力だけでは不十分な場合に便利です。たとえば、定期監査、ダッシュボード、プルリクエストのチェック、集中型セキュリティレポートなどに利用できます。

重大な検出結果でビルドを失敗させる

--fail-onを使用すると、検出結果が指定した重大度しきい値以上の場合に、コマンドが失敗ステータスを返すようにできます:

mcp-audit scan --fail-on high

ドキュメントに記載されている終了コードは次のとおりです:

  • 0:選択したしきい値以上の検出結果なしでスキャンが完了しました。
  • 1:選択したしきい値以上の検出結果が1件以上ありました。
  • 2:ファイルの欠落、解析エラー、無効なオプションなど、使用方法に関するエラーが発生しました。

GitHub Actionsに監査を統合する

プッシュやプルリクエストの際にプロジェクトレベルのMCPファイルを監査し、その結果をGitHubのSecurityタブにアップロードできます:

name: MCP Security Audit
on: [push, pull_request]

permissions:
  security-events: write

jobs:
  mcp-audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pipx install git+https://github.com/graygnatconsole/mcp-audit-tool.git
      - name: Audit MCP configs
        run: mcp-audit scan .vscode/mcp.json .cursor/mcp.json --format sarif --output results.sarif
      - name: Upload to GitHub Code Scanning
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif

このワークフローはsecurity-events: write権限を付与し、指定した設定ファイルをスキャンして、生成されたSARIFファイルをGitHubのCodeQLアクション経由でアップロードします。

高度な使い方と修正のヒント

サーバーの実行を許可する前に監査する

MCPサーバーの設定を追加または更新するたびに監査を実行してください。npxやuvxなどのパッケージランナーを使用するエントリでは、起動するたびに固定されていないパッケージが変化する可能性があるため、特に重要です。

重大な検出結果に注意する

重大な検出結果には、ハードコードされたシークレット、パイプ経由でシェルに渡すインストーラー、ツール汚染の兆候などがあります。露出した認証情報はシークレットマネージャーに移し、直ちにローテーションしてください。インストーラースクリプトはダウンロードして確認し、チェックサムを固定したうえで、リモートコンテンツを直接シェルにパイプするのではなく、確認済みのローカルコピーを実行してください。

権限を最小化する

ファイルシステムサーバーは、/、~、$HOMEではなく、必要最小限のディレクトリに制限してください。ワイルドカード権限を限定的な権限に置き換え、自動承認リストに追加する前に破壊的なツールを確認してください。

リモートサーバーを保護する

平文のHTTPではなく安全なトランスポートを優先し、リモートMCPサーバーの認証を設定してください。スキャナーは、安全でないトランスポートと認証の欠如の両方を検出するため、リモートアクセスがデフォルトで無防備な状態になるのを防げます。

ルールエンジンを出発点として活用する

このプロジェクトでは、ルールエンジンは拡張可能で、新しいルールの追加に必要なのは小さな関数1つだと説明されています。組織に追加のMCPセキュリティ要件がある場合は、ルールを実装して貢献する前に、リポジトリのコントリビューションガイドラインを確認してください。

まとめ

mcp-audit-toolは、MCPクライアント設定に対する実用的な第一段階のセキュリティチェックを提供します。pipxでインストールし、自動検出されたファイルまたは明示的に指定したファイルをスキャンして、スコアと修正ガイダンスを確認してください。自動化に統合する場合は、JSONまたはSARIFにエクスポートできます。CIにスキャンを追加すると、AIアシスタントが安全でないMCP変更を実行する前に検出できます。