무슨 일이 일어났나
2026년 1월 30일, Open VSX Registry에서 악성코드가 삽입된 VS Code 확장 4개가 발견되었습니다. 문제의 확장은 FTP/SFTP/SSH Sync Tool, I18n Tools, vscode mindmap, scss to css입니다. 이 중 3개는 2월 2일까지 레지스트리에 남아 있다가 제거되었고, 그 사이 총 22,000건 이상의 다운로드가 발생했습니다.
공격자는 정상 개발자의 퍼블리싱 토큰 또는 계정 자체를 탈취한 뒤, 기존 확장의 업데이트 형태로 악성 코드를 주입했습니다. 사용자 입장에서는 이미 신뢰하던 확장이 업데이트된 것처럼 보이기 때문에 의심 없이 설치하게 됩니다. Socket 보안팀의 연구원 Kirill Boychenko가 이 공격을 최초로 발견하고 분석 결과를 공개했습니다.
GlassWorm은 무엇을 하는가
GlassWorm은 이번 공격에 사용된 악성코드의 이름입니다. 확장이 설치되면 런타임에 암호화된 페이로드(payload, 실제 악성 동작을 수행하는 코드)를 복호화한 뒤 실행합니다. 정적 분석 도구로는 암호화된 상태의 코드를 탐지하기 어렵습니다.
특히 주목할 점은 EtherHiding 기법의 사용입니다. EtherHiding은 C2(Command & Control) 서버의 주소를 이더리움 블록체인 트랜잭션에 숨기는 방식입니다. 쉽게 말하면, 악성코드가 명령을 받을 서버 주소를 암호화폐 블록체인에 기록해 두고, 필요할 때 꺼내 쓰는 것입니다. 블록체인 데이터는 삭제할 수 없으므로 보안팀이 C2 주소를 차단해도 공격자가 새 주소를 블록체인에 기록하면 악성코드는 바로 새 주소로 전환합니다.
GlassWorm이 탈취하는 데이터의 범위는 광범위합니다.
- 브라우저 자격증명: 저장된 비밀번호, 세션 쿠키
- 암호화폐 지갑: Electrum, Exodus, Atomic Wallet
- macOS 환경: iCloud Keychain, Safari 쿠키
- 개발 환경 시크릿:
~/.aws(AWS 인증 정보),~/.ssh(SSH 키)
한 가지 특징적인 행동 패턴이 있습니다. GlassWorm은 시스템 언어가 러시아어로 설정된 환경에서는 스스로 비활성화됩니다. 이는 러시아 또는 CIS(독립국가연합) 지역 기반 공격 그룹에서 자주 관찰되는 패턴입니다.
왜 위험한가 — 공급망 공격의 특성
공급망 공격(supply chain attack)은 소프트웨어의 개발 또는 배포 과정 자체를 침해하는 공격입니다. 최종 사용자가 신뢰하는 공식 배포 채널을 통해 악성코드가 전달되기 때문에 일반적인 보안 경계를 우회합니다.
이번 사건이 특히 위험한 이유는 개발자 도구가 공격 벡터라는 점입니다. VS Code 확장은 파일 시스템 접근, 네트워크 통신, 터미널 실행 등 광범위한 권한을 가질 수 있습니다. 개발자의 머신에는 프로덕션 환경의 인증 정보, SSH 키, API 토큰이 저장되어 있는 경우가 많아 하나의 확장이 침해되면 연쇄적으로 인프라 전체가 위험해질 수 있습니다.
자동 업데이트 메커니즘도 문제를 키웁니다. 한 번 설치한 확장이 자동으로 업데이트되면, 공격자가 악성 버전을 배포하는 순간 기존 사용자 전체에게 악성코드가 전달됩니다. 사용자가 별도로 행동하지 않아도 감염이 진행되는 구조입니다.
공급망 공격의 규모는 빠르게 증가하고 있습니다. 2020년 이후 소프트웨어 공급망 공격 건수는 약 4배 증가했으며, npm, PyPI, Open VSX 같은 패키지 레지스트리가 주요 타겟이 되고 있습니다.
지금 할 수 있는 대응법
1. 설치 여부 확인 및 제거
VS Code에서 확장 목록을 열고 다음 확장이 설치되어 있는지 확인합니다.
- FTP/SFTP/SSH Sync Tool
- I18n Tools
- vscode mindmap
- scss to css
설치되어 있다면 즉시 수동으로 제거하고, ~/.vscode/extensions 디렉터리에서 관련 파일이 완전히 삭제되었는지 확인합니다.
2. 자격증명 로테이션
해당 확장을 설치한 적이 있다면 다음 자격증명을 즉시 교체해야 합니다.
- AWS 액세스 키 (
~/.aws/credentials) - SSH 키 쌍 (새 키 생성 후 기존 키를 서버에서 제거)
- 브라우저에 저장된 비밀번호 (주요 서비스 우선)
- 암호화폐 지갑을 사용했다면 새 지갑으로 자산 이전
3. 확장 설치 전 퍼블리셔 검증
확장을 설치하기 전에 퍼블리셔의 신원을 확인합니다. 공식 웹사이트나 GitHub 저장소가 있는지, 다운로드 수와 리뷰가 충분한지 점검합니다. 최근 퍼블리셔가 변경되었거나 갑작스러운 업데이트가 있었다면 주의가 필요합니다.
4. 확장 권한 최소화
VS Code의 settings.json에서 확장의 네트워크 접근이나 파일 시스템 접근 범위를 제한할 수 있습니다. 필요하지 않은 확장에 과도한 권한을 부여하지 않도록 정기적으로 점검합니다. 조직 환경에서는 허용된 확장 목록을 관리하는 정책을 적용하는 것이 효과적입니다.
참고