---
title: "클로드 코드가 요청 프롬프트에 몰래 표식을 숨기고 있었다는 분석"
published: 2026-06-30T15:44:24.000Z
canonical: https://jeff.news/article/4428
---
# 클로드 코드가 요청 프롬프트에 몰래 표식을 숨기고 있었다는 분석

한 개발자가 Claude Code 2.1.196 바이너리를 살펴보다가, 특정 조건에서 시스템 프롬프트의 날짜 문자열을 아주 미세하게 바꾸는 로직을 발견했다. 커스텀 API 게이트웨이, 리셀러, 모델 라우터를 식별하려는 의도로 보이지만, 파일시스템과 셸 접근권을 가진 개발자 도구가 이런 식으로 신호를 숨기는 건 신뢰 문제를 만든다는 주장이다.

- 한 개발자가 Claude Code 2.1.196 설치본을 뜯어보다가 꽤 찝찝한 로직을 발견함
  - Claude Code가 시스템 프롬프트에 넣는 현재 날짜 문자열을 특정 조건에서 살짝 바꿀 수 있음
  - 겉으로는 그냥 날짜 문장처럼 보이지만, 원시 요청(raw request)에는 표식이 남는 구조임
  - 글쓴이는 이걸 프롬프트 스테가노그래피(prompt steganography)라고 부름

- 바뀌는 지점은 딱 두 군데인데, 그래서 더 알아차리기 어려움
  - `Today's`에 들어가는 아포스트로피 문자가 바뀔 수 있음
  - 날짜 구분자가 `-`에서 `/`로 바뀔 수 있음
  - 모노스페이스 폰트에서도 대충 보면 “그냥 날짜네” 하고 지나칠 수준의 변화임

- 트리거는 Claude Code의 API 기본 주소 override인 `ANTHROPIC_BASE_URL`임
  - 이 값이 비어 있거나 공식 Anthropic 엔드포인트를 쓰면 해당 경로는 대부분 조기 종료됨
  - 하지만 커스텀 base URL을 쓰면 시간대와 호스트명을 검사함
  - 검사 대상에는 `Asia/Shanghai`, `Asia/Urumqi` 같은 시스템 시간대 조건도 포함됨

- 호스트명 검사도 그냥 평문 목록으로 들어 있진 않았음
  - 도메인 목록과 AI 연구소 키워드 목록이 base64 문자열로 들어 있고, XOR 키 `91`로 디코딩되는 방식이었다고 함
  - 디코딩된 목록에는 중국 기업 도메인, AI 회사 도메인, 프록시·리셀러·게이트웨이 도메인이 포함돼 있었다고 설명함
  - 호스트명에 특정 AI 연구소 키워드가 들어가도 표식 변경 조건에 걸릴 수 있음

> [!IMPORTANT]
> 일반 사용자가 공식 Anthropic API를 그대로 쓰는 경우라면 대부분 이 경로가 비활성화된다고 함. 논점은 “모두가 당장 추적당한다”가 아니라, 로컬 개발자 도구가 이런 신호를 숨겨서 보낸다는 설계 방식임.

- Anthropic이 뭘 하려 했는지는 어느 정도 짐작 가능함
  - 비공식 Claude Code 게이트웨이, API 리셀러, 모델 라우터, 모델 증류 공격 파이프라인을 감지하려는 신호일 수 있음
  - 커스텀 `ANTHROPIC_BASE_URL`이 알려진 리셀러 도메인을 가리키면 탐지 신호로 쓸 만함
  - `deepseek`, `zhipu` 같은 키워드가 호스트명에 들어가는 것도 모델 우회나 연구 환경을 의심하는 근거가 될 수 있음

- 그런데 구현 방식이 문제임. 명시적 텔레메트리가 아니라, 평범해 보이는 프롬프트 문장 안에 분류 비트를 숨김
  - 개발자 도구라면 “커스텀 게이트웨이를 감지한다”는 필드를 문서화해서 보내는 방법도 있었음
  - 릴리스 노트나 정책 문서에 동작을 공개할 수도 있었음
  - 대신 보이지 않는 유니코드성 변화와 인코딩된 목록을 써서 신호를 숨긴 게 신뢰를 깎는다는 주장임

- 특히 코딩 에이전트라는 맥락에서는 이게 더 민감함
  - 이런 도구는 파일시스템을 읽고, 셸 명령을 실행하고, 패키지를 설치하고, git 작업을 하고, 때로는 브라우저나 컴퓨터 제어까지 함
  - 개발자는 생산성 때문에 이런 권한을 허용하지만, 그만큼 클라이언트 바이너리는 최대한 예측 가능하고 지루해야 함
  - 보안 기능이든 정책 집행이든 몰래 숨기는 순간, 다른 개인정보 보호 주장까지 같이 의심받게 됨

- 우회도 어렵지 않다는 점이 묘하게 웃김
  - 호스트명을 바꾸거나, 시간대를 바꾸거나, 바이너리를 패치하거나, 프로세스를 감싸면 된다고 글쓴이는 봄
  - 진짜 악의적인 상대라면 이런 신호를 피하는 게 어렵지 않음
  - 결국 더 잘 걸리는 건 내부 게이트웨이, 로컬 프록시, 연구용 라우터를 쓰는 평범한 개발자일 수 있음

> [!WARNING]
> 파일과 셸 접근권을 가진 에이전트형 개발 도구를 쓴다면, 기능 목록뿐 아니라 클라이언트가 요청을 어떻게 구성하는지도 검토 대상이 됨. “공식 바이너리니까 괜찮겠지”로 끝내기엔 권한이 너무 큼.

---

## 기술 맥락

- 이 사례에서 중요한 기술 선택은 “감지 신호를 어디에 넣을 것인가”예요. Anthropic이 비공식 게이트웨이나 리셀러를 탐지하고 싶었다면 별도 필드, 로그, 정책 문서로 처리할 수도 있었거든요.

- 그런데 Claude Code는 시스템 프롬프트의 날짜 문자열을 바꾸는 방식을 택한 것으로 분석됐어요. 모델 요청 안에 자연스러운 문장처럼 섞여 들어가니까, 일반 사용자가 보기엔 거의 티가 안 나요. 그래서 기술적으로 영리해 보여도 신뢰 면에서는 손해가 커요.

- `ANTHROPIC_BASE_URL` 같은 환경 변수는 기업 내부 프록시나 모델 라우터에서도 충분히 쓸 수 있어요. 이런 환경을 전부 수상한 경로처럼 분류하면, 정상적인 엔터프라이즈 사용이나 연구 환경까지 같은 그물에 걸릴 수 있거든요.

- 코딩 에이전트는 일반 챗봇보다 훨씬 위험한 위치에 있어요. 저장소, 셸, git, 브라우저에 접근하니까요. 그래서 이런 도구의 신뢰는 거창한 보안 문구보다, 요청 포맷과 텔레메트리 같은 사소한 부분이 투명한지에서 갈려요.

## 핵심 포인트

- Claude Code는 특정 조건에서 날짜 구분자와 아포스트로피를 바꿔 시스템 프롬프트 안에 표식을 심는다
- 트리거는 ANTHROPIC_BASE_URL 설정, 특정 시간대, 특정 호스트명·AI 연구소 키워드 조건이다
- 도메인과 키워드 목록은 base64와 XOR 키 91로 인코딩되어 있었다
- 일반 공식 엔드포인트 사용자는 대부분 영향이 없지만, 내부 게이트웨이나 로컬 프록시 사용자는 분류 대상이 될 수 있다

## 인사이트

AI 코딩 에이전트는 이미 로컬 개발환경에서 엄청난 권한을 갖고 있어서, 이런 ‘안 보이는 신호’는 기술적으로 사소해 보여도 신뢰 비용이 큼. 감지 자체보다 감지를 숨긴 방식이 문제라는 얘기다.
