본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 21. 01:25

affaan-m/agentshield

요약

AgentShield는 Claude Code 설정을 스캔하여 하드코딩된 비밀 정보, 권한 설정 오류, 프롬프트 주입 벡터 등을 탐지하는 보안 감사 도구입니다. CLI, GitHub Action, GitHub App 통합을 지원하며, AI 에이전트 생태계의 급격한 보안 위협에 대응하기 위해 개발되었습니다.

핵심 포인트

  • Claude Code의 .claude 디렉토리를 스캔하여 보안 취약점을 탐지하고 등급이 매겨진 보고서를 제공합니다.
  • 하드코딩된 비밀 정보를 환경 변수 참조로 교체하는 자동 수정 기능을 지원합니다.
  • CLI, GitHub Action, GitHub App 등 다양한 통합 방식을 제공합니다.
  • MCP 서버 리스크, 훅 주입, 프롬프트 주입 등 에이전트 특화 보안 위협을 다룹니다.
  • Claude Code 해커톤을 통해 개발되었으며, 에이전트 설정의 보안 자동화를 목표로 합니다.

AI 에이전트 설정을 위한 보안 감사 도구 (Security auditor for AI agent configurations)

Claude Code 설정을 스캔하여 하드코딩된 비밀 정보(secrets), 권한 설정 오류(permission misconfigs), 훅 주입(hook injection), MCP 서버 리스크, 그리고 에이전트 프롬프트 주입(prompt injection) 벡터를 탐지합니다.

CLI, GitHub Action, 그리고 GitHub App 통합 방식으로 사용할 수 있습니다.

빠른 시작(Quick Start) · 탐지 항목(What It Catches) · API 참조(API Reference) · Opus 파이프라인(Opus Pipeline) · GitHub Action · 배포(Distribution) · MiniClaw · 변경 이력(Changelog)

AI 에이전트 생태계는 보안 도구의 발전 속도보다 빠르게 성장하고 있습니다. 2026년 1월 한 달 동안에만:

  • 주요 에이전트 스킬 마켓플레이스의 **12%**가 악성임 (커뮤니티 스킬 2,857개 중 341개)
  • CVSS 8.8 등급의 CVE로 인해 17,500개 이상의 인터넷 노출 인스턴스가 원클릭 RCE(원격 코드 실행) 위험에 노출됨 - Moltbook 침해 사고 관련
  • 770,000개의 에이전트에 걸쳐 150만 개의 API 토큰이 유출됨

개발자들은 커뮤니티 스킬을 설치하고, MCP 서버를 연결하며, 훅(hooks)을 설정하지만, 자신의 설정 보안을 감사할 수 있는 자동화된 방법이 없습니다. AgentShield는 .claude/ 디렉토리를 스캔하여 취약점이 공격(exploits)으로 이어지기 전에 경고를 보냅니다.

Claude Code 해커톤(Cerebral Valley x Anthropic, 2026년 2월)에서 제작되었습니다. Everything Claude Code 생태계(42K+ stars)의 일부입니다.

# Claude Code 설정을 스캔합니다 (설치 불필요)
npx ecc-agentshield scan
# 또는 전역 설치
...

끝입니다. AgentShield는 ~/.claude/ 디렉토리를 자동으로 탐색하고, 모든 설정 파일을 스캔하며, 등급이 매겨진 보안 보고서를 출력합니다.

탐색 과정에서는 node_modules, 빌드 출력물, .dmux 워크트리 미러와 같은 일반적인 생성 디렉토리를 의도적으로 건너뛰어, 일시적인 복사본이 탐지 결과를 중복시키지 않도록 합니다.

AgentShield 보안 보고서 (Security Report)
등급: F (0/100)
점수 세부 내역 (Score Breakdown)
...
# 특정 디렉토리 스캔
agentshield scan --path /path/to/.claude
# 안전한 문제 자동 수정 (하드코딩된 비밀 정보를 환경 변수(env var) 참조로 교체)
...

이제 JSON 보고서에서 findings[].runtimeConfidence를 확인할 수 있습니다.

AgentShield가 활성 런타임 설정 (active runtime config)을 프로젝트 로컬 설정 (project-local settings), 템플릿/예시 인벤토리 (template/example inventories), 설치된 Claude 플러그인 캐시 (installed Claude plugin caches), 선언적 플러그인 매니페스트 (declarative plugin manifests), 그리고 매니페스트로 해결된 비-셸 훅 구현체 (manifest-resolved non-shell hook implementations)와 구분할 수 있을 때, 이제 JSON 보고서에서 findings[].runtimeConfidence를 확인할 수 있습니다. 보고서에는 일치하는 마커가 있는 경우 Claude Code, OpenCode, Codex, Gemini, Zed, VS Code, dmux, 터미널-에이전트 래퍼 (terminal-agent wrappers), 그리고 프로젝트 로컬 템플릿에 대한 로컬 하네스 어댑터 (local harness adapter) 증거도 포함됩니다.

5개 카테고리에 걸친 102개의 규칙이 있으며, 0–100점 사이의 수치 점수와 함께 A–F 등급이 매겨집니다.

항목예시
API 키Anthropic (sk-ant- ), OpenAI (sk-proj- /sk- ), xAI (xai- ), AWS (AKIA ), Google/Gemini (AIza ), Stripe (sk_test_ /sk_live_ )
...
항목예시
------
와일드카드 액세스 (Wildcard access)Bash(*) , Write(*) , Edit(*) — 제한 없는 도구 권한
...
항목예시
------
커맨드 인젝션 (Command injection)셸 명령 내 ${file} 보간 (interpolation) — 공격자가 제어하는 파일명이 코드가 됨
...
항목예시
------
고위험 서버셸/커맨드 MCP, 루트 권한이 있는 파일 시스템, 데이터베이스 MCP, 브라우저 자동화
...

공급망 검증 (agentshield scan --supply-chain)은 MCP 패키지 참조와 루트 package.jsonpackage-lock.json 의존성 증거를 추출한 다음, npm 대 git, 고정(pinned) 대 비고정(unpinned), 알려진 양호한 패키지, 그리고 npm 레지스트리 기반 메타데이터에 대한 출처(provenance) 수를 보고합니다. 다운로드 수, 유지 관리자, postinstall 스크립트, 지원 중단(deprecation), 패키지 연령을 확인하기 위해 npm에 쿼리하려면 --supply-chain-online을 추가하십시오.

패키지 관리자 강화 (Package-manager hardening) 점검은 또한 .npmrc, .yarnrc.yml, pnpm-workspace.yaml을 스캔하여 평문 레지스트리 자격 증명, 명시적인 의존성 라이프사이클 스크립트 (lifecycle-script) 활성화 여부, 그리고 패키지 관리자가 지원하는 경우 누락되었거나 취약한 릴리스 연령 쿨다운 (release-age cooldowns)을 확인합니다. npm 설정은 라이프사이클 스크립트 차단 여부와 잘못된 신뢰를 유발할 수 있는 지원되지 않는 릴리스 연령 키를 점검합니다. pnpm의 minimumReleaseAge / minimum-release-age를 사용하십시오.

, Yarn npmMinimalAgeGate,

또는 냉각 기간 (cooldown) 강제를 위한 외부 패키지 관리자 정책 래퍼 (policy wrapper)를 사용하십시오.

AgentShield는 최근 npm 및 PyPI 캠페인 페이로드에서 사용되는 AI 개발 도구의 지속성 표면 (persistence surfaces)을 스캔합니다. 여기에는 Claude Code 훅 (hook) 설정, .claude/router_runtime.js, VS Code tasks.json 폴더 열기 자동화, Zed 프로젝트 tasks.json, .vscode/setup.mjs, .zed/setup.mjs, GitHub 워크플로 드롭인 (workflow drop-ins), LaunchAgent/systemd 데드맨 스위치 (dead-man switch) 아티팩트, gh-token-monitor 토큰 저장소 파일, 메타데이터 서비스 자격 증명 대상, 그리고 보고된 데이터 유출 또는 2단계 네트워크 지표 (indicators)가 포함됩니다. 이러한 지표들은 심각한 훅 탐지 결과 (critical hook findings)로 방출되어, 악성 패키지가 이미 삭제된 후라도 CI가 즉시 실패 (fail fast)할 수 있도록 합니다.

AgentShield는 활성화된 MCP 설정과 저장소에 포함된 MCP 템플릿을 모두 스캔합니다.

  • mcp.json, .claude/mcp.json, .claude.json 및 활성화된 settings.json에서 발견된 사항은 가장 신뢰도가 높은 런타임 노출 (runtime exposure)로 취급해야 합니다.
  • settings.local.json에서 발견된 사항은 runtimeConfidence: project-local-optional로 방출됩니다.
  • mcp-configs/, config/mcp/ 또는 configs/mcp/와 같은 위치에서 발견된 사항은 저장소 템플릿에 존재하는 위험한 MCP 정의를 나타내며, 활성화된 런타임 사용이 보장된 것은 아닙니다.
  • JSON, 마크다운 (markdown), 터미널 (terminal) 및 HTML 출력은 이제 runtimeConfidence: active-runtime | project-local-optional | template-example | docs-example | plugin-cache | plugin-manifest | hook-code를 통해 소스 컨텍스트를 노출합니다.
  • 기밀이 아닌 template-example MCP 탐지 결과는 0.25x의 가중 점수가 적용되며, 단일 템플릿 파일은 점수 카테고리당 최대 10점의 차감 점수로 제한되므로, 단일 MCP 카탈로그가 수십 개의 활성화된 서버처럼 점수를 깎지 않도록 합니다.
  • 템플릿 파일 내에서 위험한 서버 유형, 원격 URL 전송 (remote URL transport), npx -y와 같은 탐지 결과는

, 고정되지 않은 패키지 (unpinned packages), 그리고 환경 상속 (environment inheritance)은 여전히 가치가 있지만, 이를 "이 MCP가 현재 확실히 활성화되어 있다"라기보다는 "이 저장소가 위험한 MCP 템플릿을 포함하고 있다"로 해석해야 합니다. - 소스 파일이 템플릿 카탈로그인 경우, 대규모 MCP 서버 수와 같은 집계된 결과는 런타임 노출 (runtime exposure)을 과장할 가능성이 특히 높습니다.

항목예시
제한되지 않은 도구 (Unrestricted tools)Bash 접근 권한이 있는 에이전트, allowedTools 제한 없음
...
.claude/subagents/.claude/slash-commands/ 아래의 구조화된 JSON은 allowedTools 또는 유사한 도구 메타데이터를 선언할 때 에이전트 설정 (agent config)과 같이 분석됩니다. 자유 형식의 skill-md 프롬프트 텍스트는 여전히 agent-mdCLAUDE.md보다 보안 범위가 좁습니다.
  • 실시간 감사 노트와 후속 조치 항목은 false-positive-audit.md에서 추적됩니다. - 가장 유용한 운영자 가이드는 감사의 Triage Rules For Current Reports 섹션에 있습니다. - 감사 문서에는 재사용 가능한 False-Positive Taxonomy, Repo Audit Worksheet, 그리고 Release Gate For Accuracy Changes가 포함되어 있습니다. - 파일 간 훅 매니페스트 (hook-manifest) 인지 기능이 추가되어, 동반되는 hooks/hooks.json 매니페스트가 PreToolUse 훅을 정의하는 경우 설정 전용인 hooks-no-pretooluse를 억제합니다. - 매니페스트 참조 훅 구현은 이제 hooks/hooks.json 스타일의 간접 참조를 통해 발견됩니다; 셸 타겟 (shell targets)은 훅 규칙을 통해 계속 탐지되며, 비셸 hook-code 타겟은 이제 명시적인 output(...) 컨텍스트 주입, 트랜스크립트 입력 접근, 그리고 자식 프로세스 래퍼 (child-process wrappers)를 통해 실행되는 원격 셸 페이로드 (remote shell payloads)에 대해 타겟팅된 결과(findings)를 생성합니다. - 현재 알려진 고신호 (high-signal) 주의 사항으로는, 현재의 hook-code 신호를 넘어 언어 인식 분석 (language-aware analysis)이 여전히 필요한 광범위한 비셸 훅 실행과, 대부분의 에이전트/인젝션 규칙을 여전히 우회하는 skill-md 프롬프트 텍스트가 있습니다. runtimeConfidence는 이제 MCP 결과 및 settings.local.json에 표시됩니다.

, docs/examples, 설치된 Claude 플러그인 캐시 (plugin caches), 플러그인 매니페스트 (plugin manifests), 그리고 매니페스트로 확인된 non-shell 훅 코드 (manifest-resolved non-shell hook code). 점수 산정 시 non-secret template-exampledocs-example 탐지 결과는 0.25x로 감점하고, non-secret project-local-optional 탐지 결과는 0.75x로 감점하며, non-secret plugin-cache / plugin-manifest 탐지 결과는 0.5x로 감점합니다. Non-secret template-example 탐지 결과는 파일 및 점수 카테고리당 최대 10점의 감점 제한이 적용되어, 하나의 카탈로그 파일이 전체 등급을 좌우할 수 없도록 합니다. hook-code 탐지 결과는 현재 전체 가중치를 유지하지만

탐지 결과; 와일드카드(wildcard) 및 동적 네트워크 권한은 여전히 탐지됩니다. - Exact
Bash(node scripts/foo.js ...)

Bash(python3 ./tools/audit.py ...)

래퍼(wrapper) 명령은 더 이상 일반적인 인터프리터 액세스(interpreter-access) 탐지를 트리거하지 않지만, node -epython -c와 같은 인라인 eval 형태는 여전히 트리거됩니다. - Exact

Bash(docker ps)Bash(docker image ls)와 같은 읽기 전용 Docker 인벤토리 명령은 더 이상 일반적인 Docker 액세스(Docker-access) 탐지를 트리거하지 않지만, docker rundocker exec와 같은 실행 중심 형태는 여전히 트리거됩니다. - Exact

settings.local.json 허용 목록(allowlists)은 모든 허용 항목이 완전히 명시된 경우 permissions-no-deny-list의 심각도를 높음(high)에서 중간(medium)으로 낮춥니다. 와일드카드 또는 동적 프로젝트 로컬 권한은 여전히 더 높은 심각도를 유지합니다. - Exact local-only

settings.local.json 허용 목록은 이제 hooks-no-pretooluse 또한 중간(medium)에서 낮음(low)으로 낮춥니다. 더 광범위하거나 네트워크 기능이 있는 프로젝트 로컬 설정은 여전히 더 높은 심각도를 유지합니다. - Comment-only

주석 처리된 셸 훅(shell-hook) 라인은 이제 훅 유출(hook exfiltration), 민감한 경로(sensitive-path), 및 silent-fail 정규식 규칙에서 무시되므로, 인라인 수정 사항(remediation notes) 및 주석 처리된 예제는 더 이상 실제 훅 동작처럼 보이지 않습니다.

  • 좁은 범위의 전문 에이전트(specialist agents), 하위 에이전트(subagents), 그리고 슬래시 명령(slash commands)은 이제 일반적인 Bash 액세스 및 권한 상승 체인(escalation-chain) 탐지 결과를 높음(high)에서 중간(medium)으로 낮춥니다. 더 광범위한 일반 에이전트(generalist) 워크플로우는 여전히 더 높은 심각도를 유지합니다.

  • ./와 같은 상대 경로를 사용하는 리포지토리 범위(Repo-scoped) 파일 시스템 MCP 서버는 이제 제한 없는 루트/홈(root/home) 파일 시스템 액세스보다 낮은 등급을 받습니다. 루트 레벨의 파일 시스템 노출은 여전히 높음(high) 상태를 유지합니다. - Defensive agent-review

fetch(userProvidedUrl)와 같은 패턴을 언급하는 방어적 에이전트 검토 콘텐츠는 더 이상 agents-injection-surface를 트리거하지 않습니다. 외부 콘텐츠를 가져오거나 처리하라는 직접적인 지침은 여전히 트리거됩니다. agents-explorer-write는 이제 이후의 워크플로우/예제 텍스트 대신 역할 메타데이터(role metadata)와 리드 에이전트 소개(lead agent intro)를 사용하므로, 일반 작업자 프롬프트의 절차적인 search for ... 단계는 더 이상 탐색형(explorer-style) 에이전트로 잘못 분류되지 않습니다. 예시: chief-of-staff.md

gog gmail search ...를 포함하고 있다는 이유만으로 더 이상 해당 규칙에 걸리지 않습니다.

.agents-oversized-prompt

이제는 단순한 파일 길이가 아닌, 코드 블록 (fenced code blocks)과 마크다운 표 (Markdown tables)를 제외한 실제 유효한 프롬프트 크기 (effective prompt size)를 측정합니다. chief-of-staff.mdplanner.md와 같이 예시가 많은 에이전트들은 더 이상 해당 규칙에 걸리지 않는 반면, 산문 (prose) 비중이 높은 에이전트들은 여전히 걸리게 됩니다.

docs/, commands/, examples/, tutorials/, demos/와 같이 예시와 유사한 경로에 있는 마크다운 예시/테스트 비밀번호들은 주변 문맥이 명확하게 교육적(instructional)인 경우 이제 억제(suppressed)됩니다. 이러한 억제 기능은 일반적인 에이전트/설정 (agent/config) 마크다운에는 적용되지 않습니다.

리포지토리 스캔 결과가 너무 소란스럽게(noisy) 보이거나 AgentShield 규칙을 조정할 때는 이 워크플로우를 사용하세요.

  • 파일 경로와 runtimeConfidence를 검사할 수 있도록 JSON 출력으로 시작하세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0