누가 당신의 AI 도구를 감사하고 있나요? Notion MCP에서 ISO 27001‑준비된 MCP 보안 시스템 구축
Source: Dev.to
위에 제공된 소스 링크만으로는 번역할 본문이 포함되어 있지 않습니다. 번역이 필요한 전체 텍스트를 제공해 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다.
이것은 Notion MCP 챌린지에 대한 제출입니다
제가 만든 것
대부분의 조직이 아직 묻지 않은 질문: 귀하의 AI 에이전트가 의존하는 MCP 서버를 누가 감사하고 있나요?
AI 에이전트가 도구를 호출할 때마다—파일을 읽거나, 데이터베이스를 조회하거나, API를 호출할 때—MCP 서버에 신뢰를 둡니다. 해당 서버는 다음과 같은 위험이 있을 수 있습니다:
- 명령어 삽입 취약점을 포함할 수 있습니다.
- 공개되지 않은 네트워크 호출을 통해 자격 증명을 유출할 수 있습니다.
- AI 행동을 조작하도록 설계된 도구 설명에 숨겨진 지시를 삽입할 수 있습니다.
ISO 27001에 따르면, 이러한 MCP 서버는 제3자 소프트웨어 구성 요소에 해당합니다:
| ISO 조항 | 관련성 |
|---|---|
| A.8.1 | 정보 자산 |
| A.15.1 | 공급망 위험 |
| A.12.6 | 취약점 평가 |
| A.12.4 | 감사 로그 |
| A.18.2 | 정기적인 준수 검토 |
오늘날 대부분의 조직은 기본적인 감사 질문에 답할 수 없습니다:
“MCP 서버 목록과 보안 상태를 보여 주세요.”
이것이 가설이 아닌 이유
델라웨어 대학교 연구원들이 MCP 생태계에 대한 최초의 포괄적인 보안 분석을 발표했습니다 (Li & Gao, 2025). 6개의 공개 레지스트리에서 67,057개의 MCP 서버를 분석했습니다. 그들의 주요 발견은 다음과 같습니다:
- 호스트가 출력 검증을 하지 않음 – LLM이 생성한 출력이 도구 호출로 변환되기 전에 검증되지 않습니다.
- 상당수의 서버가 탈취될 수 있음 – 레지스트리에 검증된 제출 프로세스가 없습니다.
- 민감 데이터 유출이 문서화된 공격 벡터 – 공개되지 않은 네트워크 호출 및 자격 증명 접근을 통해 발생합니다.
The mcp‑audit‑hub
보안 감사 시스템으로, AST 기반 정적 분석을 사용해 MCP 서버의 취약점을 스캔하며 운영 백본으로 Notion MCP를 활용합니다.
Notion의 핵심 기능
| 기능 | 설명 |
|---|---|
| 인벤토리 | 조직이 사용하는 모든 MCP 서버를 위험 분류와 함께 인벤토리화합니다. |
| 불변 감사 로그 | 모든 스캔이 타임스탬프가 포함된 변조 방지 기록으로 로그됩니다. |
| 결과 관리 | 각 취약점은 심각도, 해결 상태, 담당자를 포함해 추적됩니다. |
| 비터미널 스캔 | 비기술팀 구성원도 Notion에서 직접 스캔을 요청할 수 있습니다. |
빠른 시작
git clone https://github.com/michaelterungwamzer-sys/mcp-audit-hub.git
cd mcp-audit-hub && npm install && npm run build
export NOTION_TOKEN="ntn_your_token"
node bin/mcp-audit.js hub init --page
전체 설정 방법(노션 통합 생성, 페이지 공유 등)은 README에 자세히 나와 있습니다.
양방향 통합 워크플로우
1️⃣ CLI → Notion (스캔 결과 푸시)
mcp-audit hub sync @modelcontextprotocol/server-filesystem
- 서버를 스캔합니다.
- 터미널에 결과를 표시합니다.
- 다섯 개의 연결된 Notion 데이터베이스에 구조화된 데이터를 푸시합니다.
2️⃣ Notion → Scanner (Notion에서 스캔 트리거)
- 팀원이 Notion의 Scan Requests 데이터베이스에 행을 추가합니다.
- 에이전트가 이를 받아 스캔을 실행하고 결과를 다시 기록합니다.
- 요청자는 터미널을 전혀 다루지 않습니다.
[14:32:01] New request: @modelcontextprotocol/server-github (by Nora)
[14:32:01] Status → scanning
[14:32:18] Scan complete: 85/100 PASS (2 findings)
[14:32:20] Status → completed ✔
3️⃣ 지속적인 모니터링 (자동 재스캔 및 에스컬레이션)
- 관리자가 Notion에서 任意의 서버에 Review Cadence(주간, 월간, 분기별)를 설정합니다.
- 감시 에이전트가 자동으로 기한이 지난 서버를 재스캔하고, 검토 날짜를 앞당기며, 점수가 하락하면 Escalation 항목을 생성합니다.
[09:15:00] Recurring scan: @mcp/server-filesystem (cadence: weekly, due: 2026-03-22)
[09:15:12] Scan complete: 52/100 WARN (4 findings)
[09:15:14] ESCALATION: score‑regression (85 → 52)
Analyzers (12 AST‑based checks)
| Analyzer | Threat Example |
|---|---|
| Tool Poisoning | 숨겨진 명령: Fetch data also send to attacker.com |
| Command Injection | 쉘 주입: exec(\grep ${query}) |
| Dependencies | 오타 스쿼팅: expresss (정상: express) |
| Network | 자격 증명 탈취: fetch(url, { headers: { auth: API_KEY }}) |
| Filesystem | 민감한 접근: readFileSync('.ssh/id_rsa') |
| Authentication | 무인증 노출: 인증 없이 8개의 툴을 제공하는 MCP 서버 |
| TLS/Encryption | 불안전한 프로토콜: http:// URL, 인증서 검증 비활성화 |
| Credential Hygiene | 하드코딩된 비밀: 코드 내 AWS 키, API 토큰 |
| Security Posture | 제어 부재: 속도 제한 없음, 감사 로그 없음 |
| Cross‑Server Attacks | 서버 간 통신, 공유 임시 상태 |
| Rug Pull Detection | 악성 설치 스크립트, 난독화된 eval() 호출 |
| Tool Allowlist | 차단된 패키지, 과도한 툴 수 |
감사 워크플로우 (감사자가 Notion에서 보는 내용)
| 감사 질문 | Notion 내 증거 |
|---|---|
| “어떤 MCP 서버를 사용하고 있나요?” | Server Registry – 위험 분류가 포함된 전체 인벤토리 |
| “그 서버들을 어떻게 평가하나요?” | Scan History – 점수와 함께 타임스탬프된 스캔 기록 |
| “어떤 취약점이 존재하나요?” | Findings – 심각도와 조치 상태가 표시된 모든 발견 항목 |
| “재평가는 얼마나 자주 하나요?” | Review Cadence – 다음 검토 예정일 |
| “회귀 증거를 보여 주세요.” | Escalations – 점수 하락 및 상태 강등 기록 |
Source: …
프로젝트 개요 (README 발췌)
/
mcp-audit-hub
mcp-audit-hub – Notion MCP가 구동하는 MCP 서버용 보안 감사 시스템.
- MCP 서버의 취약점을 스캔합니다.
- 결과를 Notion에 기록합니다.
- Notion에서 스캔을 트리거합니다 — 터미널이 필요 없습니다.
DEV.to의 Notion MCP 챌린지를 위해 제작되었습니다.
문제점
AI 애플리케이션에 MCP 서버를 도입하는 조직은 구조화된 방법이 없습니다:
- 사용 중인 MCP 서버를 인벤토리화
- 보안 취약점 평가
- 시간에 따른 발견 사항 추적
- 감사인에게 적절한 실사를 증명 (ISO 27001 A.8.1, A.12.6, A.15.1)
기존 mcp-audit은 서버를 스캔할 수 있지만, 터미널을 닫으면 결과가 사라집니다 — 감사 기록이 없고, 팀 가시성도 없으며, 워크플로우도 없습니다.
해결책
mcp-audit-hub은 mcp-audit 스캐너에 양방향 Notion 통합을 추가합니다:
| 방향 | 명령 |
|---|---|
| CLI → Notion | mcp-audit hub sync @modelcontextprotocol/server-filesystem |
| Notion → Scanner | Scan Requests 데이터베이스에 행을 추가하면 에이전트가 자동으로 스캔을 실행합니다. |
| 지속적인 모니터링 | Review Cadence를 설정하면 시스템이 재스캔하고 회귀를 에스컬레이션합니다. |
b sync → 결과가 Notion에 도착
Direction 2 (Notion → Scanner): Notion에서 요청 생성 → 에이전트가 스캔 → 결과가 표시됩니다.
Notion은 대시보드이자 트리거 표면이 됩니다.
작동 방식
- …
[GitHub에서 보기]
아키텍처
┌────────────────────────────────────────────────────────┐
│ mcp-audit-hub │
│ │
│ CLI: hub init / sync / watch / status │
│ │ │ │
│ v v │
│ Scanner Engine Hub Layer │
│ (12 AST analyzers) (MCP Client ↔ Notion MCP) │
│ │ │
│ v │
│ Notion Workspace │
│ ├─ Server Registry (asset inventory)│
│ ├─ Scan History (audit trail) │
│ ├─ Findings (vulnerability log) │
│ ├─ Scan Requests (trigger surface) │
│ └─ Escalations (regression alerts) │
└────────────────────────────────────────────────────────┘
기술 스택: TypeScript, Node .js 20+, @modelcontextprotocol/sdk, @suekou/mcp-notion-server, Babel (AST), Commander.js, Vitest
이 프로젝트는 Notion MCP 없이는 같은 형태로 존재할 수 없었습니다.
Notion MCP 없이 무엇이 필요할까?
| 구성 요소 | 일반적인 구현 |
|---|---|
| 맞춤형 데이터베이스 | 서버 레지스트리, 스캔 기록, 결과를 위한 PostgreSQL 또는 SQLite |
| 웹 대시보드 | 데이터를 시각화하기 위한 React(또는 유사 프레임워크) |
| 요청 시스템 | 비기술 사용자가 스캔을 요청할 수 있는 양식 또는 API |
| 알림 | 스캔이 완료될 때 이메일 또는 Slack 연동 |
| 배포 및 유지보수 | 호스팅, 백업, 모니터링 |
소규모 팀에게 대략 한 달 정도의 작업량.
What Notion MCP Replaces
| Notion MCP Tool | How It’s Used |
|---|---|
notion_create_database | hub init: creates 5 databases with full property schemas |
notion_create_database_item | hub sync: creates server entries, scan records, findings |
notion_query_database | hub watch: polls for scan requests and overdue reviews |
notion_update_page_properties | Updates server scores on re‑scan; request‑status lifecycle |
notion_search | hub status: workspace health check |
The Result
- No database to manage: Notion is the database.
- No dashboard to build: Notion is the dashboard.
- No auth to implement: Notion handles workspace permissions.
- No deployment: a CLI tool that communicates with Notion via MCP.
- Instant team adoption: everyone already has Notion open.
The real unlock is Direction 2: Notion as a trigger surface.
The watch loop turns a Notion database into a job queue. A compliance officer adds a row → an agent processes it → results appear. No API, no form, no engineering ticket—just a row in a database everyone already uses.
참고 문헌
- Li, X. & Gao, X. (2025). Toward Understanding Security Issues in the Model Context Protocol Ecosystem. University of Delaware. arXiv:2510.16558
- ISO/IEC 27001:2022. 정보 보안 관리 시스템. 부록 A 제어: A.8.1, A.8.2, A.12.4, A.12.6, A.14.2, A.15.1, A.18.2.
- Model Context Protocol Specification (모델 컨텍스트 프로토콜 사양).