제목
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 개발자 및 DevOps 엔지니어
- 중간~고급 수준의 이해가 필요 (컨테이너 보안, 코드 검증, 인증 프로토콜 등)
핵심 요약
- MCP 서버 사용 시 보안 위험 :
npx
또는uvx
명령어를 통해 실행되는 서드파티 MCP 서버는 시스템에 악의적인 코드가 삽입될 수 있음 (예: 타이포스쿼팅, 빌드 시스템 침해). - Sigstore와 GitHub Attestations의 역할 :
- Sigstore : 장기적인 암호화 키 대신 GitHub/Google ID 기반의 임시 인증서를 사용하여 코드 서명.
- GitHub Attestations : GitHub Actions에서 생성된 소스 코드, 빌드 워크플로우, 빌드 시간/위치 정보를 기록.
- ToolHive의 주요 기능 :
- 컨테이너 기반 보안 (최소 권한 부여), 검증된 레지스트리, 기업 규칙 적용.
- 이미지 검증 옵션 (--image-verification=disabled
, warn
, enabled
).
섹션별 세부 요약
1. MCP 서버의 보안 문제
- 위험 요소 :
- npx
, uvx
, pip
명령어로 설치된 서드파티 서버는 악의적인 코드가 포함될 수 있음.
- 타이포스쿼팅, 유지자 계정 해킹, 빌드 시스템 침해 등으로 인한 공격 가능성.
- 예시 공격 시나리오 :
- @modelcontextportocol/github-mcp-server
와 같은 잘못된 패키지 이름으로 토큰 도용.
- 유지자 계정 유출로 인한 악의적 업데이트.
2. Sigstore와 GitHub Attestations의 해결책
- Sigstore 기능 :
- 장기 암호화 키 대신 ID 기반 임시 인증서 사용.
- 서명 정보를 불변의 투명도 로그에 기록하여 위변조 방지.
- GitHub Attestations 기능 :
- GitHub Actions에서 생성된 소스 코드, 워크플로우, 빌드 시간/위치 정보 기록.
- 소프트웨어 출처 및 빌드 과정의 신뢰성 검증.
3. ToolHive의 구현 방식
- 핵심 기능 :
- 하나의 명령어 배포 : thv run github
로 빠른 설치.
- 컨테이너 기반 보안 : 최소 권한 부여된 컨테이너 실행.
- 검증된 레지스트리 : 유지자 검증된 MCP 서버만 포함.
- 기업용 기능 : 세부 권한 관리, 비밀 관리, Kubernetes 통합.
- 이미지 검증 프로세스 :
- 컨테이너 이미지의 암호화 지문 추출.
- 특정 이미지와 연관된 서명 및 인증 정보 검색.
- 신뢰할 수 있는 CA에 서명 검증.
- 빌드 출처와 워크플로우 일치 여부 확인.
- 검증 결과에 따라 배포 허용/경고/차단 결정.
4. Attestation의 구조 및 활용
- Attestation 구성 요소 :
- Subject : 인증이 적용된 소프트웨어 (예: 컨테이너 이미지).
- Predicate : 소프트웨어에 대한 주장 (예: 빌드 출처, SBOM, 보안 검사 결과).
- 활용 사례 :
- 빌드 출처 검증, SBOM 생성, 보안 검사 결과 기록.
- 공개/프라이빗 레포지토리에서 Sigstore 인프라 사용 가능.
5. 실무 적용 효과 및 미래 방향
- 실무 적용 효과 :
- 공급망 공격 사전 차단 (출처 검증).
- 컨테이너 이미지 조작 감지 (암호화 검증).
- 조직 정책 강제 적용 (신뢰 가능한 출처 제한).
- 향후 방향 :
- MCP 생태계의 보안 표준 확대.
- ToolHive 레지스트리에 등록 시 기준 마련 및 유지자 권장 사항 공유.
결론
- 핵심 팁 :
- ToolHive의 --image-verification=enabled
옵션을 사용하여 컨테이너 출처 검증 강화.
- Sigstore와 GitHub Attestations를 통한 인증 정보 기록과 빌드 출처 검증이 보안의 핵심.
- "ToolHive" 공식 레지스트리에서 검증된 MCP 서버만 사용하여 위험 최소화.
- 구현 예시 :
- thv run --image-verification=enabled github
명령어로 검증된 이미지만 실행.
- { "provenance": { "sigstore_url": "tuf-repo-cdn.sigstore.dev", "repository_uri": "..." } }
형식의 메타데이터로 레지스트리 구성.