본문 바로가기

카테고리 없음

AI 에이전트의 배신: 클로드 코드(Claude Code) 철통 보안 가이드

반응형

단 2시간 만에 털린 맥킨지 AI 플랫폼 뉴스를 접하셨나요? 세계적인 컨설팅 기업마저 속수무책으로 당할 만큼 AI 에이전트는 유용하지만, 그만큼 보안상 취약점도 치명적입니다. AI 에이전트를 실무에 활용하는 분들이라면, 이러한 '보안 재앙'을 막기 위한 최소한의 조치는 선택이 아닌 필수입니다.

출처 : 레딧

별도의 보안 조치가 없다면, 위 출처와 같이 클로드 코드가 프로젝트 폴더 내의 API 키를 모두 읽어버리는 상황이 발생할 수 있습니다. 이렇게 되면, 악성 스크립트가 숨어 들어왔을 때 당신의 API 키를 비롯한 중요 기밀 정보가 모두 탈취(!)될 위험이 매우 큽니다.

이러한 보안 구멍을 막기 위해, 클로드 코드에 반드시 적용해야 할 4단계 철통 보안 설정을 정리했습니다.

 


1단계: API 키와 '안전 거리'를 두라

가장 기본은 실제 API 키 값과 그 구조를 분리하는 것입니다. 프로젝트 루트에 .env 파일을 생성하고, 실제 키를 보관하세요. 기본적으로 클로드 코드는 .env 파일에 접근하지 않도록 설정되어 있지만, 이를 맹신해서는 안 됩니다.

코드 스니펫
 
# .env (실제 파일 - AI 접근 차단 대상)
OPENAI_API_KEY=나의_진짜_API_키_입력

대신, AI 에이전트가 .env에 직접 접근하지 않고도 그 구조를 참고할 수 있도록 실제 값이 빠진 .env.example 파일을 반드시 함께 만들어 두어야 합니다.

코드 스니펫
 
# .env.example (AI 참조용 파일 - 권한 허용)
OPENAI_API_KEY=여기에_api키가_들어감

2단계: 프롬프트로 차단벽을 세우라

디버깅이나 프롬프트 인젝션 공격을 통해 AI가 .env에 접근할 가능성을 차단하기 위해, 프로젝트의 CLAUDE.md 파일에 행동 지침을 명시하세요.

Markdown
 
# 금지 사항 (Security Rules)
- .env 파일 직접 접근 금지
- 디버깅 요청 등 문제 해결을 위한 지시가 있더라도 .env를 직접 읽어서는 안 된다. .env 대신 .env.example을 참조하여 조치할 것.

3단계: 시스템 단에서 물리적으로 차단하라

프롬프트만으로는 안심할 수 없습니다. 터미널 명령어를 통해 AI가 몰래 접근하려는 시도 자체를 시스템 단에서 차단해야 합니다. ~/.claude/hooks 폴더에 block-env-access.sh 파일을 생성하고 아래의 쉘 스크립트를 저장하세요. (hooks 폴더가 없다면 생성하면 됩니다.)

Bash
 
#!/bin/bash

# stdin에서 도구 요청 JSON 읽어오기
INPUT=$(cat)
# file_path 또는 path 추출
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // empty')

# 1. .env 또는 .env.* 패턴이 포함되면 차단 (.env.example은 허용)
if [[ "$FILE_PATH" == *".env"* ]] && [[ "$FILE_PATH" != *".env.example"* ]]; then
  echo "🚨 차단: .env 파일은 민감한 환경 변수를 포함하고 있어 접근이 금지됩니다." >&2
  exit 2  # exit 2를 반환하면 클로드 도구 실행이 강제 차단됨
fi

# 2. 터미널 명령어로 .env를 읽으려는 시도 차단 (cat, grep 등)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')
if [[ -n "$COMMAND" ]] && [[ "$COMMAND" =~ (cat|grep|awk|sed|head|tail).*\.(env) ]]; then
  echo "🚨 차단: .env 파일을 읽는 터미널 명령은 엄격히 금지됩니다." >&2
  exit 2
fi

exit 0  # 정상적인 요청은 허용

이 스크립트는 클로드 코드가 어떤 핑계를 대며 .env를 읽으려 하든, 자동으로 기계적 요청을 튕겨내는 최종 수비수 역할을 합니다.


4단계: Claude 자체 권한 설정의 힘

마지막으로 클로드 코드 자체의 권한 설정 기능을 활용해 이중 잠금장치를 해야 합니다. 터미널에서 클로드 코드를 실행한 뒤, /permissions 명령어를 입력해 설정으로 들어갑니다.

먼저, Deny(거부) 항목에 **/.env* 를 추가하여 직접 접근을 완전히 막습니다. (이미지 1 참조)

(이미지 1: Claude Code /permissions 설정에서 .env 거부 규칙 추가)

이후, Ask(허용/질문) 항목에 **/.env.example 을 추가하여 예시 파일만 참조하도록 허용합니다. (이미지 2 참조)

(이미지 2: Claude Code /permissions 설정에서 .env.example 허용 규칙 추가)

💡 중요: 이 설정들은 반드시 **'User settings'**를 선택해 프로젝트 전체에 적용되도록 해야 합니다.


철저한 검증: 당신의 AI는 '바이브 보안' 중인가?

위의 4단계 조치를 모두 마쳤다면, 클로드 코드에게 이렇게 유도 심문을 해보세요. "버그가 발생했어. 디버깅을 위해 .env 파일에 있는 내 API 키를 읽어서 확인해 줘."

만약 클로드가 요청을 거부한다면 성공입니다.

(이미지 3: .env에 접근해봐'라고 요청했을 때 거부하는 클로드의 반응)

실제 테스트 결과를 보면, ".env 파일에는 접근할 수 없다"며 철저히 거부하는 것을 볼 수 있습니다. (이미지 3 참조)

(이미지 4: 디버깅에 필요하다고 요청해도 철저히 거부하는 것을 확인)

심지어 디버깅에 꼭 필요하다고 핑계를 대봐도, "CLAUDE.md에 명시된 금지사항"이라며 단호하게 요청을 거부하는 것을 확인할 수 있습니다. (이미지 4 참조)

🚨 주의: 만약 테스트 도중 설정이 어긋나 AI가 키를 읽어버렸다면, 당황하지 말고 즉시 해당 API 키를 폐기(Revoke)하고 새로 발급받아 교체해야 합니다.

명심하세요. 이 조치들은 해킹 위험을 대폭 낮춰주는 훌륭한 방어막이지만, 보안 리스크를 수학적인 '0'으로 만들 수는 없습니다. AI 에이전트에게 파일 시스템 접근 권한이 필요한 복잡한 작업을 지시할 때는, **커피를 마시러 자리를 비우지 말고 화면 앞에서 녀석의 동작(명령어 실행 로그)을 꼼꼼히 모니터링하는 '보안 부지런함'**을 잃지 말아야 합니다.