모델 컨텍스트 프로토콜(MCP) 연결의 보안 위험성
- •MCP 서버는 AI 에이전트에 기능적 도구를 제공하지만, 파괴적인 명령 실행과 악의적인 데이터 조작의 위험을 초래한다.
- •개발자는 서버 응답을 통한 프롬프트 인젝션 공격을 방지하기 위해 도구의 출력값을 신뢰할 수 없는 데이터로 취급해야 한다.
- •사용자는 운영체제 수준의 샌드박스를 적용하고, 명시적인 읽기/쓰기 차단 규칙을 설정하여 에이전트의 활동 범위를 제한해야 한다.
모델 컨텍스트 프로토콜(MCP)은 AI 에이전트를 외부 도구와 연결하는 표준 규약으로, 에이전트가 데이터베이스 쿼리나 API 요청과 같은 작업을 수행할 수 있게 한다. 이러한 기능적 연결은 크게 두 가지 보안 취약점을 발생시킨다. 하나는 에이전트가 파괴적인 명령을 실행할 가능성이고, 다른 하나는 외부에서 유입된 신뢰할 수 없는 데이터에 의해 에이전트가 조작될 위험이다. 현재의 보안 도구로는 이 두 가지 문제를 동시에 해결하기 어렵기 때문에 각각의 방어 전략이 요구된다.
첫 번째 위험은 프롬프트 인젝션이다. 이는 MCP 서버가 응답값에 숨겨진 지시사항을 포함해 모델이 이를 무비판적으로 실행하게 만드는 공격이다. 개발자는 도구에서 출력된 모든 데이터를 웹 폼 입력값과 마찬가지로 신뢰할 수 없는 정보로 간주해야 한다. 원시 출력값을 명령 인자로 직접 전달하거나 화면에 렌더링하는 행위는 피해야 하며, 출력값이 에이전트의 논리에 영향을 미치지 않도록 엄격한 데이터 검사가 필수적이다.
두 번째 위험은 에이전트가 파일 삭제나 승인되지 않은 네트워크 요청 같은 유해한 작업을 수행하는 경우다. 모델 자체의 윤리적 가이드라인에 의존하는 것은 충분한 방어책이 되지 못한다. 따라서 Bash 실행 환경을 격리하기 위해 운영체제 수준의 샌드박스를 구현해야 한다. Claude Code의 경우 macOS의 Seatbelt나 리눅스 및 WSL2의 Bubblewrap을 활용한 설정이 가능하다. 다만 기본 샌드박스 설정은 ~/.aws/credentials나 ~/.ssh/와 같은 민감한 경로에 대한 읽기 권한을 허용하는 경우가 많으므로 주의해야 한다. 사용자는 수동으로 접근 제한 규칙을 설정하여 민감한 파일 읽기를 거부하고, curl이나 wget과 같은 네트워크 명령을 제한해 데이터 유출을 방어해야 한다.
결론적으로 사용자는 MCP 서버를 중요한 공격 표면으로 인식해야 한다. 서버를 연결하기 전 소스 코드를 검증하고, 사용하지 않는 연결은 삭제해 위험을 줄여야 한다. 가능하면 지속적인 MCP 서버를 구축하기보다 CLI 도구를 직접 호출하는 방식을 권장한다. MCP 연결을 평가할 때는 소스의 신뢰성, 명령 제한 규칙 존재 여부, 도구의 출력값을 신뢰할 수 없는 데이터로 취급하는지 여부를 핵심 지표로 삼아야 한다. MCP 연결은 에이전트에게 물리적 행위 능력을 부여하는 것과 같으며, 해당 도구를 제어하는 외부 주체에 의해 통제될 수 있기 때문이다.