MCP의 "S"는 보안을 의미합니다
(elenacross7.medium.com)- MCP는 LLM과 도구를 연결하는 표준 프로토콜이지만, 기본적으로 보안이 적용되어 있지 않음
- 명령어 삽입, 도구 중독, 정의 변조 등 다양한 보안 취약점이 존재함
- MCP는 인증, 암호화, 무결성 검증 기능이 없어 신뢰하기 어려운 구조임
- ScanMCP 같은 도구로 가시성과 통제를 확보하는 것이 현재로선 최선의 대응임
MCP란 무엇이며 왜 중요한가
- MCP는 Model Context Protocol의 약자로, Claude, GPT, Cursor와 같은 LLM들이 도구 및 데이터와 통합되는 방식의 새로운 표준임
- "AI 에이전트를 위한 USB-C"로 불릴 만큼 표준화된 연결 방식을 제공함
- MCP를 통해 AI 에이전트는 다음과 같은 기능을 수행함
- 표준화된 API로 도구와 연결
- 세션 상태를 유지
- 명령 실행 (과도하게 자유롭게 실행될 수 있음)
- 워크플로 간 컨텍스트 공유
- 하지만 기본적으로 보안이 적용되어 있지 않음
- 사용자 모르게 시스템에 접근할 수 있는 사이드 채널을 열어주는 위험이 있음
MCP에서 발생하는 주요 보안 취약점들
-
명령어 삽입 취약점 (Equixly 리서치)
- 2025년 현재도 명령어 삽입을 통한 원격 코드 실행(RCE) 이 발생하고 있음
- Equixly의 조사에 따르면 전체 MCP 서버 구현 중 43% 이상이 안전하지 않은 쉘 호출을 사용함
- 공격자는 도구 입력값에 쉘 명령어를 포함시켜 신뢰된 에이전트를 통해 원격 코드를 실행할 수 있음
-
도구 중독 (Tool Poisoning, Invariant Labs)
- 공격자가 악의적인 명령을 도구 설명 안에 숨겨두는 방식
- 사용자 눈에는 보이지 않지만 AI는 이를 그대로 인식하고 실행함
- 단순한 수학 연산처럼 보이는 도구가 실제로는 사용자 시스템에서 SSH 키나 민감한 설정 파일을 읽을 수 있음
-
조용한 도구 재정의 (Rug Pull)
- 도구가 설치 후 스스로 정의를 변경할 수 있음
- Day 1에는 정상적이던 도구가 Day 7에는 공격자의 API 키 수집 도구로 바뀔 수 있음
- 이는 공급망 보안 문제의 새로운 형태로 LLM 내부에서 발생함
-
교차 서버 도구 그림자화
- 여러 MCP 서버가 하나의 에이전트에 연결되어 있을 때, 악성 서버가 신뢰된 서버의 호출을 가로채거나 오버라이드 가능
- 결과적으로 다음과 같은 문제가 발생할 수 있음
- 사용자에게 보낸 척하면서 공격자에게 이메일 발송
- 숨겨진 로직을 도구에 주입
- 인코딩된 데이터 유출
MCP가 아직 안전하지 않은 이유
- MCP는 다음을 우선시함
- ✅ 쉬운 통합
- ✅ 통일된 인터페이스
- 하지만 다음이 부족함
- ❌ 인증 표준 없음
- ❌ 컨텍스트 암호화 없음
- ❌ 도구 무결성 확인 불가
- 사용자는 에이전트가 실제로 어떤 설명을 기반으로 도구를 사용하는지 알 수 없음
개발자와 플랫폼 운영자가 할 수 있는 보안 대응
-
개발자
- 입력값 검증 필수
- MCP 서버와 도구의 버전을 고정 (pinning)
- 도구 설명에서 민감 정보 제거
-
플랫폼 운영자
- 전체 도구 메타데이터를 사용자에게 표시
- 서버 업데이트 시 무결성 해시 사용
- 세션 보안 강제 적용
-
사용자
- 신뢰할 수 없는 MCP 서버에 연결 금지
- 세션 로그를 운영환경처럼 감시
- 의심스러운 도구 업데이트 모니터링
ScanMCP.com의 아이디어 제안
- ScanMCP는 다음을 수행하는 스캐너 및 대시보드로 제안됨
- 연결된 MCP 도구를 감사
- RCE, 도구 중독, 세션 누수 등 리스크 탐지
- 사용자가 보는 정보 vs. 에이전트가 인식하는 정보를 비교해 시각화
- 다음과 같은 사용자에게 유용할 수 있음
- 에이전트 플랫폼 보안팀
- AI 인프라 스타트업
- 신뢰 기반 도구를 만들고자 하는 독립 개발자
마무리 생각
MCP는 강력한 프로토콜이지만, API 보안 성숙도는 부족한 상태에서 너무 빠르게 도입되고 있음
Secure-by-default 방식이 도입되기 전까지는 ScanMCP.com과 같은 도구가 가시성과 통제력을 확보하는 최선의 방법임
- 결론: MCP의 "S"는 Security가 아님. 하지만 그래야만 함
Hacker News 의견
-
이 글은 며칠 전 Invariant Labs에서 발표한 보안 노트에서 설명한 공격 시나리오(도구 중독, 그림자화, MCP 러그 풀)를 강조하고 인용함. 나는 해당 블로그 글의 저자임
- 많은 사람들이 의심하는 것과 달리, MCP 스타일의 LLM 도구 호출의 보안 문제는 서로 다른 MCP 서버 구현을 격리하는 데 있지 않음
- 로컬에서 실행되는 MCP 서버 구현은 설치에 사용하는 패키지 관리자가 검증해야 함 (원격 MCP 서버는 실제로 검증하기 더 어려움)
- 문제는 MCP를 에이전트 시스템에서 사용할 때 발생하는 간접 프롬프트 주입의 특별한 형태임
- 에이전트가 동일한 컨텍스트에서 모든 설치된 MCP 서버 사양을 포함하므로, 신뢰할 수 없는 MCP 서버가 다른 MCP 서버(예: 민감한 데이터베이스에 접근할 수 있는 서버)의 동작을 쉽게 조작할 수 있음. 이를 도구 그림자화라고 부름
- 또한, MCP의 동적 특성 때문에 MCP 서버는 제공하는 도구 세트를 특정 사용자에게만 변경할 수 있음. 이는 MCP 서버가 언제든지 악의적으로 변할 수 있음을 의미함
- 현재 MCP 클라이언트인 Claude와 Cursor는 이러한 변경 사항을 알리지 않으며, 이는 에이전트와 사용자를 취약하게 만듦
- 더 관심 있는 사람은 [1]에서 더 자세한 블로그 글을 확인해 보길 바람. 우리는 에이전트 보안에 대해 연구와 Invariant에서 오랫동안 작업해 왔음
- 또한, 인기 있는 WhatsApp MCP 서버에 대한 도구 중독 공격을 포함하여 모두가 실험해 볼 수 있는 코드 스니펫을 공개함 [2]
-
이러한 공격은 대부분 공기 잠금 장치의 잘못된 측면에 있는 또 다른 예시임. 이들은 권한 경계를 넘지 않으며, 이미 할 수 있는 일을 이상한 방법으로 수행한 것임
- MCP 서버는 사용자 수준에서 코드를 실행하며, AI를 속여 SSH 키를 읽도록 할 필요가 없음. 그냥 키를 읽을 수 있음
- 나머지는 기본적으로 다른 개발자 도구/생태계(NPM 또는 VS Code Extensions)에도 제기할 수 있는 동일한 불만임
-
다음과 같은 더 나은 설계를 구상하는 도전 과제:
-
- 사람들이 "S는 보안을 의미함"이라는 기사를 쓰지 않도록 할 수 있는 적절한 보안 표준을 갖추고
-
- 프로그램이 현재 가장 유용한 MCP가 제공하는 것과 동일한 기능 세트를 제공할 수 있도록 하며, 자동 기능을 수동 사용자 확인이 필요한 것으로 바꾸지 않고, 일반적으로 전체 아이디어의 목적을 무력화하지 않으며
-
- 모든 것을 기업의 게이트키퍼가 있는 독점 마켓플레이스에 잠그지 않음
- 제안을 보고 싶음, 왜냐하면 지금까지 본 것은 일반적이고 구체적이지 않은 "MCP는 안전하지 않음!!!111"이라는 것뿐임. 보안과 유용성이 상반되는 힘이라는 것을 사람들이 잊었을 때 특히 쉽지 않음
-
-
좋은 기사지만 이 모든 것이 AI 생성된 것인지 궁금함
- 프로필 사진이 StableDiffusion으로 생성된 것 같고, 계정이 오늘 생성되었으며 이전 기사 없음
- 또한 Elena Cross에 대한 다른 참조를 찾을 수 없었음
-
O는 관찰 가능성을 의미함. 이번 주에 MCP 서버를 탐색하고 작성하는 데 깊이 빠져 있었음
- 대부분의 구현, 내 장난감 구현을 포함하여, 감사나 메트릭이 없음. Claude는 MCP 서버의 로그 출력을 저장하지만, 이는 디버깅을 위한 것이지 DevOps/SecOps를 위한 것이 아님
- 문화적으로, OP가 설명한 문제는 소프트 기술 사람들(머글)에게 큰 문제임. 이와 관련된 서브레딧에서 사람들은 자신의 기계에서 MCP CLI 프로그램을 실행하며 즐거운 시간을 보내고 있음
- OP의 보안 댓글은 개발자에게는 명백하지만, 이러한 사용자는 얼마나 위험한지에 대한 관점이 없음
- 사람들은 Docker에 대해 배우고 있으며, Claude는 예제에 그 사용법을 포함하고 있음. 그러나 대부분의 사람들은 그냥 블롭을 다운로드하고 실행함. 사람들은 MCP 서버를 무작정 코딩하고 실행하고 있음
- MCP가 확산됨에 따라 프레임워크와 도구가 보안, 관찰 가능성 등을 지원하기 위해 성장할 것임. 이는 90년대 중반 웹을 구축하는 것과 같음
- OP와 관련 없지만, 이를 구축하는 동안 Claude Desktop에 무언가를 입력하고 VSCode에서 중단점을 트리거하는 것이 매우 흥미로웠음
-
맞음. 나도 같은 생각이었음, 비록 내가 메모를 발표할 때 깊이 들어가지 않았지만
-
사용 중인 소프트웨어가 악의적이지 않고 안전하게 구현되었을 때도, 원하는 방식으로 사용되는지 어떻게 확인할 수 있을까?
- 로컬 파일 시스템을 수정할 수 있는 MCP 서버와 클라우드 저장소의 객체를 수정하는 MCP 서버가 있다고 가정해 보자. 사용자가 LLM 에이전트가 올바른 선택을 하도록 어떻게 보장할 수 있을까?
- 많은 옵션을 제공하고 모든 행동을 감시하지 않으려 하지만, 그렇게 하면 더 많은 문제가 발생할 가능성이 있음
-
Equixly가 테스트한 MCP 서버 구현의 43% 이상이 안전하지 않은 셸 호출을 가졌음
- 어떻게 매번 이런 함정에 빠질 수 있는지
-
MCP가 무엇인지 궁금함. 여러 번 문서를 읽으려 했지만 해결하는 문제가 무엇인지 이해할 수 없었음. 주로 AI 에이전트에 특별한 점이 무엇인지, 수십 년 동안 존재해 온 결정론적 에이전트에 적용되지 않는 점이 무엇인지
-
나는 MCP의 전체 목적이 Anthropic이 프롬프트와 출력을 엿듣고 훈련 데이터를 최대화하는 것이라고 가정했음. 이것이 모든 AI 모델을 위한 미들웨어라는 것을 처음 알게 되었음