Claude AI와 n8n 통한 MCP 자동화: Burp Suite 취약점 진단 연동 가이드
Burp Suite는 일반적으로 GUI를 통해 단말기에서 실행하는 형태로 많이 사용되지만, 서버 모드(Server Mode)로 구성하여 원격에서 활용할 수 있는 방법도 존재합니다. 다만, 이 경우는 Burp Suite의 기본 동작 방식이 아닌, Proxy 기능이나 Burp Collaborator, Burp API를 적절히 응용해야 합니다.
Burp Suite를 서버처럼 구성하는 방법
① Proxy 리스닝 인터페이스 변경
Burp Suite는 기본적으로 127.0.0.1:8080
에서 프록시 요청을 수신하지만, 이걸 0.0.0.0 또는 특정 IP로 변경하면 외부에서 접근 가능하게 됩니다.
설정 방법
- Burp Suite > Proxy > Options > Proxy Listeners
127.0.0.1
대신0.0.0.0
또는 서버 IP 지정- 포트는 보통 8080 사용
주의사항
- 방화벽에서 해당 포트를 허용해야 하고
- 반드시 인증 또는 ACL 설정 없이 인터넷에 노출되면 안 됩니다.
② Burp Suite를 원격 GUI 접속으로 사용
Burp 자체는 완전한 서버 프로세스는 아니지만, 다음과 같은 방식으로 원격에서 GUI를 제어할 수 있습니다.
- VNC, X11 forwarding 등을 통해 Burp GUI에 접근
- 또는 headless 환경에서
burp.jar
를 CLI로 실행하고 일부 기능만 사용
③ Burp REST API 사용 (Burp Suite Enterprise/Professional 한정)
Burp Suite Pro에는 Burp Extender API 및 GraphQL 인터페이스를 활용할 수 있습니다. 특히 Burp Suite Enterprise Edition은 CI/CD 환경에서 스캐닝을 자동화할 수 있는 Headless + API 기반 제어가 가능합니다.
- Burp Suite Enterprise: REST API 기반으로 스캔 실행, 결과 조회 가능
- Burp Pro (with Extensions): 일부 기능을 Burp API 또는 BApp Store의 확장으로 제공
활용 사례
목적 | 방법 | 설명 |
---|---|---|
모바일 앱 프록시 테스트 | 단말기 → Burp 서버 IP로 프록시 설정 | Proxy Listener IP 변경 후 사용 |
스캔 자동화 | Burp CLI + 스크립트 실행 | Headless CLI 또는 API 활용 |
팀 협업 | Burp Collaborator 또는 Burp Suite Enterprise 사용 | 내부 네트워크에서 협업 |
보안 장비 트래픽 검사 | Burp를 중간 프록시로 구성 | Proxy Chaining 설정 사용 가능 |
🔐 서버 모드 구성 시 보안 가이드
- 프록시 리스닝 IP는 제한적으로 설정 (예: 특정 내부 IP만 허용)
- 방화벽 및 인증 설정 필수
- 로그 저장 및 접근 기록 확보
- Burp Extender 사용 시 외부 모듈의 취약성 검토
- 자동화 API 사용 시 토큰 기반 인증 필수
🔍 점검포인트
- 리스너에 HTTPS 인증서 적용 여부
- Burp 프로젝트 저장 경로 및 권한
- 동시 사용자 접속 여부 및 충돌 방지
- Burp Collaborator 서버 운영 시 외부 요청 필터링 설정
Burp Suite는 본래 GUI 중심의 툴이지만, 프록시 리스닝 포트 구성 변경, 원격 GUI 접속, Enterprise API 활용 등을 통해 반쯤 ‘서버처럼’ 활용할 수 있습니다. 보다 본격적인 서버 모드나 스케줄 기반 자동화 테스트를 원하신다면 Burp Suite Enterprise Edition 또는 ZAP (OWASP Zed Attack Proxy) 도 고려해볼 수 있습니다.
아래는 Burp Suite를 서버 모드로 구성하고, 이를 MCP(Model Context Protocol) 기반 AI 자동화 시스템과 연동하는 구성, 특히 보안 자동화와 AI 기반 스캐닝, 결과 분석 시스템까지 확장할 수 있는 아키텍처입니다.
+------------------+ REST API / CLI +---------------------+
| AI Agent (LLM) +<-------------------------->+ MCP Control Engine |
+------------------+ +---------+-----------+
|
Control & Context Management |
v
+------+------+
| Burp Suite |
| ServerMode |
+-------------+
|
Proxy / Collaborator / API 사용
|
+------------------+------------------+
| 테스트 대상 앱/서버 또는 모바일 단말기 |
+--------------------------------------+
① Burp Suite 실행 (헤드리스 또는 GUI)
burp.jar
실행:java -jar burp.jar
- Proxy Listener 설정
- Interface:
0.0.0.0
또는 내부망 IP - Port: 8080 (기본값)
- HTTPS 인증서 설정 (MITM 분석 필요 시)
- Interface:
② Burp API 사용
Burp 자체는 공식 REST API를 제공하지 않지만, 다음 2가지 방법으로 제어 가능합니다.
- Burp Extension (BApp API): 자바 코드로 Burp 기능 확장 가능
- Headless 스캐닝
- Burp Suite Pro 또는 Enterprise Edition에서 CLI 실행
java -jar burp.jar --project-file test.burp --config-file config.json
- Burp Suite Pro 또는 Enterprise Edition에서 CLI 실행
- GraphQL API 활용 (Enterprise 한정)
MCP (Model Context Protocol) 연동
MCP는 AI 모델이 다양한 도구와 상호작용하기 위해 설계된 명령 및 컨텍스트 관리 프로토콜입니다.
다음과 같은 구조로 동작합니다.
- AI가 수행할 “행위(intent)”를 생성
- MCP가 해당 행위를 적절한 명령어 또는 API 요청으로 변환
- 결과를 수집하고 정리하여 다시 AI에게 컨텍스트로 전달
구성 예시
- Intent:
스캔 요청
- MCP 변환
{ "tool": "burp", "action": "scan", "target": "https://testsite.com", "options": { "activeScan": true, "proxy": "http://burp.local:8080" } }
- 변환 결과: Burp CLI 또는 Extension API 호출
AI 자동화 워크플로우 구성 예시
사용 기술 스택
- AI: GPT 기반 또는 LLM 프레임워크 (LangChain, OpenAgents 등)
- MCP: 중간 인터페이스 서버 (Python/Node 기반 추천)
- Burp 제어: Custom Extension 또는 CLI
- 메시지 버스 (선택): Kafka, RabbitMQ, n8n 등 자동화 연계
구성 흐름
- 사용자/시스템 요청 → AI 처리
- AI가 intent 생성:
이 URL 스캔해줘
- MCP가 intent → Burp 명령어 변환
- Burp CLI 또는 API로 스캔 수행
- 스캔 결과를 HTML/JSON 등으로 저장
- 결과 리포트를 AI가 요약하거나 Slack/Email로 전송
실전 구성 예: Python 기반 연동
MCP → Burp CLI 실행 예시
import subprocess
import json
def run_burp_scan(target_url, project_file, config_file):
cmd = [
"java", "-jar", "burp.jar",
"--project-file", project_file,
"--config-file", config_file,
"--scan", target_url
]
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout
MCP 변환 예시
{
"tool": "burp",
"action": "scan",
"target": "https://testsite.com",
"options": {
"config": "baseline-config.json",
"project": "test-project.burp"
}
}
MCP 서버가 이 JSON을 받아 run_burp_scan()
으로 실행하도록 라우팅합니다.
보안 운영 체크리스트
항목 | 설명 |
---|---|
인증 및 접근제어 | Burp Listener는 인증 없이 열지 않도록 주의 |
프로젝트 파일 관리 | Burp 프로젝트 파일은 민감정보 포함 가능, 보안 저장 필요 |
리포트 파일 접근제어 | HTML, JSON 리포트 파일을 웹서버에서 제공 시 접근 제어 필수 |
스캔 스케줄 | 자동화된 스캔은 빈도 조절 및 중복 방지 필요 |
로그 감사 | MCP 및 AI 처리 로그 남기기, 감사 용도 활용 |
AI 모델 제한 | 모델이 실행할 수 있는 MCP 명령어 제한 설정 (권한 분리) |
- 결과에 대한 AI 기반 요약 (예: GPT로 취약점 리포트 요약)
- 다른 도구 연동: ZAP, Nikto 등과 멀티 스캔 구조
- 취약점 탐지 후 자동 등록 (ex: TheHive, Jira)
- GitHub Actions, Jenkins와 연계하여 PR마다 스캔 자동화
Burp Suite는 기본적으로 서버모드는 아니지만, MCP와 연계된 컨트롤러 구조를 통해 AI가 지능적으로 웹 스캐닝을 자동화하는 환경을 충분히 구성할 수 있습니다.
- Burp를 CLI 또는 Extension 방식으로 원격 제어할 수 있도록 구성
- MCP가 명령어-인텐트를 해석하고 실행하도록 설계
- 결과를 수집/요약하여 보안팀이 쉽게 조치하도록 전달
최근에 발표된 n8n 1.88 버전부터 본격적으로 MCP(Model Context Protocol) 기능이 도입되면서, AI 자동화 환경을 아주 직관적이고 강력하게 구성할 수 있게 되었습니다. 특히 Burp Suite와의 연계를 통해 웹 취약점 점검을 AI 기반으로 자동화할 수 있는 구조는 보안 자동화에 매우 큰 가능성을 열어줍니다. 아래는 MCP + n8n + Burp Suite를 통합한 AI 기반 취약점 점검 자동화 워크플로우 전체 구조와 구성 방식, 단계별 연계 방식, 실전 예시입니다.
전체 구조 개요
[AI 에이전트 (Claude, GPT 등)]
|
v (SSE MCP 명령 전송)
[MCP Trigger Server (n8n)] <-----------------------> [MCP Client Tool (n8n)]
| |
v |
[Gmail, Slack, Webhook 등 트리거 노드] [Burp 명령 호출 노드 (CLI or API)]
| |
v |
[Burp Suite 서버모드 + CLI/API] <---------------------+
|
v
[취약점 결과 HTML/JSON 저장 및 분석]
|
v
[AI 요약 or Slack/Email 보고]
사용 기술 스택 요약
구성 요소 | 역할 |
---|---|
n8n 1.88+ | MCP Trigger Server + MCP Client Tool 노드 제공 |
Burp Suite | 서버모드로 CLI 또는 API 기반 스캔 수행 |
MCP Client Tool | AI가 Tool 명령을 실행할 수 있게 하는 MCP 연동기 |
MCP Trigger Server | n8n을 MCP 명령 수신 서버로 전환 |
AI (GPT/Claude) | "이 URL 취약점 점검해줘" 식의 자연어 명령을 생성 |
npx MCP Gateway | 외부 MCP 허브 연동 |
1단계: Burp Suite 서버 모드 구성
CLI 방식 스캔 예시
java -jar burp.jar --project-file project.burp --config-file scan-config.json --scan-target https://target.com
스캔 설정을 config-file로 분리하고, n8n에서 인자로 전달하는 방식 사용.
2단계: n8n 워크플로우 설정
[MCP Trigger Server] 노드 구성
- 트리거 역할: AI가 명령을 내릴 수 있는 MCP 서버 역할
- 예: AI가
"https://test.com 을 점검해줘"
라고 요청 → n8n 트리거됨 - URL 자동 생성됨 (
/mcp/...
) → AI에 공유 가능
노드 설정 시
- 변수 항목 옆 ✨ 아이콘 → LLM이 자동으로 설정 가능하도록 활성화
target_url
(AI가 넣을 대상)scan_level
(fast, deep 등)
[Command 노드 or Custom Function]에서 Burp CLI 호출
java -jar burp.jar --project-file scan.burp --config-file fast.json --scan-target {{$json["target_url"]}}
- CLI 명령어 실행
- 프로젝트 및 설정 파일은 사전에 구성
- 결과 저장 경로도 JSON으로 전달 가능
[File → Read] 노드로 결과 HTML or JSON 수집
- Burp Suite는 스캔 결과를
.json
혹은.html
로 저장 가능 - 해당 파일을 n8n에서 읽어 처리
[OpenAI / Claude] 노드로 결과 요약
- 결과에서 "High severity", "SQL Injection" 등 필터링
- AI에게 리포트 요약 지시
이 취약점 보고서 내용을 요약해줘. 특히 위험도 높은 항목 위주로 정리해줘.
[Slack / Gmail / Notion / Webhook] 전송
- 요약 결과를 보안팀에 전송
- JSON, HTML 첨부 포함 가능
- PDF 변환하여 리포트 형태 전송도 가능
3단계: MCP Client Tool 구성 (Burp 호출을 Tool로 등록)
https://mcp.composio.dev/
에서npx
명령 생성MCP Client Tool
노드에서 URL 입력- 실행하면, AI가 "Burp로 스캔해"라고 명령할 수 있음
Burp 자체를 하나의 Tool로 LLM에 등록하는 구조
워크플로우 흐름 요약
- AI가 자연어 명령 생성: “testsite.com 취약점 점검해줘”
- MCP Trigger Server (n8n)로 전달
- Burp CLI로 점검 수행
- 결과를 파일로 저장하고 요약 처리
- Slack으로 보안팀에 전송 (요약 + 원본 리포트 포함)
보안 고려 사항
항목 | 설명 |
---|---|
AI 입력 필터링 | LLM의 잘못된 명령으로 중요 시스템 스캔 방지 |
파일 경로 제어 | 임의의 시스템 접근 방지 (Command Injection 방지) |
API Token 사용 | n8n, Burp CLI 실행 시 인증된 사용자만 접근 |
결과 보관 주기 설정 | 자동화된 리포트는 일정 기간 후 자동 삭제 또는 백업 |
- n8n의 MCP 기능은 기존 자동화 노드를 AI에 노출시키고 제어할 수 있는 강력한 방식
- Burp Suite 연계를 통해 보안 점검 업무를 AI에게 자연어로 위임 가능
- Slack/메일 리포트로 보안팀 효율성 향상
- 요약 + 자동 실행 + MCP Tool 등록의 흐름으로 보안 DevOps 환경 완성
아래는 MCP(Model Context Protocol) 연동을 위한 JSON 스키마 정의 예시, 그리고 이를 활용한 n8n 기반, LangChain 기반 연동 자동화 구성 예시입니다. MCP Client Tool을 통해 도구를 연결하거나, AI 에이전트가 이 MCP 툴을 통해 외부 작업을 수행하도록 만드는 데 사용할 수 있습니다.
MCP 도구 정의용 JSON 스키마 예시
{
"name": "burp_scan_tool",
"description": "지정된 URL에 대해 Burp Suite를 통해 웹 취약점 점검을 수행합니다.",
"input_schema": {
"type": "object",
"properties": {
"target_url": {
"type": "string",
"format": "uri",
"description": "스캔 대상 웹사이트 URL"
},
"scan_type": {
"type": "string",
"enum": ["baseline", "active", "passive"],
"description": "스캔 방식 선택 (기본, 능동, 수동)"
}
},
"required": ["target_url"]
},
"output_schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["success", "fail"]
},
"report_path": {
"type": "string",
"description": "저장된 리포트의 경로"
},
"summary": {
"type": "string",
"description": "스캔 결과 요약"
}
}
}
}
n8n 기반 MCP 연동 워크플로우 예시
사용 목적
- AI가
MCP Trigger Server
를 통해 n8n 워크플로우를 호출 - n8n이 Burp Suite CLI 명령어 실행
- 결과를 요약하여 Slack 또는 Email 전송
예시 구성 순서
- MCP Trigger Server 노드 생성
- Command 노드로 Burp 스캔 실행
- Read File 노드로 리포트 수집
- OpenAI 노드로 요약 수행
- Slack 노드로 전송
MCP Trigger Server 파라미터 설정 예시
target_url
:https://testsite.com
scan_type
:baseline
Command 노드 명령어
java -jar /opt/burp/burp.jar \
--project-file /tmp/scan.burp \
--config-file /opt/configs/{{$json["scan_type"]}}.json \
--scan-target {{$json["target_url"]}} \
--report /tmp/report/{{$json["target_url"].replace('https://', '').replace('/', '_')}}.html
LangChain 기반 MCP 도구 연동 예시
LangChain에서는 Tool
인터페이스를 활용해 MCP 도구를 정의할 수 있습니다.
Burp 스캔 MCP 도구 정의
from langchain.tools import Tool
import requests
def burp_mcp_scan_tool(input: dict) -> str:
res = requests.post(
"https://mcp.myserver.dev/burp_scan",
json=input
)
return res.json().get("summary", "요약 정보 없음")
burp_tool = Tool(
name="BurpWebScan",
func=burp_mcp_scan_tool,
description="Burp Suite를 사용해 웹사이트의 취약점을 점검합니다. target_url과 scan_type을 입력으로 받습니다."
)
AgentExecutor에 추가하여 사용
from langchain.agents import initialize_agent
from langchain.chat_models import ChatOpenAI
agent = initialize_agent(
tools=[burp_tool],
llm=ChatOpenAI(temperature=0),
agent="zero-shot-react-description"
)
agent.run("https://testsite.com을 능동 스캔 방식으로 점검해줘.")
결과 예시 (AI 응답)
{
"status": "success",
"report_path": "/tmp/report/testsite_com.html",
"summary": "총 3건의 취약점이 발견되었으며, 이 중 1건은 High 등급입니다. 상세 리포트를 확인하세요."
}
항목 | 체크포인트 |
---|---|
인증 방식 | n8n에서 API 호출 시 MCP 서버에 토큰 인증 적용 |
리포트 경로 보호 | HTML/JSON 리포트는 내부 접근만 허용되도록 제한 |
입력 검증 | target_url 은 정규식 또는 allowlist로 필터링 |
자동화 제한 | LLM이 MCP를 과도하게 호출하지 않도록 최대 호출 횟수 설정 |
이번에는 Claude AI에서 MCP 도구를 연결하기 위한 전체 연동 과정을 다음의 구성 요소별로 모든 예제와 설정을 포함하여, n8n과 Claude를 실전 환경에서 연동하는 가이드입니다. 이 Claude AI × MCP × n8n × Burp Suite 통합 가이드는 Claude AI에서 자연어 명령으로 Burp Suite를 실행하여 웹 취약점 점검을 자동화할 수 있도록, MCP JSON 설정, n8n 구성, supergateway 명령어, Claude 도구 등록, 실전 사용 예시까지 포함합니다.
전체 아키텍처
[User Input]
↓ 자연어
[Claude AI] ─────(SSE)─────▶ [supergateway]
↓
[MCP Trigger Server (n8n)] → [Burp 실행 CLI] → [리포트 수집] → [Claude 응답 전달]
n8n로 MCP Server 구성
MCP Trigger Server 노드 설정
워크플로우 파라미터
target_url
(string): 점검 대상scan_type
(enum): baseline, active, passive
예시 워크플로우 구조
- MCP Trigger Server
- Execute Command (Burp CLI 실행)
- Read File (리포트 수집)
- OpenAI 요약 (선택)
- Return to Claude
Execute Command 노드 예시
java -jar /opt/burp/burp.jar \
--project-file /tmp/scan.burp \
--config-file /opt/configs/{{$json["scan_type"]}}.json \
--scan-target {{$json["target_url"]}} \
--report /tmp/report/{{$json["target_url"].replace('https://', '').replace('/', '_')}}.json
리포트는 JSON으로 저장되며, 이후 Claude에 요약 전달
supergateway
로 MCP 도구 래핑
Anthropic Claude는 직접적으로 외부 MCP 서버와 연결되지 않으므로, 이를 중계해주는 supergateway
MCP 프록시 도구를 사용합니다.
설치
npm install -g supergateway
구성 파일 (mcp.config.json 또는 inline 설정)
{
"mcpServers": {
"n8n-burp": {
"command": "npx",
"args": [
"-y",
"supergateway",
"--sse",
"https://n8n.example.com/mcp/burp_scan/sse",
"--header",
"Authorization: Bearer x-secret-token"
]
}
}
}
n8n.example.com은 MCP Trigger Server가 실행되는 n8n 주소이고,
Authorization 헤더는 n8n에서 받아들이는 인증 값과 일치해야 합니다.
Claude Tool 등록
- Claude Console → Tools → Add Tool
- 입력 예시
필드 값 Name BurpWebScanner Description "웹사이트에 대해 Burp Suite를 이용한 취약점 스캔을 수행하는 도구입니다." Type SSE SSE Endpoint URL http://localhost:{{supergateway포트}}/n8n-burp - Input Schema 예시
{ "type": "object", "properties": { "target_url": { "type": "string", "description": "스캔할 웹사이트 URL" }, "scan_type": { "type": "string", "enum": ["baseline", "active", "passive"], "description": "스캔 방식 선택" } }, "required": ["target_url"] }
실전 사용 예시 (Claude 대화)
입력
"https://testsite.com을 baseline 방식으로 점검해줘"
내부 처리 흐름
- Claude → supergateway → n8n MCP Trigger 호출
- n8n → Burp 실행 → 리포트 생성
- Claude → 응답 수신 및 요약 → 사용자에게 자연어로 결과 제공
Claude 출력 예시
Burp 스캔 결과, SQL Injection 1건과 보안 헤더 미설정이 감지되었습니다. 상세 리포트는 내부 보안 포털에 저장되었습니다.
보안 구성 체크리스트
항목 | 설정 권장 |
---|---|
n8n 인증 | Bearer 인증 활성화 (Webhook header 확인 필수) |
supergateway 인증 헤더 | --header Authorization: Bearer ... 포함 |
n8n 워크플로우 제한 | URL allowlist 또는 regex 사용 |
로그 저장 | 모든 도구 실행 결과는 n8n 내부 로그 또는 외부 syslog 저장 |
Claude Tool 권한 설정 | workspace 별 제한 적용 (공유 금지 가능) |
전체 폴더 구성 예시
/workspace/
│
├── mcp.config.json # supergateway 설정 파일
├── start.sh # supergateway 실행 스크립트
└── n8n-mcp-workflow.json # n8n 내보내기용 워크플로우 파일
start.sh 예시
#!/bin/bash
supergateway --sse https://n8n.example.com/mcp/burp_scan/see \
--header "Authorization: Bearer x-secret-token" \
--port 7070
이제 Claude AI에게 이렇게 말할 수 있습니다.
"지금 내 앱 사이트 https://testsite.com을 Burp로 baseline 스캔해줘!"
→ Claude AI가 이해하고
→ n8n MCP Trigger 호출
→ Burp로 점검 → 결과 요약
→ Claude AI가 대답
완전 자동화된 AI 기반 보안 진단이 탄생합니다.
다음은 MCP(Model Context Protocol) 사용 시 고려해야 할 보안, 신뢰성, UX 설계의 문제점들입니다. 각 항목은 실제 사용 시 발생 가능한 이슈 중심으로 구성되었으며, 사용자가 MCP를 도입하거나 평가할 때 사전 대응할 수 있도록 고려되어야 합니다.
MCP는 LLM 기반 에이전트(ChatGPT, Claude, Cursor 등)가 외부 도구를 호출하고 데이터를 연동할 수 있도록 설계된 도구 통합 표준 프로토콜입니다.
- “BYOT (Bring Your Own Tools)” 접근 방식으로 복잡한 명령도 수행 가능
- 텍스트 기반 인터페이스를 통해 자동화된 LLM 실행환경과 제어 환경을 동시에 제공
하지만 MCP는 설계 초기 단계로서, 보안·UX·LLM 자체의 한계에 대한 고려가 아직 미흡한 상황입니다.
프로토콜 수준의 보안 취약성
① 인증/인가 미비 및 불균형
- 초기 사양에서 인증 절차가 명확히 정의되지 않아 MCP 서버가 무인증으로 실행될 수 있음
- OAuth 인증 사양이 뒤늦게 도입되었으나, 복잡하고 일관성 부족으로 인해 도입이 어려움
- 서버마다 인증 방식이 달라 보안 정책 통제가 어렵고, 민감한 리소스에 무단 접근 가능성 존재
② 악성 코드 실행 경로 제공
- STDIO 기반 실행을 허용하면서, 로컬에서 직접 코드를 내려받아 실행하는 방식을 권장하는 구현도 존재
- 사용자 환경에서 불특정 코드 실행 위험이 상존하며, 자동화 환경에서는 더욱 치명적일 수 있음
③ 입력값 신뢰성 부족
- 일부 구현은 입력값을 검증 없이 직접 exec 또는 shell 명령어로 실행
- 사용자 의도와 달리 LLM이 왜곡된 명령을 생성해 실행할 수 있으며, 이는 구조적인 보안 문제로 이어짐
UX 사용자 경험의 구조적 위험
① 도구 위험도에 대한 구분 및 제어 기능 부재
- MCP는
delete_files()
,download_email()
,book_flight()
처럼 위험도가 다른 도구를 동일하게 다룸 - 사용자는 반복 승인에 익숙해지며, 이를 이용한 의도치 않은 고위험 작업 실행 가능성 증가
② 비용 및 출력 통제 기능 부족
- 출력 크기 증가가 곧바로 비용 증가로 이어짐 (1MB 출력 → 수십~수백 원 과금)
- 특히 LLM이 도구 결과를 반복 요청하는 경우, 사용자 모르게 고비용 처리 발생
- 대부분의 MCP 툴은 결과 사이즈 제한을 고려하지 않아 비효율적인 과금 구조를 만들 수 있음
③ 구조화된 출력 미지원
- MCP는 기본적으로 텍스트 중심 설계로 정형 데이터(위치 정보, 그래프 등)의 정확한 표현에 제약
- 작업 확인이나 결과 렌더링이 필요한 경우 정확성이 낮고 오류 발생 가능성 높음
LLM 기반 시스템의 확장된 보안 위험
① 고위험 프롬프트 인젝션 구조
- MCP 도구가
system prompt
수준에서 LLM에 명령을 삽입함으로써 보다 강력한 인젝션 공격 경로 제공 - 도구 자체가 prompt를 오염시키거나, 특정 행동을 지속적으로 강제하는 프롬프트 백도어화 시도 가능
② 동적 이름 변경 및 설명 위장 가능
- MCP는 도구의 이름과 설명을 실행 중에도 서버 측에서 변경 가능 → 사용자 위장/기만 가능성
"안전한 도구"
라고 보였지만, 실제론 destructive 기능 수행 가능
③ 제4자 인젝션(Fourth-party Injection)
- 한 MCP 서버가 다른 MCP 서버의 응답을 신뢰하고 사용하는 구조 → 다단계 RCE 가능성
- 외부에서 삽입된 Markdown 코드로 supabase MCP 서버를 통한 악성 실행 가능
④ 민감 정보 유출 가능성
- 악성 도구가 시스템 명령을 이용해 민감 정보 수집 후 외부로 전송 가능
- 심지어 정식 툴 사용 중에도 읽기 작업만으로 정보 노출 가능 → 읽기 권한만 갖고 있어도 위험
⑤ 기존 접근제어 모델의 무력화
- 사내 데이터, 직급 정보, 로그 등을 조합해 LLM이 고급 추론 또는 유추를 통해 민감한 정보 도출
- 조직개편 예상, 피드백 작성자 추정 등 → LLM의 ‘추론 능력’이 새로운 보안 취약점으로 작용
LLM 자체의 한계로 인한 현실-기대 괴리
① 도구 수 증가 = 성능 저하
- LLM은 지시 정보가 많을수록 처리 정확도가 떨어지고 비용 증가
- 사용자는 도구가 많아지면 좋아질 것이라 오해하나, 실제론 성능 저하 및 충돌 가능성 증가
② 도구 사용 정확성에 대한 벤치마크 부족
- 많은 LLM은 도구 호출 정확도가 낮음 (예: Sonnet 3.7은 항공권 예약 작업 성공률 16%)
- LLM마다 도구 설명 인식 능력의 차이 존재 (Claude는 XML, ChatGPT는 Markdown 선호)
③ 도구 설계의 복잡성
- MCP 도구는 직관적이지 않은 경우가 많으며, 검색, 조합, 필터링과 같은 복잡 요청에 약함
④ 도구 간 연계, 조인 불가능
- 복합 명령은 현실적으로 대부분 불가능
- LLM이 멀티 MCP 도구 간의 관계 맺기와 계획 수립 능력이 부족
MCP는 LLM 환경에서 고도로 통합된 자동화 생태계를 가능케 하지만, 그만큼 복합적이고 새로운 보안 위협과 UX 과제를 동반합니다.
구성 요소 | 필요한 조치 |
---|---|
프로토콜 설계 | 인증 기본 내장, 출력 제한 기능, 도구 위험도 표시 |
앱/클라이언트 | 자동 실행 방지, 사용자 행동 감시, 이력 관리 기능 |
사용자 | 도구 신뢰도 검증, 민감 데이터 연결 제한, 자동화 범위 명확히 인식 |
MCP는 강력한 기능을 제공하지만, 그만큼 보안·비용·신뢰성 측면의 설계와 책임 분담이 명확해야 합니다. 단순한 '도구 통합' 수준을 넘어, LLM 시대의 새로운 인터페이스로 진화하기 위해서는 지속적인 개선과 커뮤니티 중심의 협력이 필수적입니다.
다음은 MCP(Model Context Protocol) 환경을 조직 내에서 도입하거나 검토할 때 활용할 수 있는 보안 리뷰 체크리스트(Security Review Checklist)입니다. MCP와 연계되는 LLM, 도구, 사용자 시스템이 안전하게 작동하도록 하기 위한 프로토콜, 시스템, 도구, 사용자 관점으로 정리한 보안 검토 포인트입니다.
MCP 보안 리뷰 체크리스트 (Security Review Checklist)
프로토콜 및 인증 설계
항목 | 점검 내용 | 상태 (✅/⚠️/❌) | 비고 |
---|---|---|---|
MCP 서버 인증 | OAuth 등 인증 방식이 명확하게 설정되어 있는가? | ||
인증 우회 가능성 | 인증 없이 접근 가능한 API 또는 명령 실행 경로가 존재하지 않는가? | ||
인증 토큰 관리 | 토큰 재사용 방지, 만료 시간 설정 등 보안 설정이 적용되어 있는가? | ||
인증 전송 채널 | 인증정보가 암호화된 채널(HTTPS, WSS 등)로만 전송되는가? |
시스템/실행 환경 보안
항목 | 점검 내용 | 상태(✅/⚠️/❌) | 비고 |
---|---|---|---|
STDIO 실행 위험 | 로컬에서 MCP 서버 실행 시 다운로드한 코드의 신뢰성을 검증하는 절차가 존재하는가? | ||
명령 실행 보호 | 사용자 입력값을 명령어로 실행하기 전에 필터링 또는 검증이 수행되는가? | ||
파일 시스템 접근 | MCP 도구가 민감한 시스템 디렉터리(/etc, /var/log 등)에 접근하지 못하도록 제한되어 있는가? | ||
네트워크 격리 | MCP 서버가 인터넷 전체에 노출되지 않도록 방화벽 또는 네트워크 제한이 구성되어 있는가? | ||
실행 기록 로깅 | 명령 실행, 도구 호출에 대한 로그가 남고 감사 추적이 가능한가? |
도구 설계 및 운영 정책
항목 | 점검 내용 | 상태 (✅/⚠️/❌) | 비고 |
---|---|---|---|
도구 위험도 구분 | 삭제, 업로드 등 고위험 도구와 일반 도구를 구분해 사용자 승인 정책이 다른가? | ||
자동 승인 제한 | 자동 실행(autonomous mode)이 위험 도구에 대해 기본적으로 비활성화되어 있는가? | ||
출력 크기 제한 | 도구 출력 결과의 크기에 제한이 설정되어 있는가? | ||
명확한 설명 및 스키마 | 도구 명세(JSON 스키마 등)가 명확히 정의되어 있어 AI가 잘못 해석하지 않도록 구성되어 있는가? | ||
이름 및 설명 고정 | 도구의 이름, 설명, 동작 방식이 실행 중에 변경되지 않도록 고정되어 있는가? |
데이터 보안 및 민감정보 보호
항목 | 점검 내용 | 상태 (✅/⚠️/❌) | 비고 |
---|---|---|---|
민감 데이터 구분 | 도구 호출 시 민감한 데이터(PII, 계정정보 등)가 명확히 구분되어 있는가? | ||
출력 내용 검열 | AI 응답 또는 MCP 출력 결과에 민감 정보 포함 여부를 검토하는 필터가 존재하는가? | ||
외부 전송 제한 | LLM이 수집한 데이터를 외부 MCP 서버로 전송하기 전에 사용자의 명시적 승인이 필요한가? | ||
정보 추론 차단 | 여러 MCP 도구 조합을 통해 내부 구조나 민감한 정보를 유추할 가능성이 방지되어 있는가? |
LLM 프롬프트 보안
항목 | 점검 내용 | 상태 (✅/⚠️/❌) | 비고 |
---|---|---|---|
프롬프트 인젝션 필터링 | 사용자 입력을 통해 system prompt가 조작되지 않도록 방지하는 로직이 있는가? | ||
에이전트 샌드박싱 | 각 도구가 호출한 결과가 다른 도구의 동작에 영향을 미치지 않도록 분리되어 있는가? | ||
응답 검증 | LLM이 생성한 응답이 도구 명세 범위 내에서 안전하게 구성되어 있는가? |
사용자 및 운영 정책
항목 | 점검 내용 | 상태 (✅/⚠️/❌) | 비고 |
---|---|---|---|
사용자 확인 절차 | MCP 도구 호출 전 사용자 확인 또는 이중 인증 절차가 적용되어 있는가? | ||
도구 실행 승인 로그 | 누가 어떤 도구를 어떤 요청으로 실행했는지 확인 가능한 기록이 존재하는가? | ||
자동화 범위 제한 | 사용자가 설정한 도구만 사용할 수 있도록 제어 정책이 존재하는가? | ||
도구 목록 검토 주기 | 연결된 도구의 위험도 및 필요성에 대한 정기적인 리뷰 프로세스가 존재하는가? |
총평 및 권고
평가 항목 | 점검 |
---|---|
고위험 도구 분리 및 제한 설정 | ☐ 적용 완료 ☐ 미비 ☐ 미적용 |
인증 방식 통일 및 강제 | ☐ 적용 완료 ☐ 미비 ☐ 미적용 |
출력 및 비용 제어 정책 설정 | ☐ 적용 완료 ☐ 미비 ☐ 미적용 |
로그 및 감사 이력 수집 | ☐ 적용 완료 ☐ 미비 ☐ 미적용 |
민감정보 추론 및 전송 차단 | ☐ 적용 완료 ☐ 미비 ☐ 미적용 |
이러한 체크리스트는 MCP 도구를 연동하기 전·중·후 단계에서 전사 보안팀 또는 개발팀이 점검할 수 있는 기준으로 활용 가능합니다.