Claude Code Mods를 위한 오프라인 공급망 감사 도구(Python stdlib 전용)
요약
본 글은 Claude Code Mods의 공급망 보안 취약점을 다루며, 외부 의존성 없이 로컬 오프라인으로 실행되는 정적 감사 도구 'mod-audit'를 소개합니다. 이 도구는 위험한 라이프사이클 후크 패턴, 셸 실행 코드, 권한 매니페스트 등을 분석하여 잠재적인 보안 위협을 식별하는 것이 핵심입니다.
핵심 포인트
- Claude Code Mods의 공급망 보안 취약점 문제를 다룸.
- 외부 의존성 없이 로컬에서 오프라인으로 작동하는 정적 감사 도구(mod-audit)를 개발함.
- 라이프사이클 후크, 셸 실행 패턴, 권한 매니페스트 등 다양한 영역을 분석하여 위험 요소를 플래그 지정함.
- CI/CD 파이프라인에 통합 가능하도록 설계되어 지속적인 보안 검증을 지원함.
사용자의 Claude Code mods는 사용자의 권한으로 셸 명령을 실행합니다. 라이프사이클 후크(lifecycle hook) 하나가 시스템 전체를 장악하는 지름길이 될 수 있으며, 에이전트 플러그인 주변의 공급망은 현재 심각하게 위험합니다.
위험 사례들:
- AIR SkillJacking: 925개의 스킬을 탈취하여 추정되는 134k개의 에이전트에 영향을 미쳤습니다.
- Plugin4Shell: 업데이트 시 SHA-pinning 우회 공격을 통해 핀 교체(pin-swap) 공격을 보여주었습니다.
- Pwn2Own Ireland: Codex 인자 주입 버그에 대해 $40k를 지급했습니다.
- 그리고 SKILLCLOAK 연구는 그들의 은폐 기술이 기존 스캐너의 90%+를 우회한다고 주장합니다.
그래서 저는 mod-audit를 만들었습니다. 이는 Claude Code Mods를 위한 정적 공급망 감사 도구로, 외부 의존성 없이 로컬에서 오프라인으로 실행됩니다. 단지 stdlib Python 3.9+만 사용합니다.
기능 설명
모두 오프라인에서 작동하는 네 가지 기능입니다:
1. 위험한 라이프사이클 후크 스캔. plugin.json / hooks.json / package.json의 후크 섹션을 파싱하여, 파이프를 통한 다운로드(curl | sh), base64 디코딩 후 실행(base64-decode-into-exec), curl --data를 이용한 데이터 유출, 리버스 셸(nc -e, /dev/tcp/), sudo 권한 상승 시도, 파괴적인 rm -rf 등의 행위를 플래그하고, 각각에 대해 심각도, 파일:줄 번호, 설명 및 해결책을 제공합니다.
2. TypeScript 소스 내 셸 실행 패턴. child_process.exec 사용 시 shell: true 설정, 연결된 명령 문자열(concatenated command strings), eval()/new Function(), 동적 require()/import(), cron/launchd 지속성 확보 메커니즘, 그리고 dotfile 쓰기 등
파일 해시를 비교하고, 새로 추가되거나 변경된 파일, 제거된 파일을 표시하며, 훅 명령어 스왑(pin-swap 패턴)을 감지하고, 새롭거나 변경된 모든 항목에 대해 콘텐츠 규칙을 재실행합니다. 트로이 목마화된 업데이트는 그냥 지나가지 않고 경고를 발생시킵니다.
5. 권한 매니페스트 검토. 너무 광범위하게 부여된 권한 — 액션별 확인 절차 없는 셸, 무제한 네트워크 접근, 광범위한 파일 시스템 쓰기 등 — 승인하기 전에 플래그가 지정됩니다.
차이점
ClawSecure Watchtower와 같은 클라우드 스캐너는 모드 소스를 다른 사람의 서버에 업로드하도록 요구합니다. rad-security의 AgentKeeper 감사 플러그인/스킬 메타데이터 검토자는 메타데이터만 감사할 뿐, 실제로 실행되는 TypeScript 코드는 읽지 않습니다. mod-audit은 정반대의 접근 방식입니다: 로컬 + 오프라인 + 모드 TypeScript 코드 전문 분석. 아무것도 기기를 벗어나지 않습니다.
설계 단계부터 CI(Continuous Integration) 지원
mod-audit scan ./my-mod --format json
종료 코드는 다음과 같습니다: --fail-on에서 발견된 문제가 있을 경우 1, 깨끗할 경우 0, 사용 오류의 경우 2. GitHub Actions 워크플로우나 크론 작업에 포함시켜 설치된 모드와 그 스냅샷을 매일 비교(diff)할 수 있습니다.
솔직한 한계점
이것은 샌드박스가 아닌 오프라인 휴리스틱스입니다. 패턴 기반 규칙은 난독화된 코드를 놓칠 수 있으며, 무해한 코드에 대해 잘못된 양성(false-positive)을 발생시킬 수 있습니다. 모드 코드를 절대 실행하지 않기 때문에 (그것이 핵심입니다), 런타임에서 가져온 페이로드는 범위를 벗어납니다. 비교는 스냅샷만큼 신뢰할 수 있으므로, 깨끗한 설치본으로 생성하여 업데이트 프로그램이 건드릴 수 없는 곳에 보관해야 합니다. 또한 TypeScript 검사는 실제 파서가 아닌 정규표현식(regex) 기반이며, 이는 stdlib 전용 및 빠른 속도를 유지하기 위한 의도적인 타협입니다.
pip install mod-audit — MIT 라이선스, 소스는 GitHub에서 확인할 수 있습니다. Claude Code 모드를 관리하신다면, 어떤 항목을 플래그하는지 듣고 싶습니다.
Repo: https://github.com/hahahahahahahahah6/mod-audit
PyPI: https://pypi.org/project/mod-audit/
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기