mcpField
P
Pentestmcp

Pentestmcp

ローカル
github.com/RamKansalセキュリティ1115 週間前に更新

Pentestmcp について

pentestMCP は、Nmap、Nuclei、ZAP、SQLMap など 20 種類以上のセキュリティ評価ツールを、呼び出し可能なツールとして公開する MCP サーバーです。AI エージェントによるペネトレーションテストを支援したいセキュリティ担当者向けで、依存関係を含めて Docker で実行されます。

主な機能

  1. 0120 種類以上のペネトレーションテストツールを公開
  2. 02stdio によるクライアントとの通信
  3. 03長時間スキャンの非同期な起動と結果取得
  4. 04セマフォによる同時スキャン数の制限
  5. 05OWASP ZAP のアクティブスキャンと AJAX Spider の制御

活用シーン

  1. 01Claude Desktop から許可された対象に Nmap サービススキャンを実行
  2. 02AI エージェントによるサブドメイン探索とディレクトリブルートフォースの支援
  3. 03Active Directory 環境での許可された列挙と検査

MCP 対応

pentestMCP は MCP サーバーとして、セキュリティツールを tools 形式でクライアントホストアプリケーションに公開します。LLM へは直接接続しません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"pentestMCP": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ramgameer/pentest-mcp"
]
}
}
}
起動コマンドdocker run -i --rm ramgameer/pentest-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ociramgameer/pentest-mcp

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MseeP.ai Security Assessment Badge

pentestMCP:MCP を介した AI を活用したペネトレーションテスト

License: MIT

pentestMCP は、Model Context Protocol(MCP)を通じて、LLM と実践的なペネトレーションテストツールをつなぐ強力なブリッジを提供します。このプロジェクトは MCP サーバーとして機能し、厳選された 20 種類以上の標準的なセキュリティ評価ユーティリティ(Nmap、Nuclei、ZAP、SQLMap など)を、呼び出し可能な「ツール」として公開します。これにより、MCP 対応クライアント(Claude Desktop や特定の VS Code セットアップなど)内の AI エージェントが、これらのユーティリティを活用して、自動および対話型のセキュリティ分析タスクを実行できます。

複雑なセキュリティワークフローを自然言語で操作できるようにし、ペネトレーションテストの機能をより利用しやすく、AI 主導の環境に統合しやすくすることを目指しています。この取り組みは、Laurie Kirk 氏の GhidraMCP に着想を得ています。


目次


動画デモ

https://github.com/user-attachments/assets/930c879a-5cb4-478a-b033-f30df0e770a6

基本概念とアーキテクチャ

pentestMCP は MCP 仕様を厳格に遵守し、MCP サーバーとしてのみ機能します。特定の LLM を組み込んだり、直接通信したりすることはありません。やり取りは MCP クライアントホストアプリケーションを介して行われます。

  1. クライアントホストアプリケーション(例:Claude Desktop、カスタムエージェント):pentestMCP に接続し(通常は Docker を介した stdio 経由)、ユーザーとのやり取りを管理して、選択された LLM と連携します。
  2. LLM:ユーザープロンプトとツール定義(クライアントホストを介して pentestMCP から提供されるもの)を受け取ります。コンテキストに基づいて、呼び出すツールを決定します。
  3. pentestMCP サーバー(このプロジェクト):Docker コンテナ内で実行されます。クライアントホストからの tools/call リクエストを待ち受け、対応する基盤ツール(例:nmap)を実行し、結果を返します。
  4. 外部ツール:Docker イメージに含まれる実際のコマンドラインユーティリティです。

このサーバーは Python MCP SDK(mcp.server.fastmcp.FastMCP)を使用して構築され、次の機能を備えています。

  • ツールの検出: Python の型ヒントと docstring を利用して、MCP ツールのスキーマを自動生成します。
  • 並行実行の制御: threading.Semaphore によって、リソースを大量に消費するスキャンの同時実行数を制限します。
  • 非同期スキャンパターン: 長時間実行されるタスク(Nmap、Nuclei、SQLMap、Gobuster)で、起動メソッドと取得メソッドを実装し、MCP 接続のブロックを防ぎます。
sequenceDiagram
    participant User
    participant ClientHost as Client Host (Claude, VS Code)
    participant LLM
    participant PentestMCP as pentestMCP Server (Docker via stdio)
    participant ExtTool as External Tool (e.g., Nmap)

    User->>ClientHost: "Perform Nmap service scan on scanme.nmap.org"
    ClientHost->>PentestMCP: tools/list Request
    PentestMCP-->>ClientHost: List of Tools (including 'run_nmap_scan')
    ClientHost->>LLM: User Prompt + Available Tools Description
    LLM-->>ClientHost: Decision: Use 'run_nmap_scan', target='scanme.nmap.org', args='-sV'
    ClientHost->>PentestMCP: tools/call (name='run_nmap_scan', args={...})
    Note over PentestMCP, ExtTool: pentestMCP executes 'nmap -sV scanme.nmap.org' internally
    PentestMCP-->>ClientHost: tools/call Result (pid, output_path for async or direct output)
    ClientHost->>LLM: Tool Execution Result
    LLM-->>ClientHost: Formulate Final Response
    ClientHost-->>User: "Nmap scan launched/completed. Results..."

主な機能

  • 包括的なツールセット: MCP を介して、20 種類以上の主要なペネトレーションテストツールを統合します。
  • 標準化されたアクセス: stdio によるサーバー起動をサポートするあらゆる MCP クライアントで、複雑なペネトレーションテストのワークフローを利用できます。
  • ノンブロッキングスキャン: 実行時間の長いスキャンを効率的に処理し、操作の流れが滞らないようにします。
  • リソース管理: スキャンの同時実行数を基本的に制限します。
  • ポータブルで再現可能: Docker 化された環境により、すべての依存関係とツールを各プラットフォーム(Windows、macOS、Linux)で一貫して利用できます。
  • Web スキャナーとの統合: OWASP ZAP のアクティブスキャンおよび AJAX Spider 機能を直接制御できます。

前提条件

  • Docker: Docker Desktop(Windows/macOS)または Docker Engine(Linux)をインストールし、実行しておく必要があります。Docker デーモンが起動していることを確認してください。
  • Git: イメージをローカルでビルドする場合にのみ必要です(git clone の手順)。
  • (任意ですが推奨)OWASP ZAP インスタンス: ZAP 関連のツール(run_zap_*、run_active_scan_*、run_ajax_*)を使用する場合に必要です。この ZAP インスタンスは、実行中であり、pentestMCP の Docker コンテナ内からネットワーク経由でアクセスできる必要があります(設定については「クライアントホストとの統合」セクションを参照してください)。

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

最も迅速で信頼性の高いセットアップのため、ビルド済み Docker イメージの使用を推奨します。

🐳 ビルド済み Docker イメージを使用する(推奨)

ビルド済みイメージを使用すると、ローカルでのビルド時間を省けます。また、すべてのツール(gofang、nmap、nuclei など)が依存関係の問題なく正しくインストールされます。

  1. Docker Hub からイメージを取得します:
    docker pull ramgameer/pentest-mcp:latest
    

    ℹ️ 注: 環境によっては、認証が必要な場合や、Docker デーモンが起動していることの確認が必要な場合があります。


🛠️ Docker イメージをローカルでビルドする

⚠️ 重要: 現在、ローカルでのビルドが最も効率的で、サポートされているのは Linux 環境です。

サーバーのコードを変更する場合、最新版を使用する場合、またはビルド済みイメージを利用できない場合は、Docker イメージをローカルでビルドできます。

  1. リポジトリをクローンします:

    git clone https://github.com/ramkansal/pentestMCP.git
    cd pentestMCP
    
  2. Docker イメージをビルドします:

    docker build -t pentest-mcp-server:custom .
    
  3. SecLists をインストールします(任意ですが強く推奨):

    💡 ヒント: Gobuster やファジングユーティリティなど、複数のツールは大規模なワードリストに依存します。これらの特定のスキャンを効果的に実行するには、SecLists リポジトリをクローンする必要があります。

    git clone https://github.com/danielmiessler/SecLists.git seclists
    

クライアントホストとの統合

pentestMCP は Docker 内で動作し、stdio を介してクライアントホストと通信します。ホスト(Claude Desktop、VS Code など)で docker run -i ... を使ってサーバーを起動するよう設定します。

Claude Desktop との統合
  1. 設定ファイルを探す/作成する:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. 設定を編集する: mcpServers セクションを追加または更新します。正しいイメージ名(ramgameer/pentest-mcp:latest またはカスタムタグ)を使用してください。

    {
      "mcpServers": {
        "pentestMCP": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "ramgameer/pentest-mcp:latest"
          ]
        }
      }
    }
    
  3. Claude Desktop を完全に再起動します。

  4. 確認します: README の画像 アイコンを探してください。クリックすると、ペネトレーションテスト用のツールが一覧表示されます。

  5. 操作します: Claude にツールの使用を依頼します(例はドラフトを参照してください)。

VS Code Copilot Chat との統合

統合するには、MCP に対応した Copilot Chat エージェント向けに MCP サーバーを定義するよう、VS Code の設定を構成する必要があります。

  1. 前提条件のインストール: Github Copilot extension と、関連する GitHub Copilot 拡張機能がインストールされていることを確認します。

  2. VS Code の設定を構成: ユーザーまたはワークスペースの settings.json ファイルを開きます(コマンドパレット:「Preferences: Open Settings (JSON)」)。適切なパスの下に MCP サーバーの設定を追加します(このパスは Copilot Chat エージェントの実装によって異なる場合があります。ドキュメントを確認してください)。

    "pentest-mcp": {
        "type": "stdio",
        "command": "docker",
        "args": [
            "run",
            "-i",
            "--rm",
            "ramgameer/pentest-mcp:latest"
        ]
    }
    
  3. VS Code/エージェントを再読み込み: VS Code を再起動するか、該当するコマンドを使用して Copilot エージェントの設定を再読み込みし、変更を反映します。詳細については、該当する Copilot エージェントのドキュメントを参照してください。

  4. 操作: Copilot Chat インターフェースを使用します。エージェントが対応している場合はメンションでツールを呼び出すか、プロンプトに基づいてエージェントにツールを呼び出させます。

ツールリファレンス

サーバーは、機能別に分類されたさまざまなツールを公開します。

  • 偵察と列挙:
    • run_subfinder:ProjectDiscovery の Subfinder を使用してサブドメインを検出します。
    • launch_nmap_scan / fetch_nmap_results:Nmap のネットワークスキャンを実行し、結果を非同期で取得します。
    • run_gobuster_scan / check_gobuster_status:Gobuster を使用したディレクトリ/ファイル/DNS のブルートフォースを非同期で実行します。
    • launch_gofang_scan / fetch_gofang_results:抽出機能を強化したオールインワンの Web クローラーである gofang を実行します。
    • run_harvester / check_harvester_status:OSINT 情報(メールアドレス、ホスト、IP)を収集するために、theHarvester を非同期で実行します。
    • run_dig_tool:DNS dig クエリを実行します。
    • fetch_whois_data:ドメインの WHOIS 情報を取得します。
    • run_curl_tool:HTTP 通信のために cURL コマンドを実行します。
  • 脆弱性スキャン:
    • launch_nuclei_scan / fetch_nuclei_results:ProjectDiscovery の Nuclei を使用したテンプレートベースの脆弱性スキャンを非同期で実行します。
  • Web アプリケーション分析:
    • launch_arjun_scan / fetch_arjun_results:Arjun を使用して隠れた HTTP パラメーターを特定します。
  • エクスプロイト支援:
    • run_searchsploit:Searchsploit を使用して、ローカルの Exploit-DB データベースを検索します。
    • run_sqlmap_tool / check_sqlmap_status:SQL インジェクションテストのために SQLmap を非同期で実行します。
  • Active Directory 分析(ad_* ツール):
    • 列挙: ad_user_enum、ad_shares_enum、ad_smb_signing_check、ad_certipy_enum、ad_ldap_dump、ad_bloodhound_collect
    • 攻撃/強制: ad_asreproast、ad_kerberoast、ad_password_spray、ad_coerce_petitpotam、ad_coerce_printerbug、ad_responder_poison、ad_relay_setup
    • 認証情報/ドメイン操作: ad_check_credentials、ad_secrets_dump、ad_dcsync

Star History Chart

セキュリティに関する考慮事項

  • 実行権限: ツールは Docker 内で appuser として実行されますが、Docker 自体はホストの権限で実行されます。ファイルを変更したり、システムへの昇格されたアクセス権を必要としたりするツールには注意してください。
  • 対象の許可: 重要: 明示的な事前の書面による許可を得ているシステムに対してのみ、これらのツールを使用してください。許可のないスキャンは違法であり、非倫理的です。
  • ネットワークへの公開: ZAP のポート(-p 8888:8888)をマッピングする場合、ホストが信頼できないネットワークに接続されているなら、ホストのファイアウォールでアクセスを制限してください。設定された ZAP API キーにより、インスタンスを制御できます。
  • 入力の検証: MCP では構造化された入力を使用しますが、Python ラッパー関数内で堅牢に処理されていない場合、基盤となるツールが細工された引数に対して脆弱な可能性があります。

貢献

貢献を歓迎します! リポジトリをフォークし、機能ブランチを作成して、プルリクエストを送信してください。すべての貢献において、倫理的なテストのガイドラインを遵守してください。バグ報告や機能の提案は、GitHub Issues からお寄せください。

ライセンス

このプロジェクトは、MIT License の条件に基づいて配布されています。

免責事項

このソフトウェアは、教育目的および許可を得た倫理的なセキュリティテストのみを目的としています。 明示的な許可のないシステムに対する使用は固く禁じられており、違法です。作者および貢献者は、このプログラムの誤用や使用によって生じた損害について、一切の責任を負いません。ご自身の責任で使用し、適用されるすべての法律および契約を遵守してください。

謝辞

このプロジェクトは、Laurie Kirk による画期的な取り組みである GhidraMCP から多大なインスピレーションを受けています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。