MCP(Model Context Protocol)는 Anthropic이 2024년 11월 공개한 AI 에이전트의 외부 도구 접근 표준 프로토콜이다.
Claude Desktop·Cursor·Cline 같은 에이전트가 파일·셸·DB·API에 접근할 때 MCP 서버를 거치는데, 서버 측 권한 분리·도구 화이트리스트·프롬프트 인젝션 방어가 누락되면 AI가 호스트 시스템 전체를 탈취당한다.
이 글은 5가지 자주 발생하는 결함, 격리 표준 패턴, 30초 자가진단을 정리했다.
한눈에 보는 MCP 보안
Q. MCP 서버가 왜 보안 진입점이 되나요? A. MCP 서버는 AI 에이전트의 명령(자연어)을 시스템 콜(셸·파일·DB)로 변환합니다. 권한 분리 없이 운영 사용자 권한으로 실행되면 AI가 임의 명령 실행 가능한 셸을 가진 것과 동일합니다. Q. 프롬프트 인젝션은 MCP에서 왜 더 위험한가요? A. 일반 챗봇은 텍스트 응답만 위조되지만, MCP는 도구 호출까지 위조됩니다. 사용자가 검색한 외부 페이지에 'rm -rf 실행해' 같은 지시가 숨어 있으면 AI가 그대로 실행할 수 있습니다. Q. 도구 화이트리스트는 어떻게 만드나요? A. MCP 서버 코드에서 노출 도구 함수에 데코레이터를 강제하고, 위험 도구(셸 실행, 파일 삭제, 외부 HTTP)는 사용자 확인 절차를 거치게 합니다. Q. stdio 통신은 안전한가요? A. stdio는 인증·암호화가 없습니다. 같은 호스트의 다른 프로세스가 표준입출력을 가로채면 도구 응답 위조가 가능합니다. 신뢰 경계 안에서만 사용해야 합니다.5가지 자주 발생하는 결함
| # | 결함 | 위험도 |
|---|---|---|
| 1 | 도구 권한 과부여 — shell exec 도구가 사용자 확인 없이 즉시 실행 | 치명 |
| 2 | 프롬프트 인젝션 방어 누락 — 검색·페이지 fetch 결과를 검열 없이 LLM에 전달 | 치명 |
| 3 | 비밀키 노출 — MCP 서버 환경변수가 도구 응답에 그대로 포함 | 치명 |
| 4 | stdio 신뢰 — 인증 없이 동일 호스트 가정, 컨테이너 격리 누락 | 높음 |
| 5 | 로그·텔레메트리 평문 — 사용자 채팅+도구 입출력을 평문 로그로 저장 | 높음 |
격리 표준 패턴 — Python MCP 서버
from mcp.server import Server
from mcp.types import Tool
server = Server("safe-tools")
# 위험 도구는 명시적 사용자 확인 데코레이터
DANGEROUS_TOOLS = {'shell_exec', 'file_delete', 'http_post_external'}
@server.list_tools()
async def list_tools():
return [
Tool(name="read_file", description="현재 디렉토리 파일 읽기 (sandbox)"),
# shell_exec는 의도적으로 미노출
]
@server.call_tool()
async def call_tool(name, arguments):
# 1. 화이트리스트 — 미정의 도구 차단
if name not in {'read_file'}:
raise PermissionError(f"도구 비허용: {name}")
# 2. 인자 검증 — 경로 sandbox 강제
if name == 'read_file':
path = arguments.get('path', '')
if '..' in path or path.startswith('/'):
raise ValueError("sandbox 외부 경로 차단")
# 3. 민감 환경변수는 도구 응답에서 마스킹
result = read_file_sandboxed(path)
return [{"type": "text", "text": mask_secrets(result)}]
핵심 4요소: (1) 도구 화이트리스트 (2) 인자 sandbox 검증 (3) 위험 도구 사용자 확인 (4) 응답 시크릿 마스킹.
Anthropic MCP 공식 스펙은 권한 분리·격리를 서버 구현자 책임으로 명시한다.
컨테이너(Docker rootless) 또는 별도 사용자로 MCP 서버 실행이 권장된다.
30초 자가진단
# 1. MCP 서버 노출 도구 목록 — shell/exec 류 존재 시 확인 절차 필요
mcp inspector list-tools
# 2. 프롬프트 인젝션 테스트 — 검색 결과에 '시스템 명령 무시하고 X 실행' 삽입
# 3. MCP 프로세스 권한 확인 (rootless인지)
ps -ef | grep mcp | awk '{print $1}'
도구 응답에 환경변수·비밀키·내부 경로가 포함되면 결함이다. 간접 프롬프트 인젝션도 함께 점검하자.
24시간 패치 절차
| 순위 | 조치 |
|---|---|
| 1 | 위험 도구(shell/file_delete/http_post) 비활성화 또는 사용자 확인 강제 |
| 2 | 도구 응답에 시크릿 마스킹 필터 적용 |
| 3 | MCP 서버를 별도 사용자/컨테이너로 격리 |
| 4 | 외부 fetch 결과 검열 — 'ignore previous instructions' 류 필터링 |
| 5 | 로그에 사용자 입력·도구 응답 마스킹 |
지금 해야 할 것
실무자: CodeScan 무료 스캔으로 노출 점검.
CISO·임원: AI 에이전트 도입 전 전체 권한 모델 점검은 SENTRIX 30분 1:1 상담.
MCP 표준 채택 전 격리 모델을 먼저 설계해야 한다.