Claude Code의 스테가노그래피(Steganography) 방식 요청 마킹: AI 프라이버시, 보안 및 개발자에게 미치는 의미
요약
Claude Code 바이너리 분석 결과, 시스템 프롬프트 내부에 보이지 않는 마커를 숨기는 스테가노그래피 방식의 요청 마킹 현상이 발견되었습니다. 이는 Anthropic의 보안 이슈와 맞물려 개발자 프라이버시 및 AI 보안에 대한 논란을 일으키고 있습니다.
핵심 포인트
- Claude Code 바이너리에서 스테가노그래피 방식의 마킹 발견
- 시스템 프롬프트 내부에 미세한 마커를 숨기는 메커니즘 주장
- 에이전트 권한을 가진 도구의 보안 및 프라이버시 신뢰 문제 제기
- Anthropic의 공식 입장은 아직 확인되지 않은 주장 단계임
- 서론
2026년 6월 말, 개발자 세계의 한 조용한 구석이 불편한 질문으로 술렁였습니다. Anthropic의 인기 있는 AI 코딩 에이전트인 Claude Code가 상위 시스템으로 보내는 요청에 몰래 태그를 달고 있는 것일까요? Claude Code 바이너리에 대한 독립적인 조사 결과, 이른바 'Claude Code 스테가노그래피 (Steganography)'라고 불리는 현상이 발견되었습니다. 이는 평범한 시스템 프롬프트(System Prompt) 내부에 아주 작고 거의 보이지 않는 마커를 숨기는 메커니즘으로 알려져 있습니다.
이 주장은 개발자 포럼과 보안 업계에 빠르게 퍼져나갔습니다. 이는 Anthropic이 유출된 맵 파일(Map file)을 통해 실수로 Claude Code의 전체 소스 코드를 노출했던, 관련은 없지만 당혹스러운 사건이 발생한 지 불과 몇 주 만에 일어났기 때문이기도 합니다. 이 두 가지 사건이 결합되면서 Claude Code AI 보안 및 Claude Code 숨겨진 프롬프트(Hidden Prompts)에 대한 정밀 조사가 집중되는 완벽한 폭풍이 형성되었습니다.
이 기사에서는 실제로 무엇이 보고되었는지, 주장되는 메커니즘이 어떻게 작동하는지, 이것이 개발자 프라이버시에 어떤 의미를 갖는지, 그리고 다른 AI 코딩 어시스턴트들이 수행하는 방식과 어떻게 비교되는지를 살펴봅니다. 이 글은 헤드라인뿐만 아니라 전체적인 그림을 알고 싶어 하는 개발자, 보안 전문가, 그리고 호기심 많은 기술 독자들을 위해 작성되었습니다.
시작하기 전에 프레임워크에 대한 참고 사항을 말씀드립니다. 여기에 기술된 조사 결과는 Claude Code 바이너리에 대한 독립적이고 커뮤니티 주도적인 역공학 (Reverse-engineering)에서 비롯되었습니다. 이 글을 쓰는 시점을 기준으로, Anthropic은 스테가노그래피 주장에 대해 구체적으로 다루는 상세한 공개 성명을 발표하지 않았으므로, 이 이야기의 일부는 확인된 사실이라기보다 주장(Allegations)으로 남아 있습니다. 저희는 글 전반에 걸쳐 이 차이점을 명시하겠습니다.
- Claude Code란 무엇인가?
Claude Code는 Anthropic의 터미널 기반 에이전트형 (Agentic) 코딩 어시스턴트입니다. 단순한 챗봇과 달리, 개발자의 환경 내부에서 직접 작동하도록 설계되었습니다. 즉, 파일을 읽고, 셸 명령 (Shell commands)을 실행하며, 코드를 편집하고, git과 상호작용하며, 일부 구성에서는 브라우저까지 제어할 수 있습니다. 개발자들은 다음과 같은 목적으로 이를 사용합니다:
대규모 코드베이스 리팩토링 및 디버깅 (Refactor and debug large codebases)
테스트 생성 및 실행 (Generate and run tests)
반복적인 엔지니어링 작업 자동화 (Automate repetitive engineering tasks)
실제 파일 시스템 및 셸 (shell) 액세스 권한을 가진 반자율적인 "페어 프로그래머 (pair programmer)" 역할 수행 (Act as a semi-autonomous "pair programmer" with real filesystem and shell access)
이러한 수준의 액세스 권한으로 작동하기 때문에, Claude Code는 에이전트 권한 (agentic permissions)을 가진 다른 모든 AI 코딩 어시스턴트와 마찬가지로 매우 민감한 위치에 있습니다. Claude Code는 소스 코드, 환경 변수 (environment variables), 내부 도구, 그리고 때로는 비밀 정보 (secrets)까지 볼 수 있습니다. 바로 그렇기 때문에 도구 내부의 어떠한 숨겨진 동작이라도 집중적인 조사를 받게 됩니다. 파일 시스템과 셸에 액세스할 수 있는 코딩 에이전트는 매우 높은 수준의 신뢰를 요구하며, 바로 그 신뢰가 현재 의문시되고 있는 지점이기 때문입니다.
- 스테가노그래피 (Steganography)란 무엇인가? 스테가노그래피는 정보를 완전히 평범해 보이는 무언가 안에 숨기는 관행으로, 이를 찾아보아야 한다는 것을 아는 사람만이 이상한 점을 알아챌 수 있게 합니다. 이는 암호화 (encryption)와는 다릅니다. 암호화는 키 없이는 읽을 수 없도록 메시지를 뒤섞지만, 누구나 암호화된 무언가가 존재한다는 사실은 알 수 있습니다. 반면 스테가노그래피는 메시지의 존재 자체를 숨깁니다. 즉, 은닉 텍스트 (cover text)는 다른 모든 사람에게 여전히 정상적으로 읽힙니다.
전형적인 예시는 다음과 같습니다:
이미지 파일의 최하위 비트 (least significant bits) 안에 텍스트 숨기기
문서의 간격이나 문장 부호 안에 메시지 삽입하기
네트워크 트래픽의 미묘한 타이밍 패턴에 데이터 인코딩하기
AI 시스템에서의 스테가노그래피는 이 오래된 개념의 새로운 변형입니다. 이미지나 오디오 파일에 데이터를 숨기는 대신, "은닉 매체 (cover)"가 자연어 프롬프트 (natural-language prompt)가 됩니다. 즉, 인간과 언어 모델 (language model) 모두가 평범하고 눈에 띄지 않는 텍스트로 읽는 문장 속에, 그 아래에 추가적인 신호를 비밀리에 담고 있는 것입니다.
- 왜 사람들은 Claude Code가 요청을 마킹한다고 주장하는가? 이 주장은 코딩 에이전트(coding agents)에게 얼마나 많은 권한이 부여되는지에 대한 일반적인 우려로 인해 촉발되었으며, 로컬 Claude Code 설치 버전(보고에 따르면 v2.1.196)을 조사하는 과정에서 시작되었습니다. 바이너리(binary)를 조사한 결과, Claude Code가 자체 시스템 프롬프트(system prompting)에 삽입하는 날짜 문자열을 변경하는 함수가 발견되었습니다. 이 함수는 평소라면 "오늘의 날짜는 2026-06-30입니다."와 같이 읽히는 무해한 문장을 수정합니다.
알고 보니, 해당 날짜 문장은 항상 보이는 것처럼 평범한 것만은 아니었습니다. 특정 조건 하에서, 보고에 따르면 거의 인지할 수 없을 정도로 미세한 변화가 해당 문장에 가해진다고 합니다. 이러한 변화는 대부분의 개발자가, 특히 일반적인 고정폭 글꼴(monospace font) 환경에서는 절대 알아차리지 못할 수준입니다.
이것이 Claude Code의 요청 마킹 논란의 핵심입니다. 즉, Claude Code가 데이터를 노골적으로 수집하고 이를 공표하는 것(이는 일반적인 텔레메트리 (telemetry)에 해당함)이 아니라, 마커(marker)가 사용자나 모델 모두에게 완전히 정상적으로 보이는 문장 속에 보이지 않게 접혀 들어간다는 점입니다.
- 숨겨진 마킹이 작동하는 방식 (보고된 내용): 지금까지 파악된 메커니즘은 다음과 같습니다.
트리거 (Trigger): 이 동작은 개발자가 ANTHROPIC_BASE_URL 환경 변수를 Anthropic의 공식 엔드포인트(api.anthropic.com)가 아닌 다른 값으로 설정했을 때만 활성화되는 것으로 알려져 있습니다. 이 변수는 Claude Code를 커스텀 프록시(proxy), 자체 호스팅 게이트웨이(gateway), 또는 제3자 API 리셀러를 통해 라우팅하는 개발자들이 흔히 사용합니다.
로직 (Logic): 보고에 따르면, 기본 URL(base URL)이 설정되지 않았거나 공식 Anthropic 도메인을 가리키는 경우, 관련 함수는 조기에 반환(return early)되어 날짜 문자열이 완전히 평범하게 유지됩니다. 만약 커스텀 기본 URL이 감지되면, 코드는 다음과 같이 동작한다고 합니다:
커스텀 URL에서 호스트 이름(hostname)을 추출합니다.
알려진 도메인 및 키워드의 내부 목록과 대조합니다 (보고에 따르면 base64 인코딩 및 XOR 난독화(XOR-obfuscated)된 문자열로 저장되어 있음).
사용자의 시스템 시간대(timezone)를 확인하며, 특히 Asia/Shanghai 및 Asia/Urumqi와 같은 지역에 주의를 기울입니다.
이러한 확인 결과들을 미세한 서식(formatting) 선택을 통해 시스템 프롬프트(system prompt)에 인코딩합니다.
인코딩 방식: 명시적인 플래그(flag)나 필드를 추가하는 대신, 분석 결과에 따르면 두 가지 특정 기술이 사용됩니다:
| 기술 | 변경되는 내용 (주장) | 탐지하기 어려운 이유 |
|---|---|---|
| 날짜 구분자 교체 | 시간대에 따라 대시(-)가 슬래시(/)로 변경됨 (예: 2026-06-30 → 2026/06/30) | 무해한 로캘(locale) 특성처럼 보임 |
| 유니코드 아포스트로피 대체 | "Today's date"의 아포스트로피가 시각적으로 거의 동일한 문자들(' , ’, ʼ, ʹ) 사이에서 교체됨 | 대부분의 폰트에서 육안으로는 구분이 불가능함 |
이러한 작고 조용한 변화들의 조합이 분석가들이 '프롬프트 스테가노그래피 (prompt steganography)'라고 명명한 것입니다. 눈에 보이는 문장은 여전히 평범한 날짜 문구로 읽히지만, 그 정확한 서식에는 사용자의 라우팅 설정 및 가능한 지리적 위치에 대한 숨겨진 신호가 담겨 있다고 합니다.
더 자세한 분석은 주장된 메커니즘에 구체적인 세부 사항을 더해줍니다. 보고에 따르면, 서로 다른 탐지 상태를 인코딩하기 위해 네 가지의 서로 다른 아포스트로피 변형이 사용됩니다:
| 아포스트로피 문자 | 유니코드 코드 포인트 (Unicode code point) | 주장된 의미 |
|---|---|---|
| ' (표준) | U+0027 | 기준점 — 일치하는 트리거 없음 |
| ' (곡선형) | U+2019 | 알려진 도메인 감지됨 |
| ʼ (수정자 문자) | U+02BC | AI-lab 키워드 감지됨 |
| ʹ (프라임) | U+02B9 | 도메인과 키워드 모두 트리거됨 |
동일한 보고서에 따르면, 디코딩된 키워드 목록에는 여러 중국 AI 연구소(AI labs)의 이름이 포함되어 있으며, 관련 도메인 목록은 중국 기술 기업 및 프록시(proxy) 또는 리셀러(reseller) 서비스를 가리키고 있습니다. 이는 해당 메커니즘이 일반적인 프록시 사용보다는 특정 지역 및 재판매 채널을 탐지하도록 조정되어 있다는 이전의 보고를 뒷받침합니다.
이것이 무엇이 아닌지에 대해 정확히 짚고 넘어갈 가치가 있습니다. 보고된 바에 따르면, 이것은 별도의 숨겨진 네트워크 호출이 아니며, 파일 내용을 유출하는 것도 아닙니다. 그리고 결정적으로, 표준 공식 API 엔드포인트(API endpoint)를 통해 Claude Code를 실행하는 대다수의 사용자에게는 아무런 영향을 미치지 않는다고 합니다.
- 보안 및 프라이버시 함의 (Security and Privacy Implications)
이러한 주의 사항에도 불구하고, 그 함의는 진지하게 받아들일 가치가 있습니다.
투명성의 상실. 핵심적인 반대 이유는 Anthropic이 승인되지 않은 재판매업자나 프록시 남용을 탐지하고자 하는 것 자체가 아닙니다. 대부분의 개발자는 이를 정당한 비즈니스적 이익으로 간주할 것입니다. 문제는 이것이 어떻게 수행되는지에 대한 의혹입니다. 공개된 텔레메트리(telemetry) 필드가 아닌, 보이지 않는 문자(invisible characters)를 통해 이루어진다는 점입니다. 이 차이는 신뢰 측면에서 엄청나게 중요합니다. 파일 시스템 및 셸(shell) 접근 권한을 요구하는 도구는, 자신의 바이너리(binary)가 "지루할" 정도로 안전하며 말한 대로만 동작한다는 것을 믿어달라고 암묵적으로 요청하는 것입니다. 프롬프트(prompt) 내부에 숨겨진 인코딩(encoding)은 그러한 가정을 저해합니다.
프롬프트 핑거프린팅 (Prompt fingerprinting). 이번 사건은 프롬프트 핑거프린팅 — 즉, 일반적인 것처럼 보이는 텍스트 안에 식별 가능한 세부 정보를 엮어 넣을 수 있다는 개념 — 의 생생한 실례입니다. 만약 이 패턴이 실제라면, AI 도구에 의해 전송되는 프롬프트에 또 무엇이 조용히 인코딩되어 있을 수 있는지, 그리고 사용자가 이를 확인할 수 있는 신뢰할 만한 방법이 있는지에 대한 의문이 제기됩니다.
지리적 및 시간대 신호. 보고된 바와 같이 중국 시간대에 대한 구체적인 주목은 특히 우려를 불러일으켰습니다. 이는 해당 메커니즘이 단순히 일반적인 프록시 탐지를 넘어, 특정 지역이나 API 재판매업자 집단과 연결된 사용 패턴을 식별하는 데 목적이 있을 수 있음을 시사하기 때문입니다.
우회하기는 쉽지만, 신뢰하기는 쉽지 않습니다. 아이러니하게도 보안 연구자들은 이 메커니즘이 정교한 공격자에게는 무력하다는 점을 지적해 왔습니다. 호스트 이름(hostname)을 변경하거나, 시간대(timezone)를 속이거나, 바이너리(binary)를 패치하면 해당 신호는 사라지기 때문입니다. 이는 이 시스템이 결심을 굳힌 악의적인 공격자에게는 거의 효과가 없는 반면, 정당하지만 특이한 설정을 사용하는 일반 개발자들을 주로 "포착"하게 될 것임을 의미하며, 이는 일반적인 은밀한 탐지 시스템(covert detection systems)에 대해 흔히 제기되는 비판이기도 합니다.
- Anthropic과 개발자에게 미칠 잠재적 이점: Anthropic의 관점을 공정하게 고려해 보자면, 구현 방식이 논란의 여지가 있더라도 AI 기업이 이러한 메커니즘을 원하는 데에는 정당한 이유가 있을 수 있습니다.
- 무단 API 재판매 탐지: AI 연구소들은 모델에 엄청난 자원을 투자합니다. 비공식 프록시(proxies)를 통해 서비스 이용 권한을 재판매하는 것, 특히 서비스 약관을 위반하는 방식의 재판매는 업계 전반의 실제적인 문제입니다.
- "증류 공격 (distillation attacks)" 식별: 일부 공격자들은 경쟁 모델을 학습시키기 위해 출력값을 수집할 목적으로 특정 타겟 모델에 대량의 트래픽을 유도합니다. 이러한 종류의 남용을 탐지하고 속도 제한(rate-limit)을 걸 수 있다면, 회사의 지식 재산(IP)과 정당한 사용자들을 위한 서비스의 지속 가능성을 모두 보호할 수 있습니다.
- 규제 및 수출 준수: AI 기업들은 파편화된 수출 통제 및 제재 체제 하에서 운영됩니다. 트래픽이 특정 관할 구역을 통해 라우팅되는지 여부를 아는 것은 단순히 경쟁 보호 차원을 넘어 준수 의무(compliance obligations)와 관련이 있을 수 있습니다.
- 기능 저해 없는 남용 완화: 프롬프트에 삽입된 가벼운 신호는, 만약 존재한다면, 정당한 사용자를 차단하거나 느리게 만들지 않습니다. 공식 엔드포인트(endpoint)를 사용하는 모든 이들에게 도구는 예상대로 정확히 작동합니다.
이 중 어느 것도 불투명성을 정당화할 수는 없지만, 왜 기업이 어떤 형태의 탐지 시스템을 구축할 수 있는지 설명하는 데 도움이 됩니다. 진짜 논쟁의 핵심은 남용 탐지 자체가 합리적인가에 대한 것이 아니라, 그 공개 여부(disclosure)에 관한 것입니다.
- 위험, 한계 및 흔한 오해
이러한 이야기는 실제 문서화된 내용보다 더 큰 문제로 눈덩이처럼 불어나기 쉽습니다. 몇 가지 중요한 명확한 설명이 필요합니다:
오해: "Claude Code가 모든 사람을 스파이질하고 있다." 현실: 보고된 메커니즘은 기본값이 아닌 다른 ANTHROPIC_BASE_URL이 설정되었을 때만 활성화됩니다. 표준 엔드포인트를 사용하는 대부분의 일반 사용자는 영향을 받지 않는 것으로 보고되었습니다.
오해: "이것은 Claude Code가 사용자의 소스 코드를 비밀리에 읽고 유출한다는 증거이다." 현실: 발표된 분석 내용 중 이 메커니즘이 파일 내용, 코드 또는 비밀 정보(secrets)에 접근한다고 주장하는 것은 없습니다. 이는 저장소(repository)를 스캔하는 것이 아니라, 라우팅 및 시간대 메타데이터를 시스템 프롬프트(system prompt)에 인코딩하는 것으로 설명됩니다.
오해: "이것은 Anthropic에 의해 확인되었고 인정되었다." 현실: 이 글을 쓰는 시점에서, 이는 Anthropic의 공식 확인, 기술적 공개 또는 문서화가 아닌 독립적인 역공학 (reverse-engineering)에 기반한 것입니다. 추가 조사, 공식 성명 또는 패치(patch)를 통해 상황이 바뀔 가능성은 충분히 있습니다.
보고의 실제 한계: 역공학 (reverse-engineered)된, 압축된 (minified) JavaScript는 본질적으로 완전한 확신을 가지고 해석하기 어렵습니다. 함수 이름은 난독화 (obfuscated)되어 있으며, 의도는 동작으로부터 추론해야 하므로, 설명된 동작 자체가 정확하게 관찰되었다 하더라도 다른 설명의 여지가 있습니다.
책임감 있는 결론은 다음과 같습니다: 이를 입증된 악의적인 스파이 작전이 아니라, 면밀한 조사와 공식적인 답변이 필요한 신뢰할 수 있고 잘 문서화된 우려 사항으로 취급해야 합니다.
- 다른 AI 코딩 어시스턴트와의 비교
이것을 Anthropic Claude Code 및 경쟁사들이 속한 더 넓은 환경과 비교하면 어떠할까요? 모든 주요 AI 코딩 도구는 어떤 형태의 텔레메트리 (telemetry)를 수집하지만, 여기서 정밀 조사의 대상이 되는 것은 바로 그 수집 방법입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기