OWASP MCP Top 10을 활용한 MCP 서버 감사
요약
본 문서는 OWASP MCP Top 10이라는 분류 체계를 활용하여 MCP 서버의 보안 감사를 수행하는 방법을 설명합니다. 이 가이드는 토큰 오관리, 프롬프트 주입 등 구체적인 카테고리별로 어떤 위험을 확인해야 하는지 실질적인 감사 포인트를 제시합니다.
핵심 포인트
- 감사는 실제 운영되는 서버 엔드포인트(실제 인증/TLS)를 대상으로 해야 합니다.
- MCP01은 토큰 유출 여부, MCP06은 매니페스트 내 주입 문자열 검사가 핵심입니다.
- MCP07과 MCP02는 요청-응답을 통해 구체적인 접근 통제 실패 여부를 확인합니다.
OWASP MCP Top 10에 따른 MCP 서버 감사
OWASP MCP Top 10은 현재 사람들이 MCP 위험(risk)에 대해 이야기할 때 참고하는 분류 체계입니다. 보안 팀이 조달 논의(procurement conversation)에서 가져올 프레임워크이며, 실무자들이 점점 더 인용하는 기준입니다. 아직 베타 버전이며 활발한 커뮤니티 수정 단계인 Phase 3이지만, 카테고리들은 감사 설계를 하기에 충분히 안정적입니다.
그래서 여기는 실질적인 질문이 있습니다. 당신은 MCP 서버를 운영하고 있습니다. 누군가 Top 10을 건네주며 이 목록에 대해 얼마나 잘 대응하는지 물어봅니다. 감사는 실제로 카테고리별로 무엇을 확인하나요?
열 개 중 여덟 개는 실행 중인 서버를 대상으로 테스트할 수 있습니다. 나머지 두 개는 사실 단일 서버와 관련이 없습니다. 그것들은 빌드 파이프라인과 조직 레벨 거버넌스(org-level governance)에 존재합니다. 이 분리가 대부분의 작업량이기 때문에, 나머지는 이렇게 구성되었습니다.
여기서 '테스트 가능하다'는 것의 의미에 대한 참고 사항입니다. Gated 감사는 개발자 노트북의 설정 파일이 아니라 네트워크에서 운영되는 서버를 대상으로 했습니다. 즉, 실제 인증(real auth), 실제 TLS, 실제 매니페스트를 가진 배포된 엔드포인트였습니다. 이 관점이 감사로 도달할 수 있는 위험을 결정합니다. 이는 서버가 주장하는 것을 읽는 것과 그것이 실제로 하는 것을 관찰하는 것 사이의 차이입니다.
감사가 다루는 여덟 가지 항목
MCP01 — 토큰 오관리 및 비밀 노출(Token Mismanagement and Secret Exposure). 이것은 자격 증명(credentials)이 프로토콜 표면을 통해 유출되는 위험입니다. URL에 포함된 토큰, 도구 출력에 반향되는 비밀 정보(secrets), 적절한 만료 기한이 없는 접근 토큰(access tokens), 로그 알림에 기록되는 자격 증명이 그 예입니다. 이 모든 것은 관찰 가능합니다. 감사는 실제 요청을 보내고 돌아오는 것을 읽습니다. 예를 들어, 토큰이 응답 본문(response body)에 남아 있는지, 접근 토큰의 수명 주기가 제한되어 있는지, 오류 경로가 방금 거부한 자격 증명을 조용히 반환하는지 등을 확인합니다.
MCP06 — 컨텍스트 페이로드를 통한 프롬프트 주입(Prompt Injection via Contextual Payloads). MCP는 도구 설명, 프롬프트 템플릿 및 리소스 콘텐츠를 모델을 향하는 두 번째 명령어 채널로 변환합니다. 주입 문자열, 보이지 않는 유니코드 페이로드 또는 알려진 탈옥 구문(jailbreak phrase)을 포함하는 설명은 매니페스트에서 바로 읽어낼 수 있는 발견 사항입니다 — 실행할 필요가 없습니다. 이것은 공격이 서버가 이미 제공하는 텍스트에 존재하기 때문에, 패시브 검사(passive inspection)와 가장 깔끔하게 매핑되는 프레임워크 부분입니다.
MCP07 — 불충분한 인증 및 권한 부여(Insufficient Authentication and Authorization). 테스트할 수 있는 표면 중 가장 넓고 모호성이 가장 적은 영역입니다. 인증되지 않은 호출자가 거부됩니까? 관리 도구는 신원을 요구합니까? 권한 코드 흐름에 PKCE가 적용됩니까? 만료되거나, 유효하지 않거나, 취소된 베어러 토큰이 실제로 차단됩니까, 아니면 비어 있지 않은 모든 토큰이 문을 열어줍니다? 이것들은 구체적인 요청-응답 사실입니다. 서버는 잘못된 호출을 거부하거나 그렇지 않습니다.
MCP02 — 스코프 크리프를 통한 권한 상승(Privilege Escalation via Scope Creep). 스코프 크리프는 누락된 인증보다 잡기 더 어렵습니다. 왜냐하면 기술적으로 부여되었지만 조용히 너무 광범위한 권한에 관한 것이기 때문입니다. 감사는 OAuth 계약을 검토합니다: 부여된 스코프가 요청된 것과 일치하는지, 리소스 지표(resource indicators)가 강제되는지, 서버가 광고하는 스코프가 실제로 준수하는 스코프인지 여부입니다. 이것은 요구받은 것보다 더 많은 것을 반환하는 서버를 잡아냅니다.
MCP05 — 명령어 주입 및 실행(Command Injection and Execution). 스캐너는 귀하의 셸을 볼 수 없습니다. 스캐너가 볼 수 있는 것은 서버가 그에 공급될 입력을 검증하는지 여부입니다. 선언되지 않은 속성을 거부하고, 선언된 타입을 강제하며, 문자열 및 배열 경계를 유지하고, 리소스 URI에서 경로 탐색(path traversal)을 거부합니까? 입력 유효성 검사는 주입 방어의 관찰 가능한 프록시이며, 선언된 스키마를 강제하는 서버는 대부분의 주입이 통과하는 문을 닫습니다.
MCP10 — 컨텍스트 주입 및 과도한 공유(Context Injection and Over-Sharing). 컨텍스트가 세션이나 에이전트 간에 공유될 때, 한 작업의 데이터가 다른 작업에 노출될 수 있습니다. 감사는 권한 컨텍스트 간의 격리성을 조사합니다: 작업 기록이 신원 간에 유출되는지, 인증되지 않은 배포 환경에서 작업 ID를 추측할 수 있는지, 또는 설문지가 필요 이상으로 많은 정보를 조용히 수집하는지 여부입니다. 이는 두 개의 신원을 가지고 하나가 다른 것 중 무엇을 볼 수 있는지 확인하여 테스트할 수 있는 경계들입니다.
MCP03 — 도구 오염(Tool Poisoning). 도구 오염은 공격자가 모델이 의존하는 도구, 인터페이스 정의 또는 출력을 손상시키는 행위입니다. 이는 세 가지 관찰 가능한 형태로 나타나며, 감사에서는 이 세 가지를 모두 확인합니다. 스키마 오염과 악의적인 설명은 매니페스트(manifest)에서 처음 읽을 때 나타납니다 — 감사는 에이전트가 이를 사용하기 전에 모델이 할 것처럼 설명, 파라미터 정의 및 네임스페이스를 확인합니다. 러그 풀(Rug pulls) — 승인된 후 설명을 변경하는 신뢰할 수 있는 도구 — 은 각 도구를 처음 볼 때 지문 인식(fingerprinting)하고 연결할 때마다 이 지문을 재확인함으로써 포착되며, 따라서 드리프트(drift)는 놀라움이 아닌 발견 사항이 됩니다. 도구 섀도잉(Tool shadowing), 즉 한 서버가 다른 서버의 도구로 사칭하는 경우, 감사가 에이전트가 도달할 수 있는 서버들의 도구 및 네임스페이스 주장을 비교할 때 노출됩니다.
MCP08 — 감사 및 원격 측정 부족(Lack of Audit and Telemetry). 이 프레임워크는 도구 호출 및 컨텍스트 변경에 대한 체계적인 로깅을 요구합니다. 네트워크 측면에서, 감사는 해당 원격 측정의 위생 상태를 확인합니다: 로그 알림이 자격 증명을 포함하지 않는지, 로그 레벨이 표준 세트에서 오는지, 그리고 로깅 표면이 내부 상태를 누설하기보다는 사양을 따르는지를 확인합니다. 비밀 정보를 조용히 유출하는 좋은 원격 측정 자체가 발견 사항이며, 바로 이 지점에서 그것이 노출됩니다.
서로 다른 계층에 존재하는 두 가지 요소
서로 다른 계층에 존재하는 두 가지 요소
MCP04 — 소프트웨어 공급망 및 의존성 변조(Software Supply Chain and Dependency Tampering). 이 카테고리는 서명된 컴포넌트, 의존성 출처(provenance), 그리고 패키지가 배포되기 전에 변조되었는 것을 포착하는 것에 관한 것입니다. 본질적으로 이는 빌드 파이프라인 및 SBOM(Software Bill of Materials) 문제입니다. 무결성 질문은 실행되는 엔드포인트가 아니라 빌드 시간, 즉 CI와 아티팩트 서명 단계에서 결정됩니다. 네트워크 감사는 노출된 프레임워크 및 런타임 버전과 같은 인접한 신호를 플래그합니다. 출처(provenance) 작업은 의존성 트리가 실제로 존재하는 상위 스트림(upstream)에 속합니다.
MCP09 — 그림자 MCP 서버(Shadow MCP Servers). 여기서의 위험은 보안팀이 알지 못하는 서버, 즉 데모용으로 구축되었거나 기본 자격 증명을 사용하며 재고 목록에 포함되지 않은 서버입니다. 이것은 발견 및 거버넌스 문제입니다. 정의상 조직이 아직 자신이 가지고 있다는 것을 모르는 서버들에 관한 것입니다. 가장 도움이 되는 레버는 알려진 내부 서버들의 감사를 모든 곳에서 실행하기에 충분히 저렴하게 만드는 것이므로, 서버를 거버넌스에 포함시키는 것이 더 이상 번거로운 일이 아닙니다.
여기서 얻을 수 있는 것들
OWASP MCP Top 10의 대부분은 실행 중인 서버를 대상으로 테스트할 수 있으며, 테스트 가능한 부분은 올해 실제 CVE(Common Vulnerabilities and Exposures)를 발생시킨 위험—권한 부족(auth gaps), 토큰 노출, 도구 설명을 통한 주입(injection)—으로 치우쳐 있습니다. 이것이 감사가 깨끗하고 재현 가능한 답변을 제공하는 부분입니다.
나머지 두 가지는 정확히 명명할 가치가 있습니다. 공급망 무결성은 빌드 파이프라인에서 결정되며, 그림자 서버는 어떤 단일 엔드포인트보다 상위에 존재하는 발견 문제입니다. 이 프레임워크가 가장 유용한 경우는 각 위험이 어느 계층에 속하는지, 그리고 스택 내의 어떤 도구가 그것을 소유하고 있는지 아는 경우입니다.
사설 및 내부 서버를 포함하여 MCP 서버를 네트워크 내부에서 게이트(Gated) 검사를 통해 운영하며, 모든 발견 사항을 위의 프레임워크에 매핑합니다. 따라서 보고서는 보안팀이 이미 사용하는 언어로 이야기하게 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기