mcpField
M
Mcpwner

Mcpwner

github.com/Pigyonその他5710 週間前に更新

Mcpwner について

MCPwner は、セキュリティテストツールを LLM 主導のワークフローに統合し、自律的なセキュリティ調査を行う MCP サーバーです。偵察、コード監査、PoC 検証をエージェントに任せたいセキュリティ研究者向けで、すべての発見は共有の台帳に記録されます。

主な機能

  1. 01SAST、SCA、シークレットスキャン、IaC スキャナーの統合
  2. 02偵察、DAST、カバレッジ誘導型ファジング
  3. 03CodeQL の組み込みクエリとカスタムクエリ
  4. 04決定的判定を行う PoC スクリプトサンドボックス
  5. 05ディープマージによる永続的な発見台帳

活用シーン

  1. 01コードベースに対する SAST・SCA スキャンと結果の集約
  2. 02疑わしい脆弱性が悪用可能かどうかの検証
  3. 03許可されたテストにおけるWebアプリケーションの動的テスト

MCP 対応

本プロジェクトは MCP サーバーであり、55 を超えるコンテナ化されたセキュリティツールを MCP クライアントに提供します。発見の管理には upsert_finding や generate_report などのツールを使用します。

詳細

MCPwner

MCPwnerのアナグマのアバター
アナグマにご注意ください

自律型セキュリティ調査のためのModel Context Protocolサーバー

Docker MCP Python License

対応環境:

Kiro Cursor Claude VS Code Windsurf


目次

概要

MCPwnerは、LLMエージェントに包括的なオフェンシブセキュリティツールキットを提供するMCPサーバーです。単一のMCPインターフェースを通じて、コンテナ化された55種類以上のツールを利用できます。SAST、SCA、シークレット検出、IaC、偵察、DAST、カバレッジガイド付きファジング、CodeQL(組み込みクエリとカスタムクエリ)、ヘッドレスブラウザー、OOBコールバックサーバー、決定論的オラクルまたはカスタムオラクルを備えたPoCスクリプトのサンドボックス、そして永続的な検出事項台帳が含まれます。

このアーキテクチャは、エージェント主導の脆弱性調査を目的に設計されています。モデルに依存しない単一のエージェントセッション(Claude、Cursor、Kiro、Gemini、またはMCP対応のコーディングエージェント)が調査フェーズ(偵察、コード監査、PoC検証、敵対的レビュー)を進め、すべての手順を共有の検出事項台帳に記録します。各検出事項は、仮説から実証、検証済みレポートへと進みます。「エクスプロイトがなければ、レポートもありません」。

注:このプロジェクトは現在も開発中です。MCPについて詳しくはこちらをご覧ください。

ワークフロー

MCPwner はツールサーバーであり、LLM エージェントが頭脳となります。一般的な詳細調査の流れは次のとおりです。

フェーズ内容使用する MCPwner ツール
ワークスペース対象をクローンし、スタックを検出しますcreate_workspace、detect_languages
検出既知のパターンを広範囲にスキャンしますrun_sast_scan、run_sca_scan、run_secrets_scan、run_reconnaissance_chain、execute_query
トリアージ誤検知を排除し、到達可能性を証明しますindex_code_facts、query_code_facts、execute_query(カスタム CodeQL)
調査差分とバリアント分析で新たなバグを探しますdiff_discovery、run_fuzzing_scan、カスタム CodeQL
実証決定論的オラクルによる実証検証を行いますrun_poc_scan(サンドボックス)、run_dast_scan、run_utilities_scan(chromium)
レポートオラクルで検証された検出結果のみを公開しますupsert_finding、generate_report

台帳ではディープマージによるアップサートを使用するため、後続フェーズの review 判定が先行フェーズの poc データを上書きすることはなく(その逆も同様です)、調査の途中でエージェントのコンテキストがリセットされた場合も整合性が保たれます。

統合ツール

偵察

README の画像README の画像README の画像README の画像README の画像
SubfinderAmassNmapMasscanffuf
README の画像README の画像README の画像README の画像README の画像
bbothttpxKatanagauArjun
README の画像README の画像
wafw00fKiterunner

静的アプリケーションセキュリティテスト(SAST)

README の画像README の画像README の画像README の画像README の画像
CodeQLPsalmGosecBanditSemgrep

README の画像README の画像README の画像README の画像README の画像README の画像
BrakemanPMDNodeJsScanJoernYASAOpenGrep

ソースコードファジング

README の画像README の画像README の画像README の画像
AtherisJazzerJazzer.jsPHP-Fuzzer

シークレットスキャン

README の画像README の画像README の画像README の画像README の画像
GitleaksTruffleHogdetect-secretsWhispersHawk-Eye

ソフトウェア構成分析(SCA)

README の画像README の画像README の画像README の画像
GrypeSyftOSV-ScannerRetire.js

インフラストラクチャと IaC のセキュリティ

README の画像README の画像README の画像README の画像README の画像
CheckovKICSTerrascanTFSecHadolint

動的アプリケーションセキュリティテスト(DAST)

README の画像README の画像README の画像README の画像README の画像
sqlmapNoSQLMapCommixDalfoxSSTImap

README の画像README の画像README の画像
SSRFmapjwt_toolinteractsh

ユーティリティ

README の画像README の画像README の画像README の画像README の画像
LinguistWireMockMitmproxyaiohttpPlaywright を使用した Chromium

PoC の検証

PoC スクリプトのサンドボックス
決定論的なオラクル実行環境

PoC サンドボックスは、エージェントが作成した Python/bash のエクスプロイトスクリプトを対象ネットワーク内で実行し、決定論的なオラクル判定を返します(終了コードまたは明示的なマーカーに基づく合格/不合格)。これにより MCPwner は、市販の DAST では表現できないロジックバグ、IDOR/BOLA、競合状態、アクセス制御の回避を実証できます。

プラグイン

MCPwner は、ドメイン固有のツールを利用できるオプションのプラグインシステムをサポートしています。プラグインはコアを変更することなく、Docker サービス、カスタムスキャンルール、レポートテンプレートを追加します。MCPwner は、プラグインがインストールされているかどうかにかかわらず動作します。

利用可能なプラグイン
プラグイン説明追加されるサービス
wp-scanWordPress のセキュリティスキャン — Xdebug、WPScan による列挙、PHPGGC のデシリアライズチェーン、CMSeeK CMS 検出、WP 対応の semgrep/joern ルールを備えた WP テスト環境wp-range、wp-db、wpscan-scanner、phpggc-service、cmseek-service
プラグインを有効にする
  1. .env にプラグイン名を追加します:

    PLUGINS=wp-scan
    COMPOSE_PROFILES=sast,dast,...,wp-scan
    
  2. compose ラッパーを使用してサービスを起動します(プラグインの compose ファイルが自動的に含まれます):

    ./scripts/compose.sh up -d --build
    

    または、-f を手動で重ねて指定します:

    docker compose -f docker-compose.yaml -f plugins/wp-scan/docker-compose.yaml --profile wp-scan up -d
    

プラグインのツール(例:wpscan、phpggc)は manifest.yaml を介して自動的に登録され、コンテナが正常な状態になると MCP ツールとして利用できます。

プラグインの作成

プラグインは plugins/ 配下のディレクトリで、以下を含みます:

  • docker-compose.yaml — サービス(-f による重ね合わせに使用するビルドコンテキストはプロジェクトルートからの相対パス)
  • manifest.yaml — ツールの登録(名前、カテゴリ、設定パス、デフォルト URL)
  • docker/ — Dockerfile とサービスコード
  • rules/ — カスタム SAST ルール(任意)
  • templates/ — レポートテンプレート(任意)
  • install.sh / uninstall.sh — 外部インストール用のセットアップスクリプト

プラグインは別のリポジトリに置き、シンボリックリンクまたは install.sh を介して plugins/ にリンクすることもできます。

インストール

前提条件

システム要件:

  • Docker Engine 20.10+ および Docker Compose 2.0+
  • 最低 8GB の RAM(複数のツールを実行する場合は 16GB を推奨)
  • 空きディスク容量 20GB(セキュリティツールのイメージはサイズが大きいため)
  • 対応プラットフォーム:Linux、macOS、Windows(WSL2 を使用)

MCP クライアント:

  • Claude Desktop、Cursor、Kiro、または MCP 互換クライアント
セットアップ
  1. リポジトリをクローンします:

    git clone https://github.com/nedlir/mcpwner.git
    cd mcpwner
    
  2. サーバーを設定します:

    cp .env.example .env
    cp config/config.yaml.example config/config.yaml
    
  3. サービスを起動します:

    docker compose up -d --build
    
  4. サービスが実行中であることを確認します:

    docker compose ps
    
IDE を接続する

Docker コンテナが起動したら、MCP クライアントに MCPwner を追加します。

動的なツール登録: MCPwner は、オプトイン方式のツールカテゴリに Docker Compose の profiles を使用します。.env ファイルの COMPOSE_PROFILES 変数で、起動するコンテナを制御します。MCP サーバーは起動時に実行中のコンテナを調査し、正常なツールのみを登録します。コンテナが停止している場合、そのツールは表示されません。Linguist(言語検出/コードファクトのインデックス)は常に実行されます。動的テスト用ユーティリティ(Chromium、WireMock、mitmproxy、fuzzer)はオプトイン方式で、dast と poc プロファイルを使って起動します。

ワンクリックインストール(Docker の起動が必要):

Kiro Cursor Claude VS Code Windsurf

手動での設定:

MCP 設定ファイル(claude_desktop_config.json、mcp.json など)に追加します。

{
  "mcpServers": {
    "mcpwner": {
      "command": "docker",
      "args": ["exec", "-i", "mcpwner-server", "python", "src/server.py"],
      "env": {}
    }
  }
}

新しいサーバー設定を読み込むため、MCP クライアントを再起動します。

ローカルプロジェクトをスキャンする

docker-compose.yaml にボリュームを追加して、プロジェクトをコンテナにマウントします。

services:
  mcpwner:
    volumes:
      - /path/to/your/projects:/mnt/projects:ro

次に、source_type="local" と source="/mnt/projects/my-project" を指定して create_workspace を使用します。

ドキュメント

追加のガイドはプロジェクトの Wikiにあります。

  • クイックスタート - COMPOSE_PROFILES を使ってツール群を起動し、MCP サーバーをクライアントに接続します。
  • 設定 - .env / COMPOSE_PROFILES、config.yaml、ツールのポート一覧について説明します。
  • トラブルシューティング - ツールが見つからない場合、コンテナが正常でない場合、イメージのビルドに失敗する場合について説明します。
  • ツールの追加 - 新しいスキャナーコンテナをツール群とツールレジストリに接続します。

貢献する場合は、コードスタイル、pre-commit フック、テストについて CONTRIBUTING.md を参照してください。

アーキテクチャ

graph LR
    subgraph IDE[" "]
        LLM[🤖<br/>LLM]
        Client[MCP Client]
        LLM -.-> Client
    end

    Server[MCPwner Server]

    SAST[SAST Tools]
    Secrets[Secrets Scanning]
    SCA[SCA Tools]
    Recon[Reconnaissance]
    CodeQL[CodeQL Service]
    Linguist[Language Detection]
    Utilities[Utilities]
    IaC[IaC Security]
    Fuzzing[Source Fuzzing]
    DAST[DAST Tools]
    PoC[PoC Sandbox]

    Client -->|JSON-RPC 2.0| Server
    Server -->|HTTP| SAST
    Server -->|HTTP| Secrets
    Server -->|HTTP| SCA
    Server -->|HTTP| Recon
    Server -->|HTTP| CodeQL
    Server -->|HTTP| Linguist
    Server -->|HTTP| Utilities
    Server -->|HTTP| IaC
    Server -->|HTTP| Fuzzing
    Server -->|HTTP| DAST
    Server -->|HTTP| PoC

    style LLM fill:#7C3AED,stroke:#5B21B6,stroke-width:3px,color:#fff
    style Client fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff
    style Server fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#fff
    style SAST fill:#E74C3C,stroke:#C0392B,stroke-width:2px,color:#fff
    style Secrets fill:#9B59B6,stroke:#7D3C98,stroke-width:2px,color:#fff
    style SCA fill:#1ABC9C,stroke:#16A085,stroke-width:2px,color:#fff
    style Recon fill:#00BCD4,stroke:#0097A7,stroke-width:2px,color:#fff
    style CodeQL fill:#E67E22,stroke:#CA6F1E,stroke-width:2px,color:#fff
    style Linguist fill:#3498DB,stroke:#2874A6,stroke-width:2px,color:#fff
    style Utilities fill:#6D28D9,stroke:#4C1D95,stroke-width:2px,color:#fff
    style IaC fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
    style Fuzzing fill:#B91C1C,stroke:#7F1D1D,stroke-width:2px,color:#fff
    style DAST fill:#D35400,stroke:#A04000,stroke-width:2px,color:#fff
    style PoC fill:#DC2626,stroke:#991B1B,stroke-width:2px,color:#fff
    style IDE fill:none,stroke:#ddd,stroke-width:2px,stroke-dasharray: 5 5

設計原則:

  • セキュリティツールの実行をコンテナ内に隔離
  • LLM が利用できる標準化された出力(SARIF/JSON)
  • 動的なツール登録:正常なコンテナのみがツールとして表示される
  • 調査フェーズをまたぐディープマージ方式の永続的な検出結果台帳
  • PoC 検証のための決定論的オラクル(終了コード、マーカー、OOB コールバック、XSS の実行)
エージェントのワークフロー

MCPwner はツールのインフラストラクチャです。モデルを問わない単一のエージェントセッション(Claude、Cursor、Kiro、Gemini、または MCP に対応する任意のコーディングエージェント)がエンゲージメント全体を主導し、各フェーズ(偵察 → API マッピング → 環境構築 → コード監査 → 脆弱性調査 → PoC → レビュー)を自ら実行して、調査結果台帳に進捗を記録します。別個のオーケストレーションサービスや設定ファイルはありません。MCPwner はツールを公開し、エージェントがワークフローを担います。

長時間かつ分離されたサブタスク(典型的な例は、コンテナー内で稼働中のターゲット環境を立ち上げて操作すること)については、ホストが対応していれば、エージェントは任意でヘルパーセッションに委任できます。ただし、ワークフローがそれに依存することはありません。

データの永続化

MCPwner は、共有 Docker ボリューム(/workspaces/.metadata/)内のファイルベースストレージを使用して、コンテナーの再起動後もワークスペースのメタデータ、CodeQL データベース、調査結果を保持します。調査結果台帳は常に利用可能です(コンテナーのヘルスチェックによる制限はありません)。これは、エージェントが各フェーズで調査結果を追跡し、コンテキストがリセットされた後に状態を復元するためのものです。

ワークスペースのクリーンアップ:

  • delete_files=True, delete_metadata=False - ディスク容量を解放し、履歴を保持します
  • delete_files=True, delete_metadata=True - 完全に削除します
  • delete_files=False, delete_metadata=True - リストから削除し、ファイルは保持します

ライセンス

Apache 2.0

コメント

MCP は初めてですか?

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

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