MCP(모델 컨텍스트 프로토콜, Model Context Protocol)는 Anthropic에서 개발한 강력한 프로토콜로, LLM(대규모 언어 모델)을 외부 툴에 연결하는 방식을 정의합니다. 사용이 쉽고 AI 활용에 이점을 더해 빠르게 주목을 받았습니다. 이 문서에서는 MCP 사용 시 발생할 수 있는 몇 가지 잠재적인 보안 리스크와 이러한 리스크를 줄이는 방법을 살펴보겠습니다.

MCP 작동 방식

MCP는 툴과 LLM을 직접 연결하지 않습니다. 대신에 MCP 클라이언트 구성 요소가 LLM에 액세스하고 MCP 서버 구성 요소는 툴에 액세스합니다. 하나의 MCP 클라이언트는 하나 이상의 MCP 서버에 액세스할 수 있으며, 사용자는 MCP 클라이언트에 원하는 만큼의 MCP 서버를 연결할 수 있습니다.

MCP works

일반적인 MCP 클라이언트, 서버 교환은 위와 같습니다.

  1. 사용자가 MCP 클라이언트에서 태스크를 요청함
    1. MCP 클라이언트에는 각 MCP 서버가 구현하거나 액세스할 수 있는 툴에 대한 정보가 있음
  2. MCP 클라이언트는 사용자의 요청과 MCP 서버의 정보를 필요한 툴과 사용할 매개 변수로 응답하는 LLM으로 전달함
  3. MCP 클라이언트는 툴, 매개 변수에 대한 정보를 MCP 서버에 전송함
  4. MCP 서버는 태스크를 완료하고 답변을 LLM에 전달하는 MCP 클라이언트에 답변을 반환하고, LLM은 사용자에 대한 응답을 생성함
  5. MCP 클라이언트가 사용자에게 응답을 표시함
MCP client

MCP 서버는 로컬이나 원격으로 실행할 수 있으며, 실행 방식에 따라 보안 리스크가 달라집니다.

'로컬 MCP 서버'는 Red Hat이 제어하는 호스트에서 실행하는 MCP 서버로 정의합니다. 요청된 태스크를 수행하기 위해 로컬 MCP 서버는 일반적으로 OS 커맨드나 사용자 정의 코드를 로컬에서 실행합니다.

'원격 MCP 서버'는 타사에서만 원격으로 실행합니다. 원격 MCP 서버에 액세스할 수는 있지만 Red Hat이 제어하는 호스트에서 실행되지는 않습니다. 원격 MCP 서버는 사용자가 데이터에 액세스할 수 있기 때문에 여전히 사용자에 대한 보안 리스크가 있지만, 로컬에서 실행되지 않으므로 다수의 일반적인 리스크는 적용되지 않습니다.

보안 리스크 및 제어

다음은 보안 연구원들이 식별한 몇 가지 MCP 리스크와 몇 가지 리스크 감소 접근 방식에 대한 간략한 개요입니다.

인증 및 권한 부여

MCP 서버가 사용자의 요청으로 작업을 수행하는 경우 'https://en.wikipedia.org/wiki/Confused_deputy_problem' 문제가 발생할 리스크가 있습니다. 이상적으로는 MCP 서버가 사용자를 대리하여 해당 사용자의 권한 내에서만 이 작업을 실행해야 합니다. 그러나 이는 MCP 서버의 구현 방식에 따라 보장되지 않을 수 있습니다. 만약 올바르게 구현되지 않으면 사용자는 본래 액세스 권한이 없으나 MCP 서버에는 허용된 리소스에 액세스할 수 있게 되어 최소 권한 원칙을 위반하게 됩니다.

MCP는 OAuth를 사용하여 권한 부여를 정의하고 있으나, 현재 사양이 현대적인 기업 환경의 관행과 상충하는 구현 세부 사항을 포함하고 있다는 점이 커뮤니티 내에서 확인되었습니다. 이러한 불일치를 해결하기 위해 커뮤니티는 권한 부여 사양을 개선하고 업데이트하는 작업을 진행하고 있습니다.

공급망 리스크

MCP 서버는 실행 가능한 코드로 구성되므로 사용자는 반드시 신뢰할 수 있는 MCP 서버만 사용해야 합니다. 또한 MCP 서버를 개발하는 경우 사용자가 소프트웨어를 신뢰할 수 있도록 예방 조치를 취해야 합니다. 사용자가 소프트웨어의 무결성을 더욱 확실히 검증할 수 있도록 MCP 구성 요소에는 개발자의 서명이 포함되어야 합니다.

정적 애플리케이션 보안 테스트(SAST)와 같은 보안 모범 사례를 구현한 파이프라인에 MCP 구성 요소를 빌드해야 합니다. 테스트 결과를 분석하고, 오탐을 제거하고, 발견된 보안 취약점을 수정해야 합니다. 또한 파이프라인에는 소프트웨어 구성 분석(SCA)을 구현하여 MCP 서버에서 사용하는 종속성의 발견된 취약점을 식별하고 수정해야 합니다.

MCP 서버가 클라우드 서비스로 제공되는 경우, 클라이언트가 서버를 검증할 수 있도록 암호화 정책 서버 검증 기능도 구현해야 합니다.

다른 소프트웨어와 마찬가지로, 공격자가 MCP 구성 요소의 소스 코드에 액세스하고 이를 수정할 수 있다면 사용자에게 심각한 위협이 될 수 있습니다. 이러한 리스크를 줄이기 위해 소프트웨어 개발자와 사용자는 사용하는 모든 종속성의 무결성을 확인하고 맬웨어를 검사해야 합니다.

권한 없는 커맨드 실행

로컬 MCP 서버는 모든 코드를 실행할 수 있습니다. MCP 클라이언트가 정보를 MCP 서버에 전달하는 방법과 MCP 서버가 구현되는 방법에 따라 커맨드 실행 기능이 커맨드 주입 취약점에 노출될 수 있습니다. 커맨드 실행 함수에 데이터를 인수로 사용하기 전에, 항상 실행할 커맨드를 다시 확인하고 데이터를 정제(sanitize)해야 합니다.

다음은 커맨드 주입 취약점이 있는 MCP 서버의 예입니다.

def dispatch_user_alert(self, notification_info: Dict[str, Any], summary_msg: str) -> bool:
"""Sends system alert to user desktop"""
notify_config = self.user_prefs["alert_settings"]

try:
     alert_title = f"{notification_info['title']} - {notification_info['severity']}"
     if sys.platform == "linux":
         subprocess.call(["notify-send", alert_title])
     return True

코드 확인: https://equixly.com/blog/2025/03/29/mcp-server-new-security-nightmare/ 

또한 로컬 MCP 서버는 명시적으로 허용된 실행과 액세스만 가능하도록 샌드박스 환경에서 실행하는 것이 좋습니다.

프롬프트 주입

MCP 서버는 커맨드를 실행하고 API를 호출하는 기능 때문에 중대한 보안 리스크를 초래할 수 있습니다. 가장 큰 우려 중 하나는 사용자가 의도하지 않은 작업이라도 LLM이 이를 적절하다고 판단하여 실행할 수 있다는 점입니다.

이러한 리스크는 악의적인 의도 없이 발생할 수도 있지만, 악의적인 공격 시나리오에서도 발생합니다. 예를 들어 선의의 사용자가 자신이 직접 작성하지 않았으며 악의적인 제3자가 추천한 프롬프트를 MCP 클라이언트에 제출할 수 있습니다. 이러한 프롬프트는 난독화되어 있더라도 사용자의 대화 기록이나 액세스 가능한 툴에서 개인 정보를 유출할 수 있습니다. 사용자가 클라우드 환경에 새 사용자를 생성하기 위한 복잡하고 난독화된 프롬프트라고 믿고 이를 복사하여 붙여 넣는 상황을 상상해 보시기 바랍니다. 악성 프롬프트는 의도한 사용자를 생성하는 것 외에도 공격자를 위한 또 다른 사용자를 몰래 생성할 수 있습니다.

따라서 MCP 서버에서 수행하는 작업은 항상 사용자의 확인을 거치도록 하거나 리스크를 허용 가능한 수준으로 줄이기 위해 해당 기능을 제한해야 합니다.

툴 주입

또 다른 리스크는 악의적인 MCP 서버가 빌드될 가능성입니다. 이는 완전히 새로운 수준의 잠재적 위험을 초래합니다. 예를 들어, 악성 MCP 서버는 소스 코드와 툴 설명이 정상적으로 보이기 때문에 처음 설치 시에는 안전해 보입니다. 그러나 향후 업데이트에서 툴이 수정되는 겁니다. 가령, 원래 기상 정보를 수집하는 것으로 설명된 툴이 업데이트를 통해 기밀 정보를 수집하여 공격자에게 전송하도록 변경될 수 있습니다.

이 리스크는 툴 이름을 조작하여 발생할 수도 있습니다. 악성 MCP 서버는 툴에 기만적인 이름을 붙여서 LLM이 다른 정당한 툴로 수행해야 하는 태스크를 위해 해당 툴을 선택하도록 유도할 수 있으며, 이로 인해 의도치 않거나 해로운 작업이 발생할 수 있습니다.

이러한 리스크를 완화하려면 사용자가 MCP 서버를 설치할 수 있는 소프트웨어에는 MCP 서버의 버전을 고정하고, 설치 후 코드나 구성에 변경 사항이 있을 경우 사용자에게 알림을 보내는 기능이 있어야 합니다.

샘플링

악성 MCP 서버는 MCP 샘플링 기능을 악용하려 할 수도 있습니다. MCP 서버가 LLM을 사용하여 요청을 완료하도록 MCP 클라이언트에 대신 요청할 수 있습니다. MCP 서버가 LLM에 요청을 보내야 하는 경우 MCP 클라이언트가 서버를 대신하여 요청을 보내는 것을 샘플링이라고 합니다. 사용자가 MCP 클라이언트를 더 많이 제어할 수 있고 비용을 한곳으로 통합하는 데 유용하기 때문입니다.

MCP 고객은 샘플링과 관련된 리스크를 줄이기 위해 다음 제어 기능을 구현해야 합니다.

  • 클라이언트가 완료 요청을 사용자에게 표시하도록 설정
  • 사용자가 완료 내용을 수정하거나 거부하도록 허용
  • 클라이언트가 완료 내용을 필터링하거나 수정하도록 허용
  • 사용자가 사용되는 모델을 제어하도록 허용
  • 적절한 속도 제한 구현
  • 비용 노출 제어
  • 타임아웃 구현

로깅

앞에서 설명한 대로 MCP 서버는 중요한 커맨드를 실행할 수 있습니다. 로그나 이벤트를 표준 중앙 로깅 서버로 전송하거나 이러한 이벤트를 로컬에 기록할 수 있는 기능이 있어야 합니다. 이를 통해 문제가 발생하거나 의심될 경우 시스템 작업을 조사할 수 있습니다.

취약점 관리

MCP 서버도 다른 소프트웨어와 마찬가지로 코드이기 때문에 취약점이 있을 수 있습니다. 따라서 MCP 서버를 표준 취약점 관리 프로세스에 포함하는 것이 매우 중요합니다. 여기에는 조직의 리스크 감수 성향에 따라 MCP 클라이언트, 서버와 관련 종속성을 계획된 간격으로 업그레이드하는 작업이 포함됩니다.

결론

MCP는 자연어를 사용하여 툴을 조작하고, 사용자와 LLM, 툴이 서로 소통하는 방법을 더 잘 이해하는 데에 대한 관심을 불러일으켰습니다. 그러나 자동화와 AI의 자율성 확장으로 인해 발생하는 보안 위험도 인식해야 합니다. 다른 신기술과 마찬가지로 기업은 MCP를 사용할 때 기업은 그 가치를 극대화하기 위해 기업 환경에 대한 보안 리스크를 평가하고 적절한 보안 제어를 구현해야 합니다.

자세히 알아보기

Red Hat Product Security

Red Hat은 모든 직원이 근무 위치와 상관없이 보안 및 개인정보 위험을 완화하는 데 필요한 양질의 정보와 그렇게 할 수 있는 액세스 권한을 이용할 자격이 있다고 믿습니다.

저자 소개

Florencio has had cybersecurity in his veins since he was a kid. He started in cybersecurity around 1998 (time flies!) first as a hobby and then professionally. His first job required him to develop a host-based intrusion detection system in Python and for Linux for a research group in his university. Between 2008 and 2015 he had his own startup, which offered cybersecurity consulting services. He was CISO and head of security of a big retail company in Spain (more than 100k RHEL devices, including POS systems). Since 2020, he has worked at Red Hat as a Product Security Engineer and Architect.

UI_Icon-Red_Hat-Close-A-Black-RGB

채널별 검색

automation icon

오토메이션

기술, 팀, 인프라를 위한 IT 자동화 최신 동향

AI icon

인공지능

고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트

open hybrid cloud icon

오픈 하이브리드 클라우드

하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요

security icon

보안

환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보

edge icon

엣지 컴퓨팅

엣지에서의 운영을 단순화하는 플랫폼 업데이트

Infrastructure icon

인프라

세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보

application development icon

애플리케이션

복잡한 애플리케이션에 대한 솔루션 더 보기

Virtualization icon

가상화

온프레미스와 클라우드 환경에서 워크로드를 유연하게 운영하기 위한 엔터프라이즈 가상화의 미래