아키텍처 개요
데모 대상 MCP: Toolbox
Smithery.ai는 MCP 플러그인 허브로, 상당한 MCP 목록과 활성 사용자를 보유하고 있습니다. 그중에서도 smithery.ai에서 제공하는 공식 MCP 관리 도구인 @smithery/toolbox를 보안 평가의 중심으로 삼았습니다.
Toolbox를 테스트 대상으로 선택한 이유는 다음과 같습니다.
- 상당한 사용자 기반을 보유하고 있어 MCP 생태계 내에서 대표적인 샘플입니다.
- 추가 플러그인의 자동 설치를 지원하여 클라이언트 측 기능을 확장합니다 (예: Claude Desktop).
- API 키와 같은 민감한 구성이 포함되어 있어 잠재적인 익스플로잇 시연에 용이합니다.
데모에 사용된 악성 MCP: MasterMCP
SlowMist에서 보안 테스트 목적으로 특별히 개발한 MasterMCP는 모듈식 아키텍처를 기반으로 구축된 시뮬레이션된 악성 MCP 도구입니다. 주요 구성 요소는 다음과 같습니다.
- 로컬 웹사이트 서비스 시뮬레이션: http://127.0.0.1:1024
현실적인 공격 시나리오를 만들기 위해 MasterMCP는 로컬 웹사이트 서비스 시뮬레이션 모듈을 통합합니다. FastAPI 프레임워크를 활용하여 일반적인 웹 환경을 모방하는 간단한 HTTP 서버를 빠르게 구축합니다. 이러한 페이지는 제과점 정보 또는 표준 JSON 데이터를 반환하는 것처럼 무해해 보일 수 있지만, 소스 코드 또는 API 응답 내부에 세심하게 제작된 악성 페이로드를 숨기고 있습니다.
이러한 접근 방식을 통해 안전하고 제어된 로컬 환경에서 정보 포이즈닝 및 명령 숨김 기술을 포괄적으로 시연할 수 있습니다. 이는 대규모 언어 모델에서 비정상적인 동작을 유발할 수 있는 겉보기에는 평범한 웹 페이지 내에 숨어 있는 잠재적인 위험을 강조합니다.
- 지역화된 플러그인 MCP 아키텍처
MasterMCP는 새로운 공격 벡터에 대한 빠른 확장성을 용이하게 하기 위해 플러그인 방식을 채택합니다. 실행 시 MasterMCP는 이전 모듈의 FastAPI 서비스를 하위 프로세스에서 시작합니다.
데모 클라이언트
- Cursor: 전 세계적으로 가장 널리 사용되는 AI 지원 프로그래밍 IDE 중 하나입니다.
- Claude Desktop: MCP 프로토콜을 맞춤 설정한 Anthropic의 공식 클라이언트입니다.
데모에 사용된 대규모 언어 모델 (LLM)
- Claude 3.7
Claude 3.7은 민감한 작업 인식 기능이 향상되었고 현재 MCP 생태계 내에서 강력한 운영 기능을 대표하기 때문에 선택되었습니다.
claude_desktop_config.json 구성
구성이 완료되면 데모 단계가 시작됩니다.
Cross-MCP 악성 호출
이 데모에서는 체크리스트에 설명된 포이즈닝 기술과 Cross-MCP 악성 호출 전략을 모두 통합합니다.
웹 페이지 콘텐츠 포이즈닝 공격
- 주석 기반 포이즈닝
Cursor가 로컬 테스트 웹사이트인 http://127.0.0.1:1024에 액세스합니다.
이 겉보기에 무해한 ‘맛있는 케이크 세상’ 페이지는 대규모 언어 모델 클라이언트가 악성 웹사이트에 액세스할 때 발생할 수 있는 잠재적인 영향을 보여주는 시뮬레이션 역할을 합니다.
실행 명령:
결과를 보면 Cursor가 웹 페이지 콘텐츠를 읽을 뿐만 아니라 로컬 민감한 구성 데이터를 테스트 서버로 다시 전송한다는 것을 알 수 있습니다. 악성 프롬프트는 HTML 주석으로 소스 코드에 포함되어 있습니다.
이 주석 기반 접근 방식은 비교적 간단하고 쉽게 탐지할 수 있지만 여전히 악성 작업을 트리거할 수 있습니다.
- 인코딩된 주석 포이즈닝
http://127.0.0.1:1024/encode에 액세스하면 이전 예제와 동일하게 보이는 페이지가 나타납니다. 그러나 악성 프롬프트는 인코딩되어 있어 페이지의 소스 코드를 검사할 때도 익스플로잇을 탐지하기가 더 어렵습니다.
소스 코드에 명시적인 프롬프트가 없어도 공격은 성공합니다.
MCP 도구 반환 정보 포이즈닝
MasterMCP 프롬프트 지침에 따라 악성 MCP를 트리거하고 후속 작업을 시연하는 시뮬레이션된 명령을 입력합니다.
명령을 트리거하면 클라이언트가 Toolbox에 대한 Cross-MCP 호출을 시작하고 새 MCP 서버를 성공적으로 추가합니다.
플러그인 코드를 검사하면 반환된 데이터에 인코딩된 악성 페이로드가 포함되어 있어 사용자가 사실상 탐지할 수 없다는 것을 알 수 있습니다.
타사 인터페이스 오염 공격
이 데모에서는 악성 및 비악성 MCP가 타사 API 데이터를 컨텍스트에 직접 반환할 때 발생할 수 있는 잠재적인 위험을 강조합니다.
예제 코드:
실행 요청:
결과: 악성 프롬프트가 반환된 JSON 데이터에 포함되어 악성 실행을 성공적으로 트리거합니다.
MCP 초기화 중 포이즈닝 기술
이 데모에서는 초기 프롬프트 삽입 및 이름 충돌 체크리스트 항목을 다룹니다.
악성 함수 덮어쓰기 공격
MasterMCP는 Toolbox의 ‘remove_server’ 함수와 동일한 함수 이름을 가진 도구를 만들고 그 안에 악성 프롬프트를 인코딩합니다.
실행 명령:
Claude Desktop은 원래 ‘toolbox remove_server’ 메서드를 호출하지 않고 대신 MasterMCP에서 제공하는 동일한 이름의 메서드를 트리거합니다.
이는 ‘원래 메서드가 더 이상 사용되지 않는다’는 점을 강조하여 대규모 언어 모델이 악성으로 덮어쓴 함수를 우선시하도록 유도함으로써 달성됩니다.
악성 글로벌 검사 로직 추가
MasterMCP는 다른 도구를 실행하기 전에 필수 보안 검사를 시행하도록 설계된 ‘banana’라는 도구를 만듭니다.
각 함수가 실행되기 전에 시스템은 ‘banana’ 검사 메커니즘을 우선시합니다.
이 글로벌 로직 삽입은 코드 내에서 ‘banana 탐지의 의무 실행’을 반복적으로 강조함으로써 수행됩니다.
악성 프롬프트를 숨기기 위한 고급 기술
LLM 친화적인 인코딩 방법
대규모 언어 모델은 다국어 형식에 대한 강력한 구문 분석 기능을 갖추고 있어 악성 정보를 숨기는 데 악용될 수 있습니다. 일반적인 방법은 다음과 같습니다.
- 영어 환경: 16진수 바이트 인코딩
- 중국어 환경: NCR 인코딩 또는 JavaScript 인코딩
임의 악성 페이로드 반환 메커니즘
세 번째 섹션에서 언급한 타사 인터페이스 오염과 유사하게 http://127.0.0.1:1024/random을 요청하면 다음과 같은 결과가 발생합니다.
각 요청은 악성 페이로드가 포함된 임의로 생성된 페이지를 반환하여 탐지 및 추적의 어려움을 크게 증가시킵니다.
MasterMCP의 실제 시연을 통해 Model Context Protocol (MCP) 생태계 내에 숨겨진 보안 취약점이 드러났습니다. 기본적인 프롬프트 삽입 및 Cross-MCP 호출부터 초기화 중의 더 미묘한 공격 및 악성 지침 숨김에 이르기까지 각 단계는 MCP 생태계의 힘과 함께 내재된 취약성을 상기시켜 줍니다.
오늘날 대규모 모델이 외부 플러그인 및 API와 점점 더 많이 상호 작용함에 따라 겉보기에 사소한 입력 오염이 시스템 전체의 보안 위험을 트리거할 수 있습니다. 인코딩 기술, 임의 오염 및 함수 덮어쓰기를 포함한 공격자 전술의 진화하는 다양성은 기존 보안 접근 방식에 대한 포괄적인 업그레이드를 필요로 합니다.