GlassWorm의 Solana C2: 공급망 괴물이 블록체인을 Dead Drop으로 만든 방법
Source: Dev.to
위에 제공된 Source 링크 아래에 번역하고자 하는 전체 텍스트를 붙여 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다.
(코드 블록이나 URL, 마크다운 형식은 그대로 유지됩니다.)
GlassWorm 공급망 공격 개요
공급망 공격은 새로운 것이 아니지만, GlassWorm은 이 규모에서는 본 적 없는 방식을 사용하고 있습니다: Solana 블록체인 자체를 명령·제어(C2) 인프라로 무기화하여—그 C2를 사실상 차단할 수 없게 만들면서 해당 블록체인 위에서 개발하는 개발자들을 직접 표적으로 삼고 있습니다.
- 타임라인: 2026년 1월 – 3월
- 영향: GitHub, npm, VSCode, OpenVSX 전반에 걸쳐 433개 이상의 손상된 구성 요소
- 목표: 암호화폐 지갑 데이터, SSH 키, 개발자 자격 증명 탈취
- C2 채널: Solana 블록체인상의 트랜잭션 메모.
GlassWorm 작동 방식
- 초기 침해 – 공격자는 GitHub 자격 증명(예: 크리덴셜 스터핑이나 토큰 탈취)을 확보합니다.
- 악성 커밋 – 정상적인 것처럼 보이는 커밋(문서 수정, 버전 업데이트, 작은 리팩터링)을 강제 푸시합니다.
Aikido의 보안 연구원은 이러한 “커버” 커밋을 생성하는 데 LLM이 사용되어 각 프로젝트의 코딩 스타일에 맞춘다고 의심합니다.
침해된 자산
| 카테고리 | 침해된 항목 수 |
|---|---|
| GitHub의 Python 저장소 | 200개 이상 |
| GitHub의 JavaScript/TypeScript 저장소 | 151개 이상 |
| VSCode/OpenVSX 확장(린터, AI 어시스턴트, 포매터 흉내) | 72개 |
| 악성 종속성을 포함한 npm 패키지 | 10개 이상 |
VSCode 확장 악용 – 최신 파동은 package.json의 extensionPack 및 extensionDependencies를 이용합니다. 처음에는 깨끗한 확장이 검토를 통과하지만, 이후 업데이트를 통해 GlassWorm과 연결된 패키지를 종속성으로 끌어들입니다—‘신뢰된’ 확장 자체의 코드 변경은 필요하지 않습니다.
보이지 않는 유니코드 페이로드
// 에디터에 보이는 내용:
const config = require('./utils');
// 실제로 존재하는 내용(따옴표 사이에 보이지 않는 유니코드):
const config = require('./utils\u200B\u200B\u200B...[encoded payload]');
보이지 않는 유니코드 문자들은 로더를 인코딩하고 있으며, 실행 시 두 번째 단계 스크립트를 가져와 실행합니다.
블록체인 기반 C2
Instead of hard‑coding C2 server addresses (which defenders can block), GlassWorm queries a Solana wallet’s transaction memo field every 5 seconds. The C2 address is embedded as a memo in regular Solana transactions.
┌─────────────────────────────────────────────┐
│ Infected Machine │
│ │
│ 1. Query Solana RPC for wallet txns │
│ 2. Parse memo field → extract C2 URL │
│ 3. Download Node.js runtime │
│ 4. Execute JS‑based info stealer │
│ │
│ Stolen: wallet keys, SSH keys, tokens, │
│ credentials, env variables │
└─────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Solana Blockchain (C2 Infrastructure) │
│ │
│ Wallet: [attacker address] │
│ Memo: encrypted C2 URL │
│ │
│ - Immutable, uncensorable │
│ - 50+ URL rotations since Nov 2025 │
│ - New wallet addresses to evade detection │
└─────────────────────────────────────────────┘
Research findings (Step Security, Nov 2025 – Mar 2026): 50 memo transactions updating the payload URL; the attacker rotates both C2 URLs and Solana wallet addresses to evade detection.
왜 Solana인가?
- Low transaction costs – memo transactions cost fractions of a cent.
- High throughput – polling every 5 seconds is trivial on Solana’s network.
- Censorship resistance – you can’t “take down” a blockchain transaction; the C2 address lives forever on‑chain.
DeFi 개발자 생태계에 미치는 영향
GlassWorm는 특히 DeFi 툴링을 구축하는 개발자를 표적으로 삼습니다:
- 손상된 GitHub 토큰을 사용해 다른 저장소에 악성 변경을 강제 푸시합니다.
- DeFi 프로토콜 SDK, 인기 있는 Solidity 라이브러리, 혹은 Anchor 프로그램 템플릿을 유지 관리한다면, 여러분의 저장소가 하위 사용자를 위한 공격 벡터가 됩니다.
수집되는 데이터는 다음과 같습니다:
- 암호화폐 지갑 시드 구문 및 개인 키
- 브라우저 확장 지갑 데이터 (MetaMask, Phantom 등)
- RPC 엔드포인트와 배포자 키를 포함한
.env파일 - 서버 접근에 사용되는 SSH 키
DeFi 개발자에게 발생할 수 있는 잠재적 결과:
- 금고 지갑의 자금 고갈
- 배포 키 손상
- 무단 계약 업그레이드
- 사용자 자금 도난
Solana 개발자들이 블록체인을 정기적으로 조회하기 때문에, 악성코드의 C2 트래픽이 정상적인 RPC 호출과 섞여 네트워크 기반 탐지를 매우 어렵게 만듭니다.
즉시 확인 가능한 침해 지표
# Search for GlassWorm marker variable
grep -r "lzcdrtfxyqiplpd" ~/projects/
# Check for persistence file
ls -la ~/init.json
# Look for unexpected Node.js installations
ls -d ~/node-v22* 2>/dev/null
# Inspect recent Git commits for date anomalies
# (committer date much newer than author date)
git log --format="%H %ai %ci" | awk '{
split($2,a,"-"); split($5,b,"-");
if (b[1]*10000+b[2]*100+b[3] > a[1]*10000+a[2]*100+a[3]+7)
print "SUSPICIOUS: "$1
}'
방어 권고 사항
환경 강화
- GitHub Vigilant Mode 활성화 – 서명되지 않은 커밋이 시각적으로 명확해집니다.
- npm audit 서명 사용으로 패키지 출처를 검증합니다.
- VSCode 확장 프로그램을 분기별로 검토 – 적극적으로 사용하지 않는 것은 제거합니다.
- 개발 머신의
.env파일에 개인 키나 시드 구문을 절대 저장하지 마세요. - 프로토콜 자금을 제어하는 모든 키에 하드웨어 지갑 사용.
공급망 강화
- 모든 의존성을 정확한 버전과 무결성 해시(
npm ci+package-lock.json)로 고정합니다. - 재현 가능한 빌드와 서명된 아티팩트를 채택합니다.
- 소스 파일에서 보이지 않는 유니코드 문자를 자동으로 스캔하도록 구현합니다.
추가 권고 사항
- Socket.dev 또는 Aikido를 사용하여 실시간 종속성 스캔 수행.
- CI/CD에 StepSecurity Harden‑Runner를 구현하여 비정상적인 네트워크 호출을 감지.
- 모든 기여자에게 커밋 서명(GPG 또는 SSH) 요구.
- 개발 머신과 배포 인프라를 분리 – npm 패키지를 설치하는 머신에 배포자 키를 보관하지 말 것.
- 블록체인 기반 C2 감시:
# Monitor Solana wallet for suspicious memo transactions
# (useful for threat‑intelligence teams)
from solders.pubkey import Pubkey
from solana.rpc.api import Client
KNOWN_GLASSWORM_WALLETS = [
# Add known attacker wallets from threat‑intel feeds
]
client = Client("https://api.mainnet-beta.solana.com")
for wallet in KNOWN_GLASSWORM_WALLETS:
pubkey = Pubkey.from_string(wallet)
txns = client.get_signatures_for_address(pubkey)
for sig in txns.value:
tx = client.get_transaction(sig.signature)
# Parse memo instructions for C2 URLs
# Alert on new transactions
GlassWorm은 블록체인을 C2로 악용한 최초의 악성코드는 아니지만, 규모 면에서 가장 성공적이다. 이전 사례로는 EtherHiding(2023, BNB 체인) 및 다양한 비트코인 기반 드롭이 있다.
GlassWorm을 차별화하는 요소는?
| 속성 | 세부 정보 |
|---|---|
| 규모 | 한 달에 4개 플랫폼에서 433개 이상의 손상된 구성 요소 |
| 자기 전파 | 도난당한 토큰이 자동으로 공격 표면을 확대 |
| 대상 | 암호화/블록체인 작업을 하는 개발자를 특별히 겨냥 |
| 지속성 | LLM이 생성한 위장 커밋으로 탐지가 매우 어려움 |
이는 블록체인 커뮤니티에게 불편한 질문을 제기합니다: 자신의 인프라를 무기로 사용하는 공격에 어떻게 방어할 수 있나요?
- 모든 패키지와 확장에 대한 코드 서명 및 출처 확인.
- 설치된 패키지가 접근할 수 있는 범위를 제한하는 샌드박스 개발 환경.
- 개발 도구에서 발생하는 예상치 못한 블록체인 RPC 호출을 표시하는 행동 모니터링.
- 실제 재정적 위험이 있는 키를 위한 하드웨어 보안 모듈.
Risk Matrix
| Risk | Impact | Mitigation |
|---|---|---|
| 손상된 npm/VSCode 패키지 | 자격 증명 도난, 지갑 고갈 | 의존성 고정, 서명 검증, Socket.dev 사용 |
| GitHub 계정 탈취 | 신뢰된 저장소에 악성 코드 | 커밋 서명 강제, 2FA 활성화 + 경계 모드 |
| Solana 기반 C2 | 차단 불가능한 명령 인프라 | 엔드포인트 탐지, 행동 모니터링 |
| LLM 생성 커버 커밋 | 코드 리뷰 회피 | 자동 커밋 분석, PR 리뷰 요구 |
| 도난당한 배포자 키 | 프로토콜 손상 | 하드웨어 지갑, 에어갭 배포 |
마무리 생각
GlassWorm은 차세대 공급망 공격이 단순히 블록체인 개발자를 표적으로 삼는 것이 아니라 블록체인 자체를 공격 인프라로 활용할 것임을 보여줍니다. 탈중앙화 시스템을 회복력 있게 만드는 동일한 특성(불변성, 검열 저항성, 허가 없는 접근)도 공격자들에게 매력적으로 작용합니다.
최선의 방어는 개발 환경이 적대적이라고 가정하고 그에 맞게 보안 계층을 구축하는 것입니다:
- 서명을 위한 하드웨어 지갑.
- 빌드를 위한 샌드박스 환경.
- 의존성에 대한 검증된 출처.
- 절대로, 절대
npm install을 실행하는 머신에 배포자 키를 보관하지 마세요.
이 글은 진행 중인 DeFi 보안 연구 시리즈의 일부입니다. 스마트 계약 취약점, 감사 도구, 보안 모범 사례에 대한 주간 심층 분석을 팔로우하세요.