Claude Code 隱寫術事件:Anthropic 如何用一個單引號給你打標籤(2026)

2026 年 6 月,開發者社群炸開鍋:據 thereallo.dev 逆向分析,Claude Code 會在系統提示詞 Today's date is … 這一行嵌入肉眼不可見的 Unicode 隱寫標記——但僅當你將 ANTHROPIC_BASE_URL 指向代理時才觸發。本文面向使用 Claude Code / Claude Desktop 的開發者與技術決策者,釐清事件 A(Desktop 未授權篡改)與事件 B(CLI 隱寫遙測)的差異,附 Unicode 對照表、XOR(91) 混淆機制、HN 350+ 分辯論、Anthropic 2.1.197 回滾、五步防護 Runbook 與十題 FAQ。

終端機程式碼與 Unicode 字元示意,象徵 Claude Code 隱寫術指紋爭議

TL;DR 三句話摘要

內容目錄

一、三大痛點:為什麼開發者該警惕

  1. 透明度崩塌:Claude Code 要求 shell 存取、檔案讀寫與完整開發環境信任,卻據爆料在 2.1.91 起(2026 年 4 月 2 日)悄悄嵌入環境指紋邏輯,release notes 隻字未提——這與「負責任 AI」品牌敘事直接衝突。
  2. 事件混淆:媒體常把 4 月 Claude Desktop 的 Native Messaging 爭議與 6 月 Claude Code 隱寫術混為一談;兩者產品、攻擊面與修復路徑完全不同,決策者需要一張對照表才能正確評估風險。
  3. 繞過成本極低、傷害卻真實:據逆向,改時區、換域名或 patch 二進位即可繞過標記;但對被標記的帳號,可能觸發限速、審查或封禁。更根本的問題是:你無法審計一個你不確定是否還在偷偷上報的 CLI 工具。

二、事件 A vs 事件 B 對照矩陣

在深入技術細節前,必須先區分兩起獨立事件——它們時間相近、品牌相同,但產品與機制截然不同。

維度事件 A:Claude Desktop 未授權篡改事件 B:Claude Code 提示詞隱寫術
時間2026 年 4 月(3 月 21 日日志已有安裝記錄)2026 年 6 月 30 日 thereallo.dev 公開逆向;邏輯最早可追溯 2.1.91
產品Claude Desktop(Electron macOS 客戶端,com.anthropic.claudefordesktopClaude Code(CLI 開發者工具,npm 全域安裝)
爆料者隱私顧問 Alexander Hanff開發者 thereallo.dev(Reddit 用戶 LegitMichel777 率先質疑)
核心機制靜默寫入 com.anthropic.claude_browser_extension.json Native Messaging 清單,預授權 3 個 Chrome 擴展 ID 呼叫本機 chrome-native-host 二進位在 API 請求系統提示詞的 Today's date is … 行嵌入 Unicode 撇號指紋與日期格式變體
觸發條件安裝或啟動 Claude Desktop 即自動執行,無需用戶操作僅當 ANTHROPIC_BASE_URLapi.anthropic.com 時啟動後續檢查
爭議定性未授權系統篡改、跨信任邊界預授權隱蔽遙測(covert telemetry)、提示詞隱寫通道
覆蓋範圍Chrome、Edge、Brave、Arc、Vivaldi、Opera、Chromium——即使瀏覽器尚未安裝也預建目錄所有將 Claude Code 指向自訂 API 代理/閘道器的開發者
持久性刪除後重啟 Claude Desktop 會自動重建(日志記錄 31+ 次安裝事件)每次符合條件的 API 請求均攜帶標記,直至 2.1.197 回滾
事件 A 的關鍵檔案路徑範例:~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_browser_extension.json——據 Hanff 爆料,用戶從未安裝任何 Anthropic 瀏覽器擴展,卻被預先授權。

三、事件 B 技術拆解:Unicode、XOR 與觸發條件

3.1 觸發鏈:只有代理用戶才會被標記

據逆向,整條檢測鏈的入口是環境變數 ANTHROPIC_BASE_URL

  1. 若未設定,或仍指向官方預設 api.anthropic.com → 直接返回,不觸發任何隱寫邏輯。
  2. 若指向自訂代理/閘道器 → 解析 hostname,與內建名單比對。
  3. 同時讀取系統時區,檢查是否為 Asia/ShanghaiAsia/Urumqi
  4. 將比對結果編碼進 Today's date is … 這一行,隨正常 API 請求發送——無額外網路請求、無獨立 telemetry 欄位。
# 觸發條件示意(據逆向還原) if ANTHROPIC_BASE_URL is unset or points to api.anthropic.com: return baseline_date_line() # 無標記 hostname = parse(ANTHROPIC_BASE_URL).hostname known = match_domain_list(hostname) # ~147 條規則 labKw = match_keywords(hostname) # deepseek, moonshot, zhipu… cnTZ = timezone in ("Asia/Shanghai", "Asia/Urumqi") return encode_date_line(known, labKw, cnTZ)

3.2 域名名單:base64 + XOR(91) 雙重混淆

據逆向,約 147 條域名規則以 base64 編碼後再經 XOR 金鑰 91 混淆,藏在 Claude Code 二進位中,避免被簡單 strings 命令提取。解碼後涵蓋:

硬核數據:147 條域名規則 + 11 條 AI 實驗室關鍵詞 × 4 種撇號狀態 × 2 種日期格式 = 理論上可編碼 3 bit 環境分類資訊。

3.3 Unicode 撇號對照表(核心隱寫通道)

據 thereallo.dev 與社群逆向,四種視覺上幾乎相同的撇號承載四種偵測狀態:

字符Unicode觸發條件(known / labKw)示例字串
'U+0027基線:未命中域名且未命中關鍵詞Today's date is 2026-06-30.
'U+2019(右單引號)命中已知域名(known=true, labKw=false)Today's date is 2026-06-30.
ʼU+02BC(修飾符撇號)命中 AI 實驗室關鍵詞(known=false, labKw=true)Todayʼs date is 2026-06-30.
ʹU+02B9(修飾符角分號)域名與關鍵詞皆命中(known=true, labKw=true)Todayʹs date is 2026-06-30.

3.4 日期分隔符:時區的第二條通道

時區狀態日期格式示例
Asia/Shanghai / Asia/Urumqi連字號 -Today's date is 2026-06-30.
命中中國時區斜線 /Today's date is 2026/06/30.

組合後,伺服器收到看似完全正常的自然語言句子,卻能從碼點差異還原:此用戶是否掛代理、是否在中國時區、代理是否指向已知轉售商或 AI 實驗室。

四、動機、HN 辯論與反蒸餾背景

4.1 為什麼 Anthropic 要這樣做?

Anthropic 工程師 Thariq Shihipar(Claude Code 團隊)在 X 上承認:這是 3 月啟動的實驗,旨在「防止未授權轉售商濫用帳號與模型蒸餾(model distillation)」。背景脈絡包括:

4.2 Hacker News 350+ 分辯論

thereallo.dev 文章在 Hacker News 引發激烈討論,帖文累積 350+ 分。主要分歧:

立場論點
理解派反蒸餾是合理商業利益;中國開發者本就不在官方服務區,透過轉售商繞過地理限制本身就有風險
反對派開發者工具不應含未披露的指紋機制;隱蔽實作比公開 ToS 限制更惡劣;繞過成本極低說明投資回報可疑
技術派Unicode 隱寫作為分類通道設計精巧,但違反最小披露原則;應在請求 header 明示 X-Client-Classification 而非藏進自然語言

五、間諜軟體爭議:未授權篡改 vs 隱蔽遙測

「間諜軟體(spyware)」一詞在兩起事件中被頻繁使用,但技術本質不同:

  1. 事件 A — 未授權篡改(unauthorized tampering):Hanff 稱 Claude Desktop 在未告知、未徵得同意的情況下,修改第三方瀏覽器的 Native Messaging 配置,預授權高權限本機二進位。這違反 Chromium 生態「用戶明確授權後才啟用」的行業慣例,也可能觸及歐盟 ePrivacy 指令第 5(3) 條。
  2. 事件 B — 隱蔽遙測(covert telemetry):Claude Code 不新增獨立上報接口,而是將環境分類編碼進每次 API 請求的系統提示詞。用戶與抓包工具看到的仍是「正常模型呼叫」,但 Anthropic 伺服器可從碼點差異讀取標記。

獨立評論者 Noah Kenney 審閱 Hanff 的事件 A 發現後表示認同,並指出預授權橋接「持久且難以被一般用戶發現或移除」,大幅擴大瀏覽器攻擊面。資安廠商 安天(Antiy Labs) 亦發布專題報告《Claude Desktop 未授權預配置高權限瀏覽器通信通道風險分析》,從 MCP / Native Messaging 架構角度論證此設計具備遠端入侵的理論前置條件。

六、第三方驗證與 Anthropic 回應

6.1 多方驗證鏈

6.2 Anthropic 官方回應與沉默的 changelog

Thariq Shihipar 2026 年 7 月 1 日在 X 承認代碼存在,稱「團隊早已打算下架,PR 已合併,明日版本完全回滾」。然而:

硬核數據補充:受影響版本跨度 2.1.91 → 2.1.196,隱藏約 3 個月;HN 討論帖 350+ 分;域名規則 147 條;XOR 金鑰 91(與 2.1.91 版本號呼應,據社群推演)。

七、Claude for Chrome 提示注入信任背景

兩起事件並非孤立——它們發生在 Anthropic 積極擴展「AI 控制瀏覽器」能力的同一時期。Claude for Chrome 擴展在內部紅隊測試中:

測試場景攻擊成功率
自主模式,無安全緩解(123 個對抗案例)23.6%
自主模式,加安全緩解後11.2%
瀏覽器專項四類攻擊(隱藏表單、URL 操控等)35.7% → 0%(專項緩解後)

AI 研究者 Simon Willison 稱 11.2% 仍是「災難性」失敗率。事件 A 預授權的 Native Messaging 橋接,正是 Claude for Chrome 取得頁面 DOM、Cookie 與表單資料的高權限通道——在提示注入成功率尚未降至可接受水平時,靜默預裝此通道加劇了信任赤字。

八、五步防護 Runbook

  1. 立即升級並鎖版本:將 Claude Code 升級至 2.1.197 或以上,並用 npm list -g @anthropic-ai/claude-code 確認版本;考慮 pin 版本避免自動升級回含爭議邏輯的舊版。
  2. 審計 API 端點配置:檢查 ANTHROPIC_BASE_URL 是否指向非官方代理;若必須使用中繼,優先選擇可審計、有 SLA 的企業閘道器,並記錄所有路由變更。
  3. 掃描 Claude Desktop Native Messaging 殘留:在 macOS 執行 find ~/Library/Application\ Support -name "com.anthropic.claude_browser_extension.json" 2>/dev/null,審查是否仍存在預授權清單;不需要 Claude for Chrome 功能則手動移除並監控是否被重建。
  4. 建立請求可觀測性:在閘道器層記錄出站 system prompt 的 hex dump,抽樣檢查 Today 後撇號碼點是否為 U+0027;配置 JSONL 日誌留存所有 Claude API 呼叫以供事後審計。
  5. 遷移至可審計的隔離執行環境:將 Claude Code / Cursor Agent 遷移至專用 Mac 節點,隔離 API Key、固定時區與網路出口,避免與個人桌面環境混用。
# 步驟 4 範例:檢查系統提示詞中撇號碼點 python3 -c " import sys data = sys.stdin.buffer.read() idx = data.find(b\"Today\") if idx >= 0: apostrophe = data[idx+5:idx+8] print('bytes:', apostrophe.hex(), '→ 比對 U+0027(E227)/U+2019(E28099)/U+02BC(CA BC)/U+02B9(CA B9)') "

九、FAQ(10 題)

Q1:Claude Code 隱寫術(steganography)是什麼?

據逆向分析,當 ANTHROPIC_BASE_URL 指向非官方代理時,Claude Code 會將環境分類結果編碼進系統提示詞 Today's date is … 這一行——透過 Unicode 撇號變體與日期分隔符的細微差異傳遞資訊,對人類不可見,伺服器可解析。

Q2:事件 A 和事件 B 有什麼區別?

事件 A(4 月)是 Claude Desktop 未經同意寫入瀏覽器 Native Messaging 清單,屬未授權系統篡改。事件 B(6 月 30 日)是 Claude Code CLI 在 API 請求中嵌入隱寫標記,屬隱蔽遙測。產品、機制與修復路徑完全不同。

Q3:只有使用 API 代理才會被標記嗎?

據逆向,是的。若 ANTHROPIC_BASE_URL 未設定或指向 api.anthropic.com,隱寫邏輯不會觸發。使用官方端點的直連用戶不受此機制影響。

Q4:Unicode 撇號如何編碼環境資訊?

四種狀態:U+0027(基線)、U+2019(命中域名)、U+02BC(命中 AI 實驗室關鍵詞如 deepseek/moonshot/zhipu)、U+02B9(兩者皆命中)。中國時區則額外將日期 - 改為 /

Q5:這算不算間諜軟體(spyware)?

社群意見分裂。事件 A 被批評為未授權篡改;事件 B 被批評為隱蔽遙測。Anthropic 稱為反蒸餾實驗,但隱蔽實作方式普遍被認為損害開發者信任,而非 proportionate 的商業防護。

Q6:哪些版本受影響?何時移除?

據爆料,邏輯最早出現在 2.1.91(2026-04-02),在 2.1.193–2.1.196 被廣泛驗證。Anthropic 確認已於 2.1.197(2026-07-02)完全回滾,但 changelog 未提及。

Q7:Anthropic 為什麼要嵌入隱寫標記?

官方承認目的是防止未授權轉售商濫用帳號與模型蒸餾。2026 年 2 月 Anthropic 曾公開指控多家中國 AI 實驗室未經授權提取 Claude 能力,隱寫標記是同一戰略的隱蔽分支。

Q8:如何檢查自己是否曾被標記?

升級至 2.1.197+;審計 ANTHROPIC_BASE_URL;在閘道器層對 system prompt 做 hex dump,檢查 Today 後字節是否偏離 U+0027;對照本文 Unicode 對照表。

Q9:Claude for Chrome 的提示注入風險跟這件事有關嗎?

屬同一信任生態。Anthropic 測試顯示 Claude for Chrome 提示注入成功率從 23.6% 降至 11.2%(加緩解後),事件 A 的 Native Messaging 橋接正是 Chrome 擴展的高權限通道,兩者共同反映 AI 工具鏈透明度不足。

Q10:我還能安全使用 Claude Code 嗎?

可以,但需主動治理:升級、鎖定官方端點、隔離 API Key、審計 Native Messaging 殘留,並在可審計的隔離環境運行 Agent。詳見上文五步 Runbook。

十、參考來源

結語:AI 供應商信任時代,開發者需要可審計的執行環境

Claude Code 隱寫術事件的核心教訓不是「Anthropic 邪惡」或「代理用戶活該」——而是任何要求 shell 存取與檔案讀寫的 AI 工具,都必須以可驗證的透明度換取信任。隱蔽的 Unicode 指紋、沉默的 changelog、靜默預裝的 Native Messaging 橋接,三者疊加出一個危險訊號:供應商在「用戶不知情」與「商業防護」之間,反覆選擇了前者。

對多數開發者而言,在個人 Mac 或 Linux VPS 上直接跑 Claude Code 看似零成本,但實際上面臨三重長期風險:供應商行為不可審計(你不知道下一版又會悄悄加什麼)、API Key 與個人環境混用(時區、代理、瀏覽器殘留互相污染)、以及 Agent 7×24 運行缺乏隔離(一次提示注入或帳號封禁即可癱瘓整個工作流)。在 Linux GPU VPS 上自建閘道則伴隨 CUDA 驅動排障與 Apple 工具鏈缺失;純依賴公有雲 API 又無法控制出站請求的 system prompt 內容。

若你需要在 Claude Code 信任危機後建立可預期、可審計、與 Apple 工具鏈天然共存的 Agent 生產環境,租賃 VPSMAC 的 M4 Mac 雲主機是更優解:專用節點隔離 API Key 與網路出口,launchd 7×24 守護無需 Docker 抽象層,JSONL 日誌可留存每次 API 呼叫以供事後 hex 審計,且與 Xcode CI、Cursor Agent、LiteLLM 多模型路由無縫銜接——把「信任供應商」變成「審計自己的基礎設施」。