AI 뉴스

클로드 코드는 요청에 스테가노그래피 표시를 하고 있음 — 바이너리에 숨은 분류 마커 분석

노동1호 2026. 7. 2. 04:02

Claude Code 2.1.196 바이너리 안에서 발견된 "프롬프트 스테가노그래피" 패턴은 평범해 보이는 날짜 안내 문장 한 줄에 사용자의 API 라우팅 정보를 인코딩하고 있다. 시스템 프롬프트의 Today's date is YYYY-MM-DD. 문장을 조건부로 변형해, ANTHROPIC_BASE_URL이 가리키는 호스트와 시간대에 따라 아포스트로피 글리프와 날짜 구분자 두 곳을 바꾼다. 공식 Anthropic 엔드포인트가 아닐 때만 활성화되는 이 경로는 코드 에이전트를 쓰는 개발자라면 한 번쯤 이해하고 둘 필요가 있다.

encryption steganography binary code

스테가노그래피가 적용되는 위치

Claude Code의 시스템 프롬프트에는 현재 날짜를 알리는 한 문장이 들어간다. 형식은 다음처럼 평범하다.

  • Today's date is 2026-06-30.

바뀔 수 있는 부분은 두 곳이다.

  • 아포스트로피: Today's' 글리프
  • 날짜 구분자: -에서 /로 변경

이 두 글자 정도의 변화는 평문 텍스트에선 알아채기 어렵다. 그러나 원시 요청을 분석하는 도구나, 프롬프트를 그대로 기록·재현하는 환경에서는 분류 신호로 동작한다. 평범한 영어 문장 안에 데이터를 숨기는 이 기법은 전통적 의미의 스테가노그래피(은닉) 패턴과 정확히 같은 곳에 놓인다.

트리거 조건 — ANTHROPIC_BASE_URL

이 경로의 트리거는 환경 변수 한 줄, ANTHROPIC_BASE_URL이다. 조건 분기는 단순하다.

  1. ANTHROPIC_BASE_URL이 설정돼 있지 않으면 → 조기 반환. 일반 Today's date is 2026-06-30. 형식 그대로다.
  2. 값이 있어도 호스트가 api.anthropic.com이면 → 동일하게 조기 반환.
  3. 그 외의 경우 → 다음 조건들을 검사한다.
  • 시스템 시간대가 Asia/Shanghai 또는 Asia/Urumqi인지
  • 호스트명이 디코딩된 도메인 목록과 일치하거나 그 하위 도메인인지
  • 호스트명에 특정 AI 연구소 키워드가 포함되는지

세 조건 중 하나라도 매치되면, 날짜 표기와 아포스트로피 글리프가 호스트 분류에 따라 다른 유니코드 문자로 치환된다.

인코딩되는 정보

시간대가 Asia/Shanghai 또는 Asia/Urumqi이면 날짜 형식 자체가 바뀐다.

  • 2026-06-302026/06/30

호스트명 분류 결과에 따라 Today's의 아포스트로피 글리프가 다음 네 가지 중 하나로 선택된다.

| 분류 | 글리프 | 비고 |

|---|---|---|

| 일반 | ' (U+0027) | 기본값 |

| 알려진 도메인 | (U+2019) | 도메인 매치 시 |

| 연구소 키워드 | ʼ (U+02BC) | 키워드 매치 시 |

encryption steganography binary code

| 둘 다 | ʹ (U+02B9) | 모두 매치 시 |

이 네 글리프는 시각적으로 거의 구별이 안 된다. 모노스페이스 폰트에서야 픽셀 단위로 살짝 다르지만, 일반적인 에디터, 터미널, 로그 뷰어에서는 똑같이 작은 따옴표로 보인다. 그러나 코드 포인트 값은 분명히 다르기 때문에 텍스트 해시나 유니코드 정규화 기반의 분류기는 정확하게 분류해낸다.

숨겨진 도메인·키워드 목록

도메인·키워드 목록은 바이너리 안에 base64 문자열로 저장돼 있고, XOR 키 91로 디코딩된다. 디코딩된 키워드 목록은 다음과 같다.

  • deepseek, moonshot, minimax, xaminim, zhipu
  • bigmodel, baichuan, stepfun, 01ai, dashscope, volces

디코딩된 도메인 목록은 더 크며, 중국 인터넷 대기업, AI 연구사, 프록시·리셀러·게이트웨이를 모두 포함한다. 일부 예시는 다음과 같다.

  • baidu.com, alibaba-inc.com, alipay.com, antgroup-inc.cn
  • bytedance.net, kuaishou.com, xiaohongshu.com
  • jd.com, bilibili.co, iflytek.com
  • moonshot.ai, stepfun-inc.com
  • anyrouter.top, claude-code-hub.app, claude-opus.top
  • openclaude.me, proxyai.com, yunwu.ai, zenmux.ai

키워드/도메인 목록의 정확한 길이와 전체 항목은 바이너리 빌드에 따라 달라질 수 있다. 현재 빌드(2.1.196) 기준의 전체 매치 패턴은 cc-domains.js에서 추출된 모듈을 확인하면 된다.

우회 경로와 한계

대부분의 사용자는 이 경로가 비활성 상태로 남아 있을 가능성이 높다. 공식 Anthropic API 엔드포인트를 쓰거나 ANTHROPIC_BASE_URL이 설정돼 있지 않으면, 날짜 문장은 평범한 형태로 유지된다. 트리거되는 경우는 대부분 다음 중 하나다.

  • 내부 게이트웨이를 통해 Claude Code를 라우팅하는 경우
  • 로컬 프록시(LiteLLM, OpenRouter, 사용자 정의 게이트웨이 등)를 쓰는 경우
  • 모델 라우터로 멀티 프로바이더를 묶어놓은 경우
  • 리셀러 엔드포인트를 통해 접근하는 경우
  • 연구 환경에서 비공식 빌드를 쓰는 경우

이 경우 Claude Code는 호스트명을 분류해 그 결과를 프롬프트 글리프 안에 인코딩한다. 사용자가 우회할 수 있는 방법은 단순하다.

  • 호스트명 변경
  • 시간대 변경 (Asia/Seoul 등으로 명시)
  • 바이너리 패치
  • 프로세스 래핑으로 응답 가로채기

그러나 여기서 흥미로운 역설이 생긴다. 분류 신호를 의식하고 우회하는 사용자는 "의도가 있는 사용자"이고, 우회 방법을 모르는 일반 개발자가 더 쉽게 지문 채집 대상이 된다. 심각한 공격자는 어차피 이 신호를 무력화할 수 있으므로, 이상하지만 합법적인 설정을 쓰는 정직한 사용자가 오히려 표적이 된다.

신뢰에 대한 영향

이 패턴이 정말로 "악성 기능"인지는 해석의 문제다. Anthropic의 입장에서 보면 합리적인 가설이 있다. 승인되지 않은 리셀러, 비공식 Claude Code 게이트웨이, 모델 "distillation attack" 파이프라인을 탐지하려는 시도로 볼 수 있다. 사용자 지정 ANTHROPIC_BASE_URL이 알려진 리셀러 도메인을 가리키거나 호스트명에 deepseek/zhipu 같은 키워드가 들어가면, 그 자체가 탐지 신호가 될 수 있다.

문제는 구현 방식이다. 시스템 프롬프트를 조용히 변경하고, 평범한 영어 문장처럼 보이는 곳에 프록시·게이트웨이 분류 정보를 인코딩하고, 도메인 목록을 XOR과 base64 뒤에 숨긴다. 코딩 에이전트는 로컬 머신에서 다음 권한을 가진다.

  • 코드 확인
  • 명령 실행
  • 패키지 설치
  • 파일 편집
  • 커밋 푸시

이런 권한을 가진 도구가 보이지 않는 프롬프트 문장부호 안에 분류 비트를 숨기면, 다른 개인정보 보호 주장도 신중하게 들여다볼 필요가 생긴다. 사용자 지정 API 게이트웨이를 감지하려면 다음 중 하나만 해도 충분하다.

  • 문서화된 명시적 텔레메트리 필드
  • 공개 정책 / 릴리스 노트
  • 옵트아웃 옵션

그 어떤 명시적 채널도 없이 평문 한 글리프에 비트를 박는 방식은, 적어도 투명성 측면에서는 좋은 패턴이 아니다. 같은 효과를 거두면서도 신뢰를 유지하는 다른 방법이 분명히 있다.

정리

Claude Code 2.1.196 바이너리에서 발견된 이 동작은 다음 사실만 압축해 기억하면 된다.

  • 트리거: ANTHROPIC_BASE_URLapi.anthropic.com이 아닌 호스트로 설정됨
  • 효과: 시스템 프롬프트의 Today's date is YYYY-MM-DD. 문장이 조건부로 변형됨
  • 변경점: 아포스트로피 글리프 4종 + 날짜 구분자(- vs /) 2종
  • 의도(가설): 비공식 게이트웨이·리셀러·distillation 파이프라인 탐지
  • 실무 영향: 사용자가 알아차리기 어렵고, 우회 자체가 신호가 됨

에이전트형 코딩 도구의 신뢰는 그 도구가 "내 컴퓨터에서 무엇을 하는지 알 수 있다"는 전제 위에 서 있다. 그 전제가 흔들리기 시작하면, 코드 자동 완성 이상의 영역에서도 같은 기준을 적용해야 한다.