MCPRadar: MCP 생태계를 위해 구축된 보안 스캐너
요약
MCPRadar는 Model Context Protocol(MCP) 서버의 보안 취약점을 탐지하기 위해 구축된 오픈 소스 스캐너입니다. 도구 오염, 프롬프트 인젝션, 과도한 권한 설정 등 MCP 특화 보안 위협을 프로토콜 검사, 소스 분석, 공급망 점검 등을 통해 식별합니다.
핵심 포인트
- MCP 서버의 도구 오염 및 프롬프트 인젝션 위험 탐지
- 프로토콜 검사, 소스 분석, 설정 검토 등 다각도 스캔 제공
- CI/CD 파이프라인 통합 및 정책 코드화(Policy-as-code) 지원
- 의존성 분석 및 SBOM 생성을 통한 공급망 보안 강화
Model Context Protocol (MCP) 서버는 AI 에이전트와 파일 시스템, 데이터베이스, API, 내부 도구 등 외부 세계를 연결하는 결합 조직(connective tissue)으로 빠르게 자리 잡았습니다. 이러한 편리함에는 대가가 따릅니다. MCP 서버가 노출하는 도구(tools), 프롬프트(prompts), 스키마(schemas)는 새로운 종류의 공격 표면(attack surface)이 되지만, 대부분의 전통적인 스캐너들은 그곳을 단순히 살펴보지 않습니다. MCPRadar는 바로 이 격차를 메우기 위해 특별히 구축된 오픈 소스(open-source) 프로젝트입니다.
이것이 중요한 이유
약 1,900개의 MCP 서버를 조사한 최근의 학술 연구에 따르면, 놀라울 정도로 많은 비율에서 유의미한 보안 문제가 발견되었습니다. 약 7%에서 일반적인 취약점이, 또 다른 5%에서는 MCP 특화된 도구 오염(tool poisoning)이 발견되었습니다. 도구 오염, 도구 설명에 숨겨진 프롬프트 인젝션(prompt injection), 그리고 조용히 과도한 권한이 부여된 설정 등은 "일반적인" 취약점처럼 보이지 않기 때문에 놓치기 쉽습니다. CVE가 있거나 명백한 버퍼 오버플로(buffer overflow)가 있는 것이 아니라, 단지 에이전트에게 해서는 안 될 일을 조용히 지시하는 도구 설명이 있을 뿐이기 때문입니다.
MCPRadar의 핵심 전제는 이러한 종류의 위험이 CI 파이프라인(CI pipeline)의 다른 모든 부분과 동일한 엄격함을 갖춰야 한다는 것입니다.
실제로 무엇을 스캔하는가
MCPRadar는 단일 목적의 린터(linter)가 아닙니다. 여러 각도에서 MCP 서버를 살펴봅:
프로토콜 검사 (Protocol inspection) — 서버가 노출하는 도구 (tools), 프롬프트 (prompts), 리소스 (resources), 템플릿 (templates)을 열거하고, 서버 지침 (instructions)에서 의심스러운 콘텐츠가 있는지 확인합니다.
소스 분석 (Source analysis) — Python 및 JavaScript/TypeScript 코드를 탐색하여 SSRF, 안전하지 않은 역직렬화 (unsafe deserialization), 커맨드/SQL 인젝션 (command/SQL injection), 트로이 목마 소스 (Trojan Source) 기법, 그리고 도구의 설명과 실제 코드가 수행하는 동작 간의 불일치를 찾아냅니다.
설정 검토 (Configuration review) — 오염된 MCP 또는 에이전트 설정 파일, 위험한 훅 (hooks), 그리고 과도하게 광범위한 권한 부여를 식별합니다.
공급망 점검 (Supply chain checks) — 설치 스크립트를 실행하지 않고 패키지를 가져오며, 의존성을 OSV와 교차 참조하고, 해시 및 출처 (provenance)가 포함된 CycloneDX SBOM을 생성할 수 있습니다.
변경 사항 모니터링 (Change monitoring) — SQLite에 스냅샷을 저장하고 시간이 지남에 따라 차이점(diff)을 비교하며, 변경 사항을 미용적(cosmetic), 동작적(behavioral), 또는 보안 관련(security-relevant)으로 분류하여 조용한 드리프트 (silent drift)가 감지되지 않고 지나치지 않도록 합니다.
CI 통합 (CI integration) — JSON, SARIF 또는 CEF를 출력하며, 풀 리퀘스트 (pull requests)에 스캐닝을 내장하고자 하는 팀을 위해 억제 (suppressions) 기능이 포함된 정책 코드화 (policy-as-code) 게이트를 지원합니다.
시작하기
테스트를 위해 설치할 필요조차 없습니다:
uvx mcpradar scan http://localhost:8080
반복적으로 사용하려면 CLI를 직접 설치하세요:
uv tool install mcpradar
mcpradar --help
Python 3.11 이상이 필요하며, uv를 사용하지 않는 경우 pip install mcpradar로도 설치할 수 있습니다.
기타 몇 가지 일반적인 워크플로우:
# 일회용 샌드박스 내에서 로컬 stdio 서버 스캔
mcpradar scan "python ./server.py" -t stdio --sandbox
# 코드를 실행하지 않고 소스 코드 분석
mcpradar scan-source ./path/to/server
# 게시된 패키지 및 의존성 트리 확인
mcpradar deps npm:@modelcontextprotocol/server-filesystem
# 이전 스냅샷과 차이점 비교
mcpradar diff http://localhost:8080
# CI 파이프라인을 위한 SARIF 생성
mcpradar scan http://localhost:8080 --format sarif -o mcpradar.sarif
보안 모델은 기분 좋게 느껴질 정도로 철저하게 편집증적입니다.
MCPRadar는 스캔하는 모든 서버를 신뢰할 수 없는 입력(untrusted input)으로 취급하며, 이는 보안 도구로서 정확히 올바른 본능입니다.
--allow-host-exec를 통해 명시적으로 허용하지 않는 한, Stdio 명령은 호스트에서 실행되지 않으며, 더 권장되는 방식인--sandbox모드에서 실행됩니다.- 샌드박스(Sandboxed) 스캔은 읽기 전용 파일 시스템(read-only filesystem), 제거된 권한(dropped capabilities), 호스트 마운트가 없는 일회용 비루트(non-root) 컨테이너에서 수행됩니다.
- 패키지에 대한 소스 스캔(Source scans)은 설치 스크립트나 서버 코드를 전혀 실행하지 않고 아카이브를 다운로드하여 검사합니다.
- 원격 가져오기(Remote fetches)는 URL, 리다이렉트(redirect), 크기 및 타임아웃 제한에 의해 제한되며, 프라이빗 네트워크(private networks)에 접근하는 것을 방지하는 보호 조치가 적용됩니다.
만약 컨테이너가 시작 시 패키지를 가져오기 위해 진정으로 네트워크 액세스가 필요한 경우, 이는 기본값이 아니라 명시적인 선택 플래그(--sandbox-network bridge)를 통해 이루어집니다.
과장하지 않는 위험 점수 산정
탐지 결과는 MRS-v1(MCPRadar Risk Score)으로 집계됩니다. 이는 탐지 결과, 신뢰도(confidence), 서버 기능(capabilities), 의존성 위험(dependency risk), 그리고 스캔이 서버의 어느 정도를 실제로 커버했는지를 고려하여 산출되는 버전 관리형 0~10 사이의 신호입니다. 중요한 점은, 이 프로젝트가 이것을 취약점 공격 가능성(exploitability)의 증거가 아닌 '위험 신호(risk signal)'라고 솔직하게 밝히고 있다는 것입니다. 또한, 불완전한 스캔은 조용히 "깨끗함(clean)"으로 처리되는 대신 불완전한 것으로 보고됩니다.
공개 리더보드
공식 MCP 레지스트리(MCP Registry)에서 제공하는 인기 있고 설치 가능한 서버들에 대해 재현 가능한 스캔 결과(커버리지, 탐지 결과, MRS 등급)를 매일 업데이트하여 게시하는 공개 리더보드도 있습니다. 스캔 요청 이슈(scan request issue)를 생성하여 서버 추가를 요청할 수 있습니다. 요청을 제출하는 것만으로는 아무것도 실행되지 않으며, 모든 사항은 추가되기 전에 검토됩니다.
신뢰하기 전에 알아두어야 할 사항
유지 관리자들은 정적 패턴 기반 탐지(static, pattern-based detection)의 한계에 대해 솔직하게 밝히고 있습니다:
- 탐지 결과는 오탐(false positives)일 수 있으며 문맥적 검토(contextual review)가 필요할 수 있습니다.
- 런타임(runtime)에만 나타나는 공격은 특정 시점의 스캔(point-in-time scan)에서 나타나지 않을 수 있습니다.
- 난독화(Obfuscated)되었거나 진정으로 새로운 기술은 정적 규칙을 우회할 수 있습니다.
그러한 투명성은 보안 도구로서 매우 신선하며, 이와 같은 스캐너는 수동 검토 (manual review)를 대체하는 것이 아니라 이를 보완한다는 점을 상기시켜 주는 좋은 사례입니다.
사용해 보기
uvx mcpradar scan [http://localhost:8080](http://localhost:8080)
MCP 서버를 구축하거나 배포 중이거나, 혹은 단순히 제3자 (third-party) 서버를 에이전트 (agents)에 연결하고 있다면, 실제 자격 증명 (credentials)과 실제 데이터를 맡기기 전에 스캔을 실행해 볼 가치가 있습니다. 이 프로젝트는 MIT 라이선스이며, 탐지 규칙 (detection rules)을 추가하거나 커버리지 (coverage)를 확장하고 싶다면 기여 (contributions)에 열려 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기