The Security Gap in MCP Tool Servers (And What I Built to Fix It)

개요

MCP(Model Context Protocol)는 AI 에이전트가 도구와 연결하는 방식이나, 현재 보안 모델이 부재하여 발생하는 취약점을 해결하기 위해 개발된 Heddle 런타임은 정의된 정책을 바탕으로 도구 호출을 검증하고 강화하는 솔루션을 제공한다.

주요 내용

* MCP 프로토콜의 보안 취약점: MCP는 클라이언트와 서버 간의 통신 방식을 정의하지만, 서버가 허용되는 작업, 클라이언트-서버 인증, 호출 가능한 도구에 대한 권한 부여, 감사 추적 등에 대한 보안 모델을 제공하지 않아 개발자가 자체적으로 구현해야 하는 부담이 있다.
* 보안 부재로 인한 실제 위험: MCP 서버는 프로세스가 접근할 수 있는 모든 것에 대해 전체 액세스 권한을 가지며, API 키가 여러 위치에 평문으로 노출되고, 쓰기/읽기 모드 구분이 없어 민감한 데이터 조작이나 서비스 재시작 등이 감지되지 않고 발생할 수 있다. 도구 조합을 통한 예측 불가능한 위험도 발생할 수 있다.
* Heddle 런타임 솔루션: Heddle는 YAML 설정 파일과 MCP 프로토콜 사이에 위치하여 도구를 정의하고, 각 호출에 대한 정책 적용을 통해 검증, 보안, 제공하는 런타임이다.
* Heddle의 6단계 디스패치 파이프라인: Heddle를 통해 이루어지는 각 도구 호출은 속도 제한, 액세스 모드 확인, 에스컬레이션 규칙, 신뢰 등급 적용, 입력 검증, HTTP 브리지 실행 등 6단계의 파이프라인을 거치며, 각 단계에서 호출을 차단하고 기록할 수 있다.
* Heddle의 보안 제어 메커니즘:
* 신뢰 등급 (Trust Tiers, T1-T4): 각 설정에 대한 신뢰 수준을 정의하며, T1(관찰자)은 GET 요청만 허용하고 T2(작업자)는 범위 지정된 쓰기를 허용하는 등 권한을 세분화한다.
* 액세스 모드 주석 (Access Mode Annotations): 각 도구를 read 또는 write로 명시하여, T1 설정에서 write 도구를 사용하려는 경우 로드 시점에 거부한다.
* 자격 증명 브로커 (Credential Broker): API 키를 보안적으로 관리하며, 설정 파일은 명시적으로 부여된 비밀 정보에만 접근할 수 있다.
* 에스컬레이션 규칙 (Escalation Rules): 특정 조건이 충족될 때 도구 호출을 검토 보류하고 감사 로그에 기록한다.
* 입력 검증 (Input Validation): 타입 체크, 길이 제한, 쉘/SQL/경로/LLM 프롬프트 주입 패턴 감지 등을 수행한다.
* 해시 체인 감사 로그 (Hash-Chained Audit Log): 모든 도구 호출, 신뢰 위반, 자격 증명 접근 등을 JSON Lines 형식으로 기록하며, 이전 항목의 SHA-256 해시를 포함하여 무결성을 보장한다.
* 설정 서명 (Config Signing): YAML 설정을 HMAC-SHA256으로 서명하여 변조를 감지하고, AI 생성 설정은 스테이징 디렉토리에 격리한다.
* Heddle 보안 감사 및 개선: 초기 개발 과정에서 발견된 4가지 보안 취약점(파이프라인 우회, 자격 증명 거부 실패, 감사 로그 레드액션 문제, 핸들러 코드 생성 방식)을 외부 보안 감사 및 자체 점검을 통해 해결하고 v0.2.1 버전에 반영했다.
* 프레임워크 매핑: Heddle의 보안 제어는 OWASP Agentic Top 10 (2026) 및 NIST AI RMF와 같은 산업 표준 프레임워크에 매핑된다.
* 시작 방법 및 향후 계획: Heddle는 Git에서 클론하여 설치하고, 제공되는 스타터 팩을 사용하거나 자연어를 통해 설정을 생성할 수 있으며, 향후 릴리스에서는 정책 예외의 유효 기간 설정, 자격 증명 부여의 설정 서명 연동, 판별 조건 충족 시 부여 취소 등의 기능이 추가될 예정이다.

시사점

Heddle는 MCP 기반 AI 에이전트 환경에서 필수적인 보안 제어 기능을 제공함으로써, API를 AI 에이전트에 노출하는 개발자들에게 강력한 보안 아키텍처와 산업 표준에 부합하는 컴플라이언스를 구축할 수 있는 실질적인 방안을 제시한다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions