AI 에이전트가 당신의 파일 시스템을 무방비하게 다루게 두지 마세요: SafeMCP 구축하기
요약
AI 에이전트가 MCP(Model Context Protocol)를 통해 로컬 파일 시스템에 접근할 때 발생할 수 있는 보안 취약점과 프롬프트 인젝션 위험을 경고합니다. 이를 방지하기 위해 전송 계층에서 보안을 강화하는 SafeMCP Gateway 구축 방안을 제시합니다.
핵심 포인트
- MCP 서버는 사용자 권한을 상속받아 RCE 위협에 노출될 수 있음
- 프롬프트 인젝션을 통한 경로 탐색(Path Traversal) 공격 위험 존재
- 입력값 검증 결여로 인한 보안 공백이 심각한 수준임
- SafeMCP는 AI 클라이언트와 MCP 서버 사이의 보안 프록시 역할을 수행함
Model Context Protocol (MCP)에 대해 진지하게 이야기해 볼 필요가 있습니다.
지금 모두가 "바이브 코딩 (vibe coding)"에 열광하고 있습니다. Cursor, Claude Code, 또는 VS Code에 MCP 서버를 연결하고, AI에게 세 개의 디렉토리에 걸쳐 버그를 수정하라고 명령한 뒤, AI가 로컬 서버를 구동하고, 파일을 읽고, 터미널 명령어를 실행하는 동안 커피를 한 잔 마시러 갑니다. 마치 완전한 마법처럼 느껴지죠.
하지만 솔직히 말해서요? 이건 완전히 공포스럽기도 합니다.
제가 그냥 피해망상인 것일 수도 있지만, 통계적 텍스트 예측 엔진에 검증되지 않은 로컬 머신에 대한 직접적인 접근 권한을 주는 것이 좋은 생각인지 스스로에게 묻는 단계를 우리 모두가 집단적으로 건너뛴 것 같습니다.
일부 보안 전문가들은 우리가 거대한 원격 코드 실행 (Remote Code Execution, RCE) 위기로 직행하고 있다고 이미 경고하고 있습니다. 생각해 보세요. 대부분의 MCP 서버는 로컬 하위 프로세스 (Subprocess)로 실행됩니다. 이들은 당신의 정확한 사용자 권한을 상속받습니다. 만약 당신이 에디터를 관리자 권한으로 실행하거나 민감한 환경 변수에 접근할 수 있는 상태라면, AI도 똑같은 권한을 갖게 됩니다.
그리고 진짜 문제는 AI가 자발적으로 악해질 것이라는 점이 아닙니다. 진짜 문제는 프롬프트 인젝션 (Prompt Injection)입니다.
열풍 속의 보안 공백
최근 GitHub에 공개된 MCP 서버들을 살펴보았는데, 입력값 검증 (Input Validation)의 결여가 정말 심각한 수준이었습니다. 개발자들이 멋진 도구들을 만드는 데 급급하다 보니, 기본적인 보안 위생 (Security Hygiene)은 완전히 뒤처져 있습니다.
만약 AI 에이전트가 신뢰할 수 없는 문자열—예를 들어 GitHub 이슈의 악의적인 댓글, 자동화된 이메일, 또는 데이터베이스 내부의 오염된 레코드—을 읽게 된다면, 인젝션 페이로드 (Injection Payload)를 실행하도록 쉽게 조작될 수 있습니다. 모델은 당신의 시스템 지침과 자신이 처리하고 있는 데이터 사이의 차이를 알지 못합니다. 모델은 이 둘을 완전히 동일하게 취급합니다.
프롬프트 인젝션이 표준 파일 시스템 MCP 도구를 속여서 다음과 같은 이름의 파일을 찾게 만든다면 어떤 일이 벌어질까요?
../../../../../../etc/passwd
혹은 당신의 개인 AWS 키를 탈취한다면 어떨까요? 도구는 그저 실행할 뿐입니다. 이는 전형적인 경로 탐색 취약점 (Path Traversal Vulnerability)이지만, 악의적인 해커가 웹 양식에 이를 입력하는 대신, 자동화된 에이전트가 텍스트 조각의 지시에 따라 이를 수행한다는 점이 다릅니다.
전통적인 방화벽은 이를 잡아내지 못합니다. 이는 당신의 로컬 하드웨어에서 표준 입력 및 출력 스트림 (stdin/stdout)을 통해 완전히 내부적으로 발생하기 때문입니다.
저는 단 한 번의 잘못된 웹 스크래핑 (Web Scrape)이 제 로컬 드라이브를 통째로 날려버릴까 봐 끊임없이 걱정하지 않고도 이러한 자율 에이전트 (Autonomous Agents)를 사용할 수 있는 방법을 원했습니다. 그래서 저는 MCP 생태계를 위해 특별히 설계된 로컬 방화벽을 구축했습니다.
그것의 이름은 SafeMCP Gateway입니다.
SafeMCP란 무엇인가?
50개의 서로 다른 서드파티 (Third-party) MCP 서버들을 일일이 패치하려고 시도하는 대신, 보안 계층은 전송 계층 (Transport Level)에 존재해야 한다는 것을 깨달았습니다.
SafeMCP는 격리 장벽 (Isolation Barrier)이자 표준 I/O 프록시 (Proxy) 역할을 합니다. 이는 당신의 AI 클라이언트 (예: Cursor)와 대상 MCP 서버 사이에 직접 위치합니다. SafeMCP는 파이프라인을 통과하는 모든 JSON-RPC 2.0 프레임을 가로채고, 인자 (Arguments)를 분석하며, 이를 로컬 보안 규칙에 따라 평가한 뒤, 통과할 경우에만 전달합니다.
[ AI 클라이언트 ] ---> [ SafeMCP Gateway ] ---> [ 대상 MCP 서버 ]
(Cursor) (보안 검사) (Raw 파일 시스템/DB)
만약 AI가 수상한 행동을 시도하면, SafeMCP는 이를 즉시 차단하고 클라이언트에 깨끗한 에러 프레임을 반환합니다. 실제 백엔드 서버는 위험한 페이로드 (Payload)를 구경조차 할 수 없습니다.
현재 SafeMCP가 처리하는 기능은 다음과 같습니다:
- Path Traversal Shield (경로 탐색 방어): 모든 경로 인자 (Path arguments)를 절대적이고 정형화된 형태 (Canonical forms)로 정제하고 해결합니다. 만약 어떤 작업이
..해킹을 사용하여 정의된 워크스페이스 폴더 외부로 몰래 나가려고 시도하면, 즉시 차단됩니다. - Subprocess Guard (서브프로세스 보호): 셸 메타문자 (Shell metacharacters)를 완전히 차단하며, 실행 가능한 바이너리 (Executable binaries)를 엄격하고 좁은 허용 목록 (Allowlist)으로 제한합니다.
- SSRF Network Blocker (SSRF 네트워크 차단기): 에이전트들은 외부로 연락을 시도하는 것을 좋아합니다. SafeMCP는 프라이빗 서브넷 (Private subnets), 루프백 인터페이스 (Loopback interfaces), 그리고 클라우드 메타데이터 엔드포인트 (악명 높은 AWS IMDSv2 주소인 169.254.169.254와 같은)에 대한 접근을 차단합니다.
- Forensic Auditing (포렌식 감사): 모든 단일 트랜잭션 (Transaction)은 익명화된 파라미터 (Parameters)와 함께 로컬의 구조화된
safemcp-audit.jsonl파일에 기록되므로, 에이전트가 당신의 뒤에서 정확히 무엇을 하려고 했는지 검토할 수 있습니다.
Zero Dependencies (의존성 제로)
저는 실행하기 위해 인터넷의 절반을 다운로드해야 하는 현대적인 보안 도구들에 대해 약간의 불만이 있습니다. 취약점으로부터 자신을 보호하기 위해 300개의 무작위 NPM 패키지를 설치하는 것은 완전히 역효과처럼 느껴집니다. 이는 단지 하나의 공급망 리스크 (Supply-chain risk)를 다른 리스크로 교체하는 것일 뿐입니다. 그렇기 때문에, 저는 오직 네이티브 Node.js 코어 모듈 (Core modules)만을 사용하여 SafeMCP를 작성했습니다. 프로덕션 의존성 (Production dependencies)이 전혀 없습니다. 코드베이스는 가볍고 투명하며, 직접 감사하기 쉽습니다.
How to Setup SafeMCP (SafeMCP 설정 방법)
사용법은 매우 간단합니다. 이 도구는 커맨드 래퍼 (Command wrapper)로 작동합니다. 저장소를 클론 (Clone)하고, 빌드한 다음, MCP 설정 파일에서 게이트웨이의 파라미터를 실제 서버 명령과 분리하기 위해 더블 대시 (--) 구분자를 사용하여 SafeMCP를 거치도록 경로를 변경하면 됩니다.
예를 들어, Claude Desktop 내에서 공식 Anthropic filesystem 서버를 보호하려면, claude_desktop_config.json은 다음과 같은 모습일 것입니다:
{
"mcpServers": {
"secure-filesystem": {
...
Cursor를 사용 중이라면, 유형(type)을 command로 설정한 새로운 MCP 서버를 추가하고 설정 패널에 이와 유사한 문자열을 바로 넣기만 하면 됩니다.
활성화되면 완전히 보이지 않게 작동합니다. 도구 파라미터(tool parameter)가 실제로 보안 제약 조건을 위반하지 않는 한 사용자의 흐름을 방해하지 않습니다. 만약 프롬프트 인젝션 (Prompt Injection)이 에이전트에 가해지면, 게이트웨이는 -32602 JSON-RPC 에러 프레임을 드롭하고, 에디터에는 "Access Denied"가 출력되며, 호스트 머신은 완전히 안전하게 유지됩니다.
코드 확인하기
이 프로젝트는 완전히 오픈 소스입니다. 소스 코드를 확인하거나, 정책 규칙 (policy rule)을 기여하거나, 자신의 머신에 직접 설정하고 싶다면 GitHub에 리포지토리가 올라와 있습니다:
👉 Angwyn/safemcp-gateway
에이전트 기반 소프트웨어 엔지니어링 (agentic software engineering)이 장기적으로 실제로 작동하려면, 우리는 전송 프로토콜 (transport protocols)을 보안 프레임워크 (security frameworks)로부터 분리하기 시작해야 합니다. 우리는 가공되지 않은 문자열 (raw strings)을 계속해서 신뢰할 수는 없습니다. 게이트키퍼 (gatekeeper) 없이 모델에게 머신의 루트 권한 (root access)을 주는 것을 멈추세요.
한번 살펴보시고, 직접 사용해 보신 후, 이상한 엣지 케이스 (edge cases)를 발견하거나 기본 차단 목록 (blocklist)에 추가되어야 한다고 생각하는 특정 보안 규칙이 있다면 저에게 알려주세요!
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기