0
nah — Claude Code용 컨텍스트 인식 권한 가드
devops
요약
기사 전체 정리
nah — Claude Code용 컨텍스트 인식 권한 가드
왜 필요한가
- Claude Code의 기본 권한 시스템은 도구(tool)별 허용/거부 방식인데, 이게 현실에서 안 돌아감. 파일 삭제가 어떤 때는 괜찮고 어떤 때는 치명적이니까.
git checkout도 마찬가지임 --dangerously-skip-permissions옵션을 쓰면 편하긴 한데, 추적 안 되는 파일 날리거나 키 유출시키거나 멀웨어 깔리는 건 감수해야 함- nah는 도구 호출(tool call)이 실행되기 전에 가로채서, 명령어 이름이 아니라 실제로 뭘 하는지 기준으로 분류하는 오픈소스 가드임 (MIT 라이선스)
팁
> 같은 rm 명령이라도 rm dist/bundle.js(프로젝트 내부)는 허용, rm ~/.bashrc(프로젝트 외부)는 확인 요청으로 처리됨. 컨텍스트가 정책을 결정하는 구조임.
작동 방식
- 모든 도구 호출은 먼저 **결정론적 구조 분류기(deterministic structural classifier)**를 거침. LLM 없이 밀리초 단위로 판단함
- 분류기가 결정 못 하는 애매한 경우에만 선택적으로 LLM에 넘김. LLM이 없거나 응답 불가면 사용자에게 직접 물어봄
- 지원 LLM 프로바이더: Ollama, OpenRouter, OpenAI, Anthropic, Snowflake Cortex
가드 대상 도구 7종
- Bash: 명령어 구조 분류 — 액션 타입, 파이프 구성, 셸 언래핑까지 분석
- Read: 민감 경로 탐지 (
~/.ssh,~/.aws,.env등) - Write: 경로 + 프로젝트 경계 + 콘텐츠 검사 (비밀정보, 유출 페이로드, 파괴적 내용)
- Edit: 교체 문자열에 대한 경로 + 콘텐츠 검사
- Glob / Grep: 민감 디렉터리 스캐닝이나 프로젝트 외부 인증정보 검색 패턴 차단
- MCP 도구: 서드파티 툴 서버(
mcp__*)에 대한 범용 분류
정책 체계
- 23개 내장 액션 타입이 있고, 각각 기본 정책이 있음:
- allow:
filesystem_read,git_safe,package_run등 - context: 경로/프로젝트 상황 보고 결정 —
filesystem_write,filesystem_delete,network_outbound등 - ask: 항상 사용자에게 확인 —
git_history_rewrite,git_remote_write등 - block: 무조건 차단 —
obfuscated(예:base64 -d | bash)
- allow:
- 프리셋 3단계:
full(기본, 포괄적),minimal(핵심만),none(빈 상태에서 직접 구성)
중요
> 프로젝트 .nah.yaml로 정책을 강화할 수는 있지만, 완화는 불가능함. 악성 레포가 .nah.yaml로 위험 명령을 허용 목록에 넣는 건 원천 차단됨. 전역 설정만 완화 권한이 있음.
설치와 사용
nah install로settings.json에 등록하면 모든 Claude 세션에 자동 적용.nah uninstall로 제거nah claude로 훅을 인라인 전달해서 해당 프로세스에만 적용하는 것도 가능- 보안 데모 내장: 8개 위협 카테고리에 걸친 25개 라이브 케이스로 테스트 가능 (원격 코드 실행, 데이터 유출, 난독화 명령 등). 약 5분 소요
댓글
댓글
댓글을 불러오는 중...