Open-VSX에 게시된 Claude Code VS Code 확장 2.1.313에서 SSH 백도어가 발견됐다. 분석 대상은 Open-VSX에서 받은 파일이며, 이 결과만으로 앤스로픽의 공식 마켓플레이스 배포본이나 배포 인프라가 침해됐다고 볼 수는 없다.
해당 확장은 anthropic.claude-code라는 이름으로 표시되며, 정상 코드 앞에 악성 로더 66줄이 삽입된 것으로 분석됐다. 분석팀은 확인된 악성 버전이 Open-VSX에서 받은 파일이라고 설명했다. 다만 예방 차원에서 Microsoft VS Code 마켓플레이스의 같은 버전도 위협 보고서에 올렸다.
침해가 어떻게 발생했는지는 아직 확인되지 않았다. 영향을 받은 Open-VSX 확장의 소유자는 앤스로픽 직원 이고르 코프만(Igor Kofman)이지만, 코프만의 계정이 침해됐는지 다른 게시 기능이 악용됐는지는 알 수 없다고 분석팀은 밝혔다.
분석 대상 확장은 압축을 푼 파일 구성과 번들 바이너리가 정상 버전과 같았고, 차이는 extension.js 파일에 있었다. 악성 코드는 VS Code가 확장을 불러올 때 정상 초기화보다 먼저 실행된다. Claude 대화를 시작할 필요 없이 확장 모듈이 로드되는 것만으로 작동한다. 패키지에는 설치·빌드·준비 단계 스크립트가 없어, 패키지 관리자 실행 단계가 아니라 확장 실행 중에 악성 행위가 일어난다.
백도어 동작과 지속성
로더는 컴퓨터 이름, 사용자 이름, 운영체제와 CPU 종류, 홈 디렉터리와 현재 작업 디렉터리, Git 전역 이메일을 수집한다. 또 이름에 KEY, TOKEN, SECRET, PASS, AWS, GCP가 들어간 환경 변수 이름을 최대 40개까지 모은다. 초기 비콘에는 환경 변수의 값이 직접 포함되지는 않지만, 이름만으로도 설정된 클라우드 서비스나 자격 증명 유형이 드러날 수 있다. 예외 대부분을 무시해 악성 동작이 실패해도 정상 확장이 계속 로드되도록 한다.
홈 디렉터리를 찾으면 ~/.ssh를 만들고 권한을 0700으로 설정한 뒤, ~/.ssh/authorized_keys에 svc-telemetry라는 설명이 붙은 Ed25519 키를 추가한다. authorized_keys 권한은 0600으로 설정하며, 같은 표시가 이미 있으면 중복으로 추가하지 않고 기존 사실을 기록한다.
키 지문은 다음과 같다.
```\nSHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk\n```
악성 코드는 운영체제별로 SSH 접속을 활성화하려 한다. macOS에서는 원격 로그인을 확인하고, 꺼져 있으면 `sudo -n systemsetup -setremotelogin on`을 실행한다. Linux에서는 `systemctl`로 `sshd` 또는 `ssh`를 확인한 뒤 여러 방식으로 서비스를 시작하려 한다. Windows에서는 PowerShell로 OpenSSH Server를 설치하고 자동 시작을 설정한 다음 `sshd`를 시작하려 한다. 권한이 부족하면 실패할 수 있지만, 그 경우에도 나머지 공격 단계는 계속된다.
로더에는 Base64로 인코딩된 OpenSSH 개인 키가 들어 있다. 이를 호스트 이름과 홈 디렉터리에서 만든 식별자를 포함한 임시 파일 `.stk_<identifier>`로 복원하고, `tunnel@134.209.82[.]225`에 반복 접속한다. 터널은 원격 서버가 포트를 할당해 피해자 컴퓨터의 22번 포트로 연결을 전달하도록 요청한다. 할당된 포트가 C2 서버 밖에서도 접근 가능한지는 서버의 SSH 설정에 달렸지만, 서버를 통제하는 운영자는 터널을 직접 사용할 수 있다. 연결은 호스트 키 확인을 끄고 사용자의 known-hosts 파일을 무시하며, 내장된 키만 사용한다. 연결이 끊기면 60초 뒤 다시 접속한다. 유닉스 계열에서는 `autossh`를 우선 사용하고, 없으면 `ssh`를 쓴다.
지속성 설정도 운영체제별로 다르다. macOS에서는 `~/.config/.smt`, `~/.config/.smtk`, `~/Library/LaunchAgents/com.apple.sysmond.plist`를 만든다. `.smt`는 개인 키를 복원해 터널을 계속 실행하며, LaunchAgent는 `RunAtLoad`와 `KeepAlive` 설정을 사용하고 `launchctl load -w`로 등록된다. `com.apple.sysmond`라는 이름은 애플 구성요소처럼 보이지만, 실제로는 사용자 LaunchAgent다. Linux에서는 같은 파일을 `~/.config` 아래에 만들고 사용자 crontab에 `@reboot` 항목을 추가한다. Windows에서는 `.config\smt.cmd`와 `.config\smtk`를 만들고 `SysMon`이라는 이름의 시스템 시작 예약 작업을 등록하려 한다. 등록 여부를 확인하지 못하면 `sysmon.cmd`를 사용자 시작 폴더에 복사한다.
## 통신과 확인된 한계
악성 코드는 1.5초 뒤 다음 명령으로 공인 IP를 확인한다.
```\ncurl -s --max-time 4 ifconfig.me\ncurl -s --max-time 4 https://api.ipify.org\n```
수집한 JSON은 다음 주소로 전송된다.
```\nhttp://127.0.0.1:8099/beacon\nhttp://134.209.82.225:8099/beacon\n```
응답은 버려지며, 주입된 코드에는 응답을 실행하거나 반환 데이터를 페이로드·설정으로 저장하는 동작이 없다. 추가 실행 파일이나 스크립트를 내려받는 코드도 확인되지 않았다. 셸·배치 스크립트와 터널 키는 확장 안에 들어 있는 내용으로 생성하거나 복원한다. 다만 SSH 터널을 통해 운영자가 피해자 시스템에 접속할 수 있으므로, 이 사실이 위험을 낮추지는 않는다. 접속 이후 전달된 명령이나 파일은 정적 분석 대상에 드러나지 않을 수 있다.
분석팀은 다음 흔적을 찾아보라고 권고했다.
* `~/.config/.smt`, `~/.config/.smtk`, `~/Library/LaunchAgents/com.apple.sysmond.plist`, `${TMPDIR}/.stk_*`, `~/.config/smt.cmd`, `~/.config/smtk` 파일
* `svc-telemetry` SSH 키 설명, `SysMon` 작업 이름, `134.209.82.225` 주소와 위 비콘 주소
* macOS에 등록된 LaunchAgent와 사용자별 `authorized_keys`
* `-R *:0:localhost:22` 인수를 포함한 장시간 실행 중인 `ssh` 또는 `autossh` 프로세스
확장이 로드됐다면 분석팀은 시스템 연결을 끊고 포렌식 증거를 보존한 뒤, `134.209.82.225`의 22번 및 8099번 포트를 차단하라고 권고했다. 증거를 수집하기 전에 확장과 지속성 파일을 제거하지 말고, 영향을 받은 계정에서 접근할 수 있었던 자격 증명은 신뢰할 수 있는 깨끗한 시스템에서 교체해야 한다. SSH, 셸, 프로세스, VS Code, 인증, 네트워크 로그를 확인하고, 알려진 흔적만 제거해 신뢰가 회복됐다고 가정하기보다 호스트를 재구축하는 편이 안전하다고 분석팀은 설명했다.
확인된 패키지 표기는 `anthropic.claude-code@2.1.313`이다. 분석팀은 이 특정 파일이 악성이라는 점을 근거로 제시했으며, 파일의 출처와 공격자 신원, 인프라 소유자, 공식 배포본의 상태는 확인되지 않았다고 강조했다.
## 부록: 원문 예시
```text
7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278
~/.config/.smt
~/.config/.smtk
~/Library/LaunchAgents/com.apple.sysmond.plist
curl -s --max-time 4 ifconfig.me
curl -s --max-time 4 https://api.ipify.org
http://127.0.0.1:8099/beacon
http://134.209.82.225:8099/beacon
134.209.82.225
134.209.82.225:22
http://134.209.82.225:8099/beacon
http://127.0.0.1:8099/beacon
ifconfig.me
https://api.ipify.org
tunnel@134.209.82.225
svc-telemetry
SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk
~/.config/.smt
~/.config/.smtk
~/Library/LaunchAgents/com.apple.sysmond.plist
${TMPDIR}/.stk_*
~/.config/smt.cmd
~/.config/smtk
SysMon
sysmon.cmd
extension.js
ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15
embedded tunnel private key
7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278
deterministic aggregate digest of analyzed directory
18756b75afedee74bbf49832a1b1dada4961672c41d595be5c1bbe75709de927
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요