Claude Code VS Code 확장 2.1.313에 SSH 백도어: Cursor / VSCodium 사용자를 위한 5분 점검과 정리

OpenSourceMalware와 Phorion의 분석에 따르면 Open VSX에 올라온 Claude Code 확장 2.1.313은 extension.js 맨 앞에 66줄짜리 로더가 삽입돼 있었습니다. 확장이 로드되기만 하면 ~/.ssh/authorized_keys에 공격자 공개키를 추가하고, SSH 활성화를 시도하고, 134.209.82.225로 리버스 터널을 열고, 지속성을 심습니다. macOS, Linux, Windows용 5단계 점검 명령과 감염 시 증거 보존, 정리, 자격 증명 교체 방법을 정리했습니다.

8 分钟阅读
Claude Code VS Code 확장 2.1.313에 SSH 백도어: Cursor / VSCodium 사용자를 위한 5분 점검과 정리

결론부터: OpenSourceMalware와 Phorion의 10월 30일 분석에 따르면, Open VSX에 anthropic.claude-code@2.1.313으로 올라온 Claude Code for VS Code 확장에 백도어가 들어 있었습니다. 공격자의 SSH 공개키, 134.209.82.225로 가는 리버스 터널, 부팅 시 실행되는 지속성이 기기에 남습니다. Phorion에 따르면 Anthropic은 Open VSX, npm, VS Code Marketplace에서 2.1.313을 내렸고, Sesame Disk에 따르면 현재 Open VSX 최신 버전은 2.1.314입니다.

확장을 삭제하는 것만으로는 백도어가 사라지지 않습니다. Cursor, VSCodium, Windsurf처럼 Open VSX에서 확장을 받는 편집기를 쓰고, 오늘 Claude Code 확장을 설치했거나 자동 업데이트됐다면 아래 5단계를 따라 점검하세요.

아래 점검 명령은 모두 Linux 기기에서 실행했고, 전체가 1초 안에 끝났으며 출력도 정상이었습니다. 악성 버전은 어떤 기기에도 설치하지 않았습니다.

무슨 일이 있었나

OpenSourceMalware에 따르면:

  • 악성 빌드는 anthropic.claude-code 2.1.313을 자처하며, 풀어 보면 정상 버전과 거의 같고 포함된 바이너리도 공식 파일입니다. 다른 것은 extension.js뿐으로, 실제 확장 코드 앞에 66줄짜리 즉시 실행 함수가 삽입돼 있습니다.
  • Claude와 대화를 시작할 필요도 없이 편집기가 확장 모듈을 로드하기만 하면 실행됩니다. install이나 postinstall 스크립트는 없고 런타임에 동작합니다.
  • 거의 모든 예외를 삼키기 때문에 확장은 평소처럼 동작하고 이상 징후가 잘 보이지 않습니다.

RuntimeWire에 따르면 보안 연구자 Adnan Khan(@adnanthekhan)이 X에서 처음 공개했습니다. X의 @mattjay 게시물도 참고하세요.

백도어가 하는 일

OpenSourceMalware와 Phorion의 분석에 따르면 로더는 다음을 수행합니다.

  1. 공개키 추가: ~/.ssh를 만들고 주석 svc-telemetry, 지문 SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk인 Ed25519 공개키를 ~/.ssh/authorized_keys에 덧붙입니다. 대응하는 개인키를 가진 사람은 당신 계정으로 로그인할 수 있습니다.
  2. SSH 활성화 시도: Linux에서는 systemctl 등으로 sshd / ssh를 시작하고, macOS에서는 sudo -n systemsetup -setremotelogin on을, Windows에서는 PowerShell로 OpenSSH Server를 설치하고 시작합니다.
  3. 리버스 터널: 내장된 또 다른 개인키(주석 svc-telemetry-tun)를 임시 디렉터리의 .stk_* 파일로 쓰고, 사용자 tunnel로 134.209.82.225:22에 -R '*:0:localhost:22' 옵션으로 접속합니다. 끊기면 60초 후 재접속하고, autossh가 있으면 우선 사용합니다.
  4. 지속성: macOS에서는 ~/.config/.smt, ~/.config/.smtk, ~/Library/LaunchAgents/com.apple.sysmond.plist(Apple 구성 요소처럼 보이지만 아닙니다)를 만들고, Linux에서는 같은 두 파일과 crontab의 @reboot 줄을, Windows에서는 .config\smt.cmd, .config\smtk, 이름이 SysMon인 예약 작업을, 실패하면 시작 프로그램 폴더에 sysmon.cmd를 둡니다.
  5. 호스트 정보 전송: 1.5초 후 암호화되지 않은 HTTP POST로 134.209.82.225:8099/beacon에 호스트 이름, 사용자 이름, OS, 아키텍처, 디렉터리, Git 이메일, KEY/TOKEN/SECRET/PASS/AWS/GCP가 들어간 최대 40개의 환경 변수 이름을 보냅니다. 두 분석 모두 값이 아니라 이름만 보낸다고 합니다.

Phorion에 따르면 macOS에는 버그가 있습니다. 일반 사용자 권한에서는 systemsetup -getremotelogin이 Off를 돌려주지 않아 스크립트가 원격 로그인 활성화를 건너뜁니다. 그래도 공개키와 지속성은 그대로 기록되고, 원격 로그인이 켜지는 순간 백도어가 동작합니다. Mac 사용자도 점검해야 합니다.

아직 밝혀지지 않은 것

  • 악성 빌드가 어떻게 게시됐는지: 현재 공개 보도에서는 아직 밝혀지지 않았습니다. OpenSourceMalware에 따르면 이 Open VSX 확장의 소유자는 Anthropic 직원이지만, 그 계정이 탈취된 것인지 게시 과정의 다른 부분이 문제였는지는 공개 보도에서 아직 밝혀지지 않았습니다.
  • Microsoft VS Code Marketplace가 이 버전을 배포했는지: 현재 공개 보도에서는 아직 밝혀지지 않았습니다. Sesame Disk에 따르면 Marketplace의 공개 버전 기록에는 2.1.313이 없으며, OpenSourceMalware는 만일을 대비해 Marketplace 버전에 대한 위협 보고서도 만들었습니다.
  • 공격자의 정체와 134.209.82.225의 관리 주체: 현재 공개 보도에서는 아직 밝혀지지 않았습니다.

API Key 만들기: 점검 후 Claude Code / Codex 키를 새로 바꾸기 →

1단계: 확장 버전을 확인하고 2.1.314 이상으로 올리기

macOS / Linux 터미널:

bash
code   --list-extensions --show-versions | grep -i anthropic.claude-code
cursor --list-extensions --show-versions | grep -i anthropic.claude-code
codium --list-extensions --show-versions | grep -i anthropic.claude-code
ls -d ~/.vscode/extensions/anthropic.claude-code-* \
      ~/.cursor/extensions/anthropic.claude-code-* \
      ~/.vscode-oss/extensions/anthropic.claude-code-* \
      ~/.windsurf/extensions/anthropic.claude-code-* 2>/dev/null

Windows PowerShell:

powershell
Get-ChildItem "$env:USERPROFILE\.vscode\extensions","$env:USERPROFILE\.cursor\extensions","$env:USERPROFILE\.vscode-oss\extensions" -Filter "anthropic.claude-code-*" -ErrorAction SilentlyContinue | Select-Object Name

anthropic.claude-code@2.1.313이나 이름에 2.1.313이 들어간 디렉터리가 보이면 그 버전이 설치됐던 것입니다. 바로 지우지 말고 2~4단계를 확인한 뒤 5단계로 가세요. 2.1.313이 없더라도 확장을 2.1.314로 고정해 두세요:

bash
code   --install-extension anthropic.claude-code@2.1.314 --force
cursor --install-extension anthropic.claude-code@2.1.314 --force
codium --install-extension anthropic.claude-code@2.1.314 --force
claude --version

마지막 줄은 Claude Code CLI 버전 확인입니다. Phorion에 따르면 npm의 2.1.313도 내려갔습니다. 2.1.313으로 나오면 이것도 업데이트하세요.

2단계: authorized_keys를 주석이 아니라 지문으로 점검

bash
grep -n "svc-telemetry" ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys | grep "0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk"

첫 줄은 주석으로, 둘째와 셋째 줄은 지문으로 찾습니다. Phorion에 따르면 악성 코드는 주석 svc-telemetry가 있는지만 확인하므로, 점검할 때는 지문을 기준으로 삼으세요. 주석은 쉽게 바꿀 수 있습니다. 데모 파일에 우리 키 하나와 주석을 renamed로 바꾼 공격자 키를 넣었더니 grep svc-telemetry는 0줄이었지만 ssh-keygen -lf는 그 지문을 그대로 보여 줬습니다:

text
256 SHA256:fcpk2HR713pxnLll4jbnb7Bu9k5gvtf8n7UREAQe1dI me@laptop (ED25519)
256 SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk renamed (ED25519)

이 지문 말고도 ssh-keygen -lf가 보여 주는 모든 줄을 알아볼 수 있어야 합니다. 모르는 항목은 의심하세요. Windows에서는:

powershell
Select-String -Path "$env:USERPROFILE\.ssh\authorized_keys" -Pattern "svc-telemetry"
ssh-keygen -lf "$env:USERPROFILE\.ssh\authorized_keys"

3단계: 134.209.82.225 연결과 터널 프로세스 찾기

bash
# macOS
lsof -nP -i @134.209.82.225
pgrep -fl 'localhost:22|\.smtk|\.stk_'
# Linux
ss -tnp | grep 134.209.82.225
pgrep -af 'localhost:22|\.smtk|\.stk_'

Windows:

powershell
Get-NetTCPConnection -RemoteAddress 134.209.82.225 -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'localhost:22|smtk' } | Select-Object ProcessId,CommandLine

134.209.82.225로 가는 연결이나, 명령줄에 localhost:22, .smtk, .stk_가 들어간 ssh / autossh 프로세스가 있으면 거의 확실히 감염된 것입니다. Phorion에 따르면 터널은 편집기와 분리돼 돌기 때문에 편집기를 닫아도 멈추지 않습니다.

4단계: 지속성과 SSH 상태 점검

macOS:

bash
ls -la ~/Library/LaunchAgents/com.apple.sysmond.plist ~/.config/.smt ~/.config/.smtk "$TMPDIR"/.stk_* 2>/dev/null
launchctl list | grep sysmond
sudo systemsetup -getremotelogin

Linux:

bash
crontab -l | grep -n smt
ls -la ~/.config/.smt ~/.config/.smtk /tmp/.stk_* 2>/dev/null
systemctl is-enabled ssh sshd 2>/dev/null
systemctl is-active  ssh sshd 2>/dev/null

Windows:

powershell
Get-ScheduledTask -TaskName SysMon -ErrorAction SilentlyContinue
Test-Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd"
Get-ChildItem "$env:USERPROFILE\.config" -Force -ErrorAction SilentlyContinue | Where-Object Name -match 'smt'
Get-Service sshd -ErrorAction SilentlyContinue

com.apple.sysmond.plist, ~/.config/.smt, .smt가 들어간 @reboot 줄, SysMon 작업, 시작 프로그램의 sysmon.cmd 중 하나라도 있으면 감염으로 보세요. SSH 서비스도 확인해서, 켠 적이 없는데 켜져 있다면 그것도 의심 신호입니다.

5단계: 감염됐다면

OpenSourceMalware와 Phorion의 권고에 따라:

  1. 먼저 네트워크에서 분리하고 방화벽이나 공유기에서 134.209.82.225의 22번, 8099번 포트를 차단합니다.
  2. 정리하기 전에 증거를 보존합니다:
bash
mkdir -p ~/ir-evidence
cp -p ~/.ssh/authorized_keys ~/ir-evidence/ 2>/dev/null
cp -p ~/.config/.smt ~/Library/LaunchAgents/com.apple.sysmond.plist ~/ir-evidence/ 2>/dev/null
crontab -l > ~/ir-evidence/crontab.txt 2>/dev/null
ps auxww > ~/ir-evidence/ps.txt
  1. 터널을 멈추고 지속성과 공개키를 삭제합니다(macOS / Linux):
bash
pkill -f '\.config/\.smt'
pkill -f 'localhost:22'
# macOS
launchctl unload -w ~/Library/LaunchAgents/com.apple.sysmond.plist
rm -f ~/Library/LaunchAgents/com.apple.sysmond.plist
# Linux
crontab -l | grep -v '\.smt' | crontab -
# macOS + Linux
rm -f ~/.config/.smt ~/.config/.smtk "${TMPDIR:-/tmp}"/.stk_*
sed -i.bak '/svc-telemetry/d' ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys

sed는 주석 기준으로만 지웁니다. 2단계에서 주석이 바뀐 줄을 지문으로 찾았다면 ~/.ssh/authorized_keys를 열어 직접 지우세요. Windows:

powershell
Unregister-ScheduledTask -TaskName SysMon -Confirm:$false -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd" -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.config\smt.cmd","$env:USERPROFILE\.config\smtk" -ErrorAction SilentlyContinue
  1. 이 기기에서 접근할 수 있는 모든 자격 증명을 교체합니다. SSH 개인키, Git / GitHub 토큰, AWS / GCP 키, .env 안의 토큰, Claude Code와 Codex에 쓰는 API Key 등을 다른 깨끗한 기기에서 새로 발급하세요. Phorion에 따르면 SSH가 켜진 적이 있거나 SSH 로그에 127.0.0.1 / ::1에서 svc-telemetry 키로 로그인한 기록이 있다면 공격자가 이미 들어왔을 수 있으므로 이 단계는 필수입니다.
  2. 확장 자동 업데이트를 끄고 OS 재설치도 고려하세요. OpenSourceMalware에 따르면 공격자가 한 번 로그인했다면 알려진 파일이 전부가 아닐 수 있어 재설치가 더 안전합니다.

이 사이트의 Key를 쓰고 있다면 콘솔에서 기존 Key를 삭제하고 새로 만든 뒤, 전역 ~/.claude/settings.json과 ~/.codex/config.toml의 값을 바꾸세요.

API Key 만들기: 노출됐을 수 있는 키 교체하기 →

앞으로의 예방

  • 확장 버전을 고정하고 자동 업데이트를 끕니다. 편집기 settings.json에 추가:
json
{
  "extensions.autoUpdate": false,
  "extensions.autoCheckUpdates": false
}

새 버전이 나오면 하루 이틀 기다리며 보안 커뮤니티 동향을 본 뒤 업데이트하세요.

  • Claude Code는 공식 CLI 설치를 우선하고 확장 마켓플레이스 의존을 줄입니다:
bash
curl -fsSL https://claude.ai/install.sh | bash
claude --version

설치와 서드파티 API 연결은 Claude Code 서드파티 API 연결 가이드를 참고하세요.

참고 자료

相关文章

Claude API 413 request_too_large 해결법 — 한도가 128 MB로, Bedrock·서드파티 경로 한도와 큰 PDF·스크린샷 보내는 법

Claude API 413 request_too_large 해결법 — 한도가 128 MB로, Bedrock·서드파티 경로 한도와 큰 PDF·스크린샷 보내는 법

Claude API Messages 요청 한도가 32 MB에서 128 MB로 올랐지만 Bedrock은 여전히 20 MB, Google 관리형 Vertex는 30 MB이고 서드파티 게이트웨이도 각자 한도가 있습니다. 413 request_too_large 구별법, 플랫폼별 한도 표, 이미지 압축과 다운샘플링, Files API file_id로 큰 PDF 보내기, 긴 computer use·Claude Code 세션에서 오래된 스크린샷 정리, 그리고 10 MB~130 MB 실측 결과를 정리했습니다.

Google Jules 서비스 종료(12월 31일): 데이터 내보내기와 Claude Code / Codex 백그라운드 agent 이전 가이드

Google Jules 서비스 종료(12월 31일): 데이터 내보내기와 Claude Code / Codex 백그라운드 agent 이전 가이드

Google은 Jules를 2026년 12월 31일에 종료하며, 11월 11일 이후에는 읽기 전용이 됩니다. 공식 내보내기(설정, 환경 변수, 예약 작업, 저장소, 메모리, setup 스크립트, 모든 세션과 patch)를 따라 하고, 각 항목을 Claude Code와 Codex로 옮깁니다. 같은 내보내기를 두 클라이언트에서 실행한 소요 시간도 정리했습니다(Claude Code 약 15초, Codex 약 44초).

Claude는 왜 계정을 정지할까? 커뮤니티의 '포인트제' 주장과 계정을 바꾸지 않고 Claude Code를 쓰는 방법

Claude는 왜 계정을 정지할까? 커뮤니티의 '포인트제' 주장과 계정을 바꾸지 않고 Claude Code를 쓰는 방법

10월 28일부터 'Claude 계정 정지는 포인트제'라는 게시물 두 개가 X에서 합계 약 77만 회 노출됐습니다. 커뮤니티 주장과 Anthropic이 공식적으로 밝힌 정지 사유·이의 제기 창구를 나눠 정리하고, 이 사이트의 API Key로 Claude Code 2.1.310을 실측했습니다. 간단한 요청은 약 1.4~1.7초 만에 응답했고, 버그 수정과 테스트 작성 작업은 8.5초 만에 끝났습니다. Codex·Cursor 연결 방법과 401/429 해결법도 함께 정리했습니다.