- 포이즈닝 — 서버가 처음부터 악의적이었습니다. 매니페스트가 무해해 보였고; 위험한 동작은 선언된 스코프가 아닌 툴 구현에 있었습니다.
- Rug-pull — 신뢰했는데 변경되었습니다. 서버 운영자가 조용히 추가한 새로운 툴이 나타났거나, 커뮤니티 레지스트리 항목이 탈취되어 공격자에게 연락하도록 업데이트되었습니다.
1. MCP 툴 포이즈닝이 에이전트에 도달하는 방법
에이전트가 발행하는 모든tools/call은 MCP 서버의 선언된 툴 세트를 통해
이동합니다. 포이즈닝되었거나 rug-pull된 서버는 그 신뢰를 몇 가지 방식으로
악용합니다:
| 벡터 | 발생하는 것 |
|---|---|
| 선언되지 않은 툴 | 서버 매니페스트가 선언하지 않은 새로운 툴이 tools/list에 나타납니다. 에이전트가 그것을 발견하고 호출합니다. |
| 탈취된 레지스트리 항목 | 커뮤니티 레지스트리 목록이 인수되고; 엔드포인트가 이제 공격자 제어 서버를 가리킵니다. |
| 자격 증명 수집 | 서버의 툴 구현이 수집된 입력을 외부 호스트로 보냅니다. |
| 툴 결과를 통한 프롬프트 인젝션 | 툴이 에이전트의 다음 동작을 리디렉션하는 공격자 제어 텍스트를 반환합니다. |
2. OrcaRouter의 방어
2.1 모든 tools/call은 실행 전에 firewall 평가를 받습니다
MCP 서버는 /api/v1/firewall/mcp의 Firewall MCP 게이트웨이를 통해 에이전트에
연결됩니다. 게이트웨이는 firewall 엔진이 정책에 대해
툴 호출을 평가할 때까지 전달하지 않습니다.
이는 허용 목록이 진실의 원천임을 의미합니다 — 서버의 툴 매니페스트가 아닙니다.
rug-pull이 shell.exec를 추가하고 정책에 그것을 허용하는 규칙이 없다면, 판정은
deny이고 호출은 게이트웨이를 떠나지 않습니다. 모델이 툴 오류
(firewall deny: …)를 받고 반응할 수 있습니다; 공격자가 추가한 툴은 도착하자마자
차단됩니다.
엔진이 반환할 수 있는 판정:
| 판정 | 효과 |
|---|---|
allow / audit | 호출이 전달됩니다; audit은 추가적으로 인자를 기록합니다. |
sanitize | 인자가 전달 전에 재작성됩니다. |
deny | 호출이 차단됩니다; 모델이 툴 오류를 받습니다. |
pending_approval | 호출이 보류됩니다; 진행 전에 사람이 승인해야 합니다. |
cap_cost | 비용 한도가 적용됩니다; 초과할 경우 호출이 차단됩니다. |
2.2 자동 탐지된 기능은 검토 전까지 격리됩니다
에이전트가 기능을 자체 설치하거나 — rug-pull이 서버를 등록할 때 없었던 새로운 툴을 추가하면 — Firewall이 핫 경로 밖에서 새 기능을 자동 탐지하고, 매니페스트를 합성하고, 스캔하고, 위험 밴드와 강제 모드를 할당합니다. 중요한 것은, 자동 탐지된 기능은 스캔 결과와 무관하게 항상 격리됩니다: 사람이 검토할 때까지pending_approval에 보류됩니다.
이것이 rug-pull을 억제하는 방법입니다. 운영자가 새 툴을 조용히 추가하고
에이전트가 사용하기 시작하도록 할 수 없습니다 — 그 호출은 새 기능을 검사하고
승인할 때까지 보류됩니다.
2.3 스킬 스캐닝이 위험 밴드와 강제 모드를 할당합니다
등록하든 Firewall이 자동 탐지하든, 모든 설치 가능한 기능은 스킬 스캐너를 통해 전달됩니다. 스캐너는 매니페스트와 선언된 스코프에 대해 결정적 패스를 실행합니다:- prompt_injection — 지시사항을 하이재킹하려는 매니페스트 텍스트.
- tool_creep — 매니페스트가 사용하지만 선언하지 않은 툴.
- network_egress — 승인된 네트워크 스코프 외부의 HTTP(S) 호스트.
- fs_write_unsafe —
/tmp외부에 대한 쓰기 모드 파일 시스템 접근.
low / medium / high / critical)와 강제 모드로
집계됩니다:
| 모드 | 런타임에서 발생하는 것 |
|---|---|
allow | 스킬 자체에서 아무것도 부과하지 않습니다; 정책 규칙이 결정합니다. |
quarantine | deny가 아닌 모든 판정이 pending_approval로 상향됩니다. 사람이 각 툴 호출을 승인해야 합니다. |
block | 정책 규칙과 무관하게 이 스킬의 모든 툴에 deny를 강제합니다. |
high 밴드 스킬은 자동으로 격리됩니다; critical은 차단됩니다. 단일 error
결과 (예: 선언되지 않은 shell.exec에 대한 tool_creep)는 숫자 점수가 낮아
보여도 스킬을 차단하기에 충분합니다. 모드는 더 엄격한 방향으로만 변경됩니다
— 스킬을 승인해도 새 스캔으로 설정된 차단은 절대 완화되지 않습니다.
2.4 자격 증명은 암호화되어 저장됩니다
서버 인증 시크릿은 워크스페이스 시크릿 키로 저장 시 암호화되고 디스패치 시 게이트웨이에 의해 주입됩니다. 모델, 에이전트, 또는 호출 인자에 도달하지 않습니다. 손상된 서버는 자체auth_json을 읽어 API 키를 유출할 수 없습니다.
서드파티 MCP 서버 검증 체크리스트외부 MCP 서버를 등록하기 전:
- 퍼블리셔의 신원 확인 — 누가 엔드포인트 URL을 제어합니까?
- 소스나 체인지로그를 읽고; 초기 릴리스 이후 추가된 새 툴을 찾아보세요.
- 등록 시 스킬 스캔이
tool_creep또는prompt_injection결과를 반환하는지 확인하세요. - 호출 기록이 생길 때까지
tool_name_glob: <server>.*를 가진 firewall 규칙을audit또는pending_approval로 스코프하세요. -
network_egress결과를 검토하세요: 매니페스트가 하나의 도메인만 필요하다고 주장하지만 툴 설명에 다른 것이 언급됩니까? - 업스트림 버전 업그레이드 후 서버를 다시 프로브하여 (
POST /api/workspace/firewall/mcp_servers/:id/probe) 새 툴을 표면화하세요.
3. 의심되는 rug-pull 후 조치
- 즉시 서버 비활성화 — 비활성화된 서버는 런타임 레지스트리에서 제거되고
자격 증명이 절대 복호화되지 않습니다.
"enabled": false로PUT /api/workspace/firewall/mcp_servers를 사용하세요. - 변경 사항 표면화를 위한 재프로브 —
POST /api/workspace/firewall/mcp_servers/:id/probe가tools/list를 실행하고 마지막 프로브 이후 나타난 새 툴을 반환합니다. - 스킬 레코드 재스캔 —
POST /api/workspace/firewall/skills/:id/rescan이 업데이트된 매니페스트에 대해 스캐너를 다시 실행합니다. 판정이flagged또는blocked로 저하되면 Firewall이 피드에 이벤트를 내보냅니다. pending_approval큐 검토 — rug-pull 이후 보류된 모든 호출이 큐에 있습니다. 일괄 승인이 아닌 검사 후 거부하세요.- 호출 로그 감사 — 변경을 감지하기 전에 통과된 호출에 대해 Firewall 이벤트 추적을 확인하세요.
4. 스킬 스캐닝과 firewall 규칙 페어링
스킬 스캐닝과 firewall 규칙은 상호 보완적이며 구성됩니다:tool_name_glob: community.*를pending_approval로 설정한 규칙은 위험 밴드와 무관하게 커뮤니티 소스 서버의 모든 호출을 검토하게 합니다.- 격리된 스킬은
allow규칙을 오버라이드합니다 — 정책이http.fetch를 광범위하게 허용하더라도, 그것을 소유한 격리된 스킬은 여전히 호출을 보류합니다. - 규칙에서
skill_name_glob을 사용하여 1차 통합에 영향 없이 신뢰할 수 없는 서버에 더 엄격한 정책을 스코프하세요.
5. 관련 위협
- 위험한 툴 호출 — 소스와 무관하게 파괴적이거나 되돌릴 수 없는 툴 액션을 차단하는 규칙.
- 데이터 유출 — 툴 호출이 데이터를 보낼 수 있는 위치를 제한하는 egress 규칙.
- 위협 모델 — OrcaRouter가 방어하도록 설계된 전체 공격 표면.
Firewall: MCP 서버
게이트웨이 뒤에 MCP 서버를 등록하고, 툴을 프로브하고, 실제 서버에
도달하기 전에 호출별 판정을 적용하세요.
Firewall: 스킬
모든 설치 가능한 기능을 스캔하고 위험 점수를 매기세요. 툴이 실행되기 전에
위험한 스킬을 격리하거나 차단하세요.
