
자동 취약점 발견을 위한 모델 컨텍스트 프로토콜 서버
MCPwner는 보안 테스트 도구를 LLM 기반 워크플로우에 통합하는 모델 컨텍스트 프로토콜(MCP) 서버입니다. 비밀 스캐닝, 정적 분석(SAST), 소프트웨어 구성 분석(SCA), Infrastructure-as-Code(IaC) 보안, 소스 퍼징, 정찰, 동적 애플리케이션 보안 테스트(DAST) 및 0-day 발견을 포함한 취약점 연구를 위한 통일된 인터페이스를 제공합니다.
수동으로 도구를 연결하고 출력을 LLM에 붙여넣는 대신, MCPwner는 결과를 표준화하여 모델의 작업 컨텍스트로 직접 스트리밍합니다. 이를 통해 공격 표면 매핑, 알려진 취약점 식별, 새로운 공격 벡터 발견 등 보안 연구 생애주기 전반에 걸쳐 지속적인 추론, 상관 관계 분석, 공격 경로 발견이 가능해집니다.
참고: 이 프로젝트는 활발히 개발 중입니다. MCP에 대해 더 알아보려면 여기를 방문하세요.
향후 릴리스에서 다음 도구가 계획되어 있습니다.
SAST 중 식별된 역직렬화 싱크를 무기화하기 위한 가젯 체인 및 페이로드 생성기. 성숙한 가젯 체인 생태계는 Java, .NET, PHP에 존재하며, Python은 악성 pickle 생성을 통해 다룹니다 (Ruby/Node 역직렬화는 페이로드 기반이며 아래 Payloads 코퍼스에 포함됨).
위 도구를 지원하기 위해 선별된 페이로드 및 워드리스트 코퍼스:
"Enumerate and scan example.com" → MCPwner chains: Subfinder + Amass → Masscan + Nmap → httpx → Katana + gau → ffuf + Arjun
### GitHub 저장소에서 비밀 스캔```
"Scan https://github.com/example/repo for secrets"
→ MCPwner runs Gitleaks, TruffleHog, detect-secrets and correlates findings
"Run a security audit on my Python project" → MCPwner runs Bandit (SAST), OSV-Scanner (SCA), and secrets scanning
### 공격 경로 분석```
"Find vulnerabilities in the authentication module"
→ MCPwner runs CodeQL queries, cross-references with secrets and SCA results
"Test for SQLi and XSS on http://localhost:8080" → MCPwner chains: sqlmap + Dalfox and verifies findings
## 설치
### 사전 요구 사항
**시스템 요구 사항:**
- Docker Engine 20.0+ 및 Docker Compose 2.0+
- 최소 8GB RAM (여러 도구 실행 시 16GB 권장)
- 20GB 여유 디스크 공간 (보안 도구 이미지가 큼)
- 지원 플랫폼: Linux, macOS, Windows (WSL2 포함)
**MCP 클라이언트:**
- Claude Desktop, Cursor, Kiro 또는 MCP 호환 클라이언트
### 설정
1. **리포지토리 복제**: ```bash
git clone https://github.com/nedlir/mcpwner.git
cd mcpwner
Docker 컨테이너가 실행 중이면, MCPwner를 MCP 클라이언트에 추가하세요:
중요: 동적 도구 등록
MCPwner는 모듈식 옵트인(opt-in) 아키텍처를 사용합니다. 보안 도구는 Docker Compose profiles에 의해 관리됩니다.
.env 파일(COMPOSE_PROFILES=sast,secrets,reconnaissance,dast,etc)은 어떤 컨테이너를 온라인으로 가져올지 결정합니다. 또는 CLI를 통해 이를 재정의하고 특정 프로필을 실행할 수 있습니다: docker compose --profile sast --profile dast up -d.semgrep)를 생략하려면 .env에서 해당 카테고리(sast)를 생략하고 다른 원하는 도구(bandit,gosec,codeql)를 수동으로 나열하세요.utilities 카테고리의 도구(예: Linguist, WireMock, Chromium)는 영구적인 핵심 종속성으로 취급됩니다. 이들은 docker compose up -d에서 조건 없이 실행되어 중요한 도구 간 종속성(언어 감지 등)이 항상 작동하도록 보장합니다.구성 파일 위치:
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)mcp.json원클릭 설치 (Docker 실행 필요):
수동 구성:
MCP 구성 파일에 다음을 추가하세요:```json { "mcpServers": { "mcpwner": { "command": "docker", "args": ["exec", "-i", "mcpwner-server", "python", "src/server.py"], "env": {} } } }
새로운 서버 구성을 로드하려면 MCP 클라이언트를 다시 시작하십시오.
### 로컬 프로젝트 스캔
호스트 머신에서 프로젝트를 스캔하려면 `docker-compose.yaml`에 볼륨을 추가하여 컨테이너에 마운트하십시오:```yaml
services:
mcpwner:
volumes:
- /path/to/your/projects:/mnt/projects:ro
그런 다음 다음 옵션을 사용하여 create_workspace 도구를 사용하세요:
source_type="local"source="/mnt/projects/my-project"MCPwner는 공유 Docker 볼륨(/workspaces/.metadata/)의 파일 기반 스토리지를 사용하여 컨테이너 재시작 시 작업 공간 및 CodeQL 데이터베이스 메타데이터를 자동으로 유지합니다. 구성이 필요하지 않습니다. 시스템은 시작 시 기존 데이터를 로드하고, 손상을 방지하기 위해 원자적 쓰기를 사용하여 모든 작업 후에 저장합니다.
작업 공간 정리 제어:
cleanup_workspace 도구는 세분화된 제어를 제공합니다:
delete_files=True, delete_metadata=False - 디스크 공간을 확보하되 작업 공간 기록 유지 (권장)delete_files=True, delete_metadata=True - 작업 공간 및 메타데이터 완전 제거delete_files=False, delete_metadata=True - 목록에서 제거하지만 디스크의 파일은 유지백업:```bash
docker run --rm -v mcpwner_workspaces:/data -v $(pwd):/backup
alpine tar czf /backup/workspaces-backup.tar.gz /data
docker run --rm -v mcpwner_workspaces:/data -v $(pwd):/backup
alpine tar xzf /backup/workspaces-backup.tar.gz -C /
## 아키텍처
MCPwner는 향후 원격 배포를 지원하기 위해 컨테이너 간 HTTP 기반 통신을 사용합니다. 현재는 로컬 사용에 최적화되어 있지만, 최소한의 수정으로 원격 서버 배포에 적용할 수 있습니다.
**설계 원칙:**
- 보안 도구 실행을 위한 컨테이너 격리
- LLM 소비를 위한 표준화된 출력 형식 (SARIF/JSON)
- 새로운 도구를 위한 확장 가능한 플러그인 아키텍처
- 상태 비저장 API (메모리는 사용자가 관리)
**아키텍처 개요:**```mermaid
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]
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
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 IDE fill:none,stroke:#ddd,stroke-width:2px,stroke-dasharray: 5 5
MCPwner는 MCP 인터페이스를 통해 다음 도구를 제공합니다:
작업공간 관리:
create_workspace - 로컬 경로, Git URL 또는 GitHub 저장소에서 스캔 작업공간 초기화list_workspaces - 사용 가능한 모든 작업공간 나열cleanup_workspace - 작업공간 및 관련 데이터 제거발견 기록:
작업공간 범위로 지정되며 디스크에 저장(<workspace>/findings/<id>.json)되어 항상 사용 가능합니다 — 컨테이너나 상태 게이트가 필요하지 않습니다. 이는 다중 에이전트 심층 연구 파이프라인의 진실 공급원(source of truth)입니다: 모든 가설, PoC 결과, 검토 평결이 산문이 아닌 발견 항목으로 기록됩니다.
upsert_finding - 발견 항목 생성 또는 업데이트. 기본적으로 기존 항목에 깊은 병합(deep-merge)을 수행하므로 한 에이전트가 자신의 하위 객체(예: poc)를 작성할 때 다른 에이전트의 필드(예: review)를 덮어쓰지 않습니다.list_findings - 작업공간의 모든 발견 항목 나열, 선택적으로 status (예: poc-confirmed, review-approved)로 필터링 가능get_finding - ID로 단일 발견 항목 검색SAST (정적 분석):
run_sast_scan - 정적 분석 도구 실행 (Semgrep, Bandit, Gosec, Brakeman, PMD, Psalm, NodeJsScan, Joern, YASA)get_sast_report - SAST 스캔 결과 검색sast_list_tools - 사용 가능한 SAST 도구 목록비밀 감지:
run_secrets_scan - 비밀 스캐닝 도구 실행 (Gitleaks, TruffleHog, Whispers, detect-secrets, Hawk-Eye)get_secrets_report - 비밀 스캔 결과 검색secrets_list_tools - 사용 가능한 비밀 스캐닝 도구 목록SCA (소프트웨어 구성 분석):
run_sca_scan - 취약점을 위한 종속성 분석 (Grype, Syft, OSV-Scanner, Retire.js)get_sca_report - SCA 스캔 결과 검색sca_list_tools - 사용 가능한 SCA 도구 목록정찰:
run_reconnaissance_scan - 단일 정찰 도구 실행 (Subfinder, Amass, Nmap, Masscan, httpx, Katana, ffuf, bbot, gau, Arjun, wafw00f, Kiterunner)run_reconnaissance_chain - 여러 정찰 도구를 순차적으로 연결get_reconnaissance_report - 정찰 스캔 결과 검색reconnaissance_list_tools - 사용 가능한 정찰 도구 목록CodeQL:
detect_languages - Linguist를 통해 코드베이스의 언어 감지create_codeql_database - 분석을 위한 CodeQL 데이터베이스 생성list_databases - 사용 가능한 CodeQL 데이터베이스 목록list_query_packs - 사용 가능한 쿼리 팩 목록execute_query - 특정 CodeQL 쿼리 실행인프라 및 IaC 보안:
run_iac_scan - 코드형 인프라(IaC)의 잘못된 구성 스캔 (Checkov, KICS, Terrascan, TFSec, Hadolint)get_iac_report - IaC 스캔 결과 검색iac_list_tools - 사용 가능한 IaC 스캐닝 도구 목록소스 퍼징:
run_fuzzing_scan - 대상별 하네스에 대한 화이트박스, 커버리지 기반 퍼징 캠페인 실행 (Atheris, Jazzer, Jazzer.js, PHP-Fuzzer)get_fuzzing_report - 퍼징 충돌 결과 검색 (충돌 입력 + 스택 트레이스)fuzzing_list_tools - 감지된 언어로 필터링된 사용 가능한 퍼징 엔진 목록DAST (동적 애플리케이션 보안 테스트):
run_dast_scan - 동적 애플리케이션 보안 테스트 도구 실행 (sqlmap, NoSQLMap, Commix, Dalfox, SSTImap, SSRFmap, jwt_tool, interactsh)get_dast_report - DAST 스캔 결과 검색dast_list_tools - 사용 가능한 DAST 도구 목록유틸리티:
run_utilities_scan - 라이브 대상에 대해 유틸리티 도구 실행 (Linguist, WireMock, Mitmproxy, aiohttp, Headless Chromium)get_utilities_report - 유틸리티 스캔 결과 검색utilities_list_tools - 사용 가능한 유틸리티 도구 및 해당 구성 옵션 목록상태 및 모니터링:
health_check - 서버 및 도구 가용성 확인list_tools - 모든 사용 가능한 도구와 상태 나열MCPwner는 침입적인 작업을 수행할 수 있는 보안 도구를 실행합니다. 소유하거나 명시적 테스트 권한이 있는 시스템 및 코드베이스에만 사용하십시오 - 무단 접근은 불법입니다. MCP 서버 접근을 승인된 사용자로 제한하고 프로덕션 배포의 경우 네트워크 격리를 고려하십시오. 일부 도구는 상당한 네트워크 트래픽이나 시스템 부하를 생성할 수 있으므로 스캔을 실행하기 전에 도구 구성을 검토하십시오. 보안 스캔은 모니터링 시스템에서 경고를 트리거할 수 있음을 염두에 두고 도구 실행 및 결과를 기록하십시오. MCPwner를 사용하여 발견된 취약점을 보고할 때 책임 있는 공개 관행을 따르십시오. Docker 이미지를 최신 상태로 유지하고 정기적으로 컨테이너의 취약점을 스캔하십시오. API 키, 토큰 또는 자격 증명을 구성 파일에 절대 커밋하지 마십시오 - 대신 환경 변수나 비밀 관리 시스템을 사용하십시오.
또한, 이러한 도구를 실행하고 타사 라이브러리에 접근할 때 자신의 보안에 책임을 져야 합니다. 모든 것을 샌드박스 환경에서 실행하고 특별한 인증 없이 실행하는 것이 좋습니다 (가능한 경우 최소화 및 강화).
![]() | ![]() | ![]() | ![]() | ![]() |
|---|
| Subfinder | Amass | Nmap | Masscan | ffuf |