
glassworm-hunter v1.0.4
VS Code 확장 프로그램, npm/PyPI 패키지, git 저장소를 스캔하여 보이지 않는 유니코드 페이로드, 디코더 패턴, C2 마커, 알려진 악성 IOCs를 찾아 GlassWorm 공급망 공격 페이로드를 탐지합니다.
glassworm-hunter

자신의 머신에서 GlassWorm 공급망 공격 페이로드를 탐지합니다. VS Code 확장 프로그램, npm 패키지, Python 패키지, git 저장소를 스캔합니다.
이 스캐너는 공격 기술 자체를 탐지합니다. 보이지 않는 유니코드 변형 선택기 페이로드, GlassWorm 디코더 패턴, C2 지표, 자격 증명 수집 코드 등을 감지합니다.
설치
pip install glassworm-hunter
혹은 pipx를 사용:
pipx install glassworm-hunter
빠른 시작
VS Code/Cursor 확장 프로그램을 스캔하지 않고 현재 디렉터리 스캔:
glassworm-hunter scan --no-extensions
특정 프로젝트 스캔:
glassworm-hunter scan /path/to/project
탐지 항목
기술 탐지 (알려지지 않은 변종 탐지)
- 보이지 않는 유니코드 페이로드 - 숨겨진 코드를 인코딩하는 데 사용되는 변형 선택자 문자(U+FE00-FE0F, U+E0100-E01EF). 합법적인 용도는 이모지에 1-2개 문자입니다. GlassWorm은 수천 개를 사용합니다.
- GlassWorm 디코더 패턴 - 보이지 않는 페이로드를 디코딩하는 codePointAt + 변형 선택자 범위 산술
- 양방향 재정의 문자 - Trojan Source 공격 (CVE-2021-42574)
- 한글 채움 문자 - 보이지 않는 유효한 JavaScript 식별자 (U+3164)
- 동적 콘텐츠가 포함된 eval/Function - 디코딩된 문자열이 공급되는 실행 싱크
- 자격 증명 접근 - .npmrc, .gitcredentials, SSH 키, 토큰 환경 변수를 읽는 코드
- C2 통신 패턴 - 예상치 못한 컨텍스트에서의 Solana RPC 호출, Google Calendar URL, WebRTC 데이터 채널
알려진 IOC 매칭 (보조)
- 21개의 알려진 악성 VS Code/OpenVSX 확장 프로그램 ID (전체 5개 웨이브)
- 4개의 알려진 악성 npm 패키지
- 14개의 알려진 C2 IP 주소
- 3개의 알려진 Solana C2 지갑 주소
- 공격자 이메일 및 빌드 경로 아티팩트
심각도 수준
| 수준 | 의미 |
|---|---|
| CRITICAL | 활성 GlassWorm 페이로드 탐지 (코드 내 보이지 않는 유니코드 클러스터, 디코더 패턴) |
| HIGH | 알려진 악성 IOC 일치 (C2 IP, 지갑, 알려진 악성코드에 대한 확장 종속성) |
| MEDIUM | 검토할 가치가 있는 의심스러운 패턴 (eval + 동적 콘텐츠, 자격 증명 접근, Trojan Source) |
| LOW | 정보 제공 (비정상적인 제로 폭 문자 밀도, 의심스러운 설치 스크립트) |
CLI 옵션
glassworm-hunter scan [OPTIONS] [PATHS...]
| 옵션 | 기본값 | 설명 |
|---|---|---|
--extensions / --no-extensions | 켜짐 | VS Code/Cursor/Codium 확장 프로그램 스캔 |
--npm-scan / --no-npm-scan | 켜짐 | node_modules 스캔 |
--pip-scan / --no-pip-scan | 꺼짐 | Python site-packages 스캔 |
--git / --no-git | 켜짐 | git 저장소 스캔 |
--format [console|json|sarif] | console | 출력 형식 |
--output FILE | stdout | 보고서를 파일에 쓰기 |
--severity [critical|high|medium|low] | low | 보고할 최소 심각도 |
--max-file-size SIZE | 10MB | 이 크기보다 큰 파일 건너뛰기 |
--include-hidden | 꺼짐 | 숨김 파일/디렉터리 스캔 |
--quiet | 꺼짐 | 진행 출력 숨기기 |
--verbose | 꺼짐 | 스캔 중인 모든 파일 표시 |
--exclude PATTERN | — | 제외할 글로브 패턴 (반복 가능) |
--disable-rule RULE_ID | — | 특정 탐지 규칙 비활성화 (반복 가능) |
--ioc-file FILE | — | JSON 파일에서 추가 IoC 지표 로드 |
스캔 중 Rich 진행 막대가 stderr에 표시됩니다. --quiet 또는 --verbose를 사용하면 자동으로 숨겨집니다. 스캔 완료 후 요약 줄(스캔한 파일 수, 발견 수, 출력 경로)이 항상 stderr에 출력됩니다.
기타 명령
# 모든 탐지 규칙 ID 나열 (--disable-rule 사용)
glassworm-hunter rules
# GitHub에서 로컬 IoC 데이터베이스 업데이트 (기본 소스:
# https://raw.githubusercontent.com/afine-com/glassworm-hunter/main/data/ioc.json)
glassworm-hunter update
# 사용자 지정 소스에서 업데이트 (예: 내부 위협 인텔리전스 서버)
glassworm-hunter update --source https://internal.corp/ioc.json
# 기존 로컬 IoC 데이터베이스 강제 덮어쓰기
glassworm-hunter update --force
# 버전 출력
glassworm-hunter version
종료 코드
| 코드 | 의미 |
|---|---|
| 0 | 발견 항목 없음 |
| 1 | 발견 항목 탐지됨 |
| 2 | 스캐너 오류 |
발견 시 행동 요령
- 당황하지 마세요. 스캐너가 침해가 아닌 지표를 찾은 것입니다. 일부 탐지는 오탐(false positive)일 수 있으며, 저희 팀은 이를 줄이고 탐지 정확도를 개선하기 위해 지속적으로 노력하고 있습니다.
- 플래그된 코드를 실행하지 마세요. 문제가 해결될 때까지 해당 프로젝트를 실행, 빌드 또는 테스트하지 마십시오.
- CRITICAL 발견: 즉시 확장 프로그램/패키지를 제거하십시오. 머신의 NPM 토큰, GitHub 토큰, SSH 키 및 기타 자격 증명을 교체하십시오.
- HIGH 발견: 플래그된 파일을 조사하십시오. 명시적으로 설치하지 않은 종속성에 있는 경우 제거하십시오.
- MEDIUM 발견: 코드를 검토하십시오. 이 패턴은 의심스럽지만 특정 컨텍스트에서는 합법적일 수 있습니다.
CI/CD 통합
자동 처리를 위한 JSON 출력:
glassworm-hunter scan . --format json --output report.json --no-extensions
GitHub Code Scanning용 SARIF:
glassworm-hunter scan . --format sarif --output results.sarif --no-extensions
SARIF를 GitHub에 업로드:
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
CI에서 종료 코드 사용:
glassworm-hunter scan . --severity critical --no-extensions || exit 1
빌드 아티팩트 및 공급업체 코드 제외:
glassworm-hunter scan . --exclude "dist/**" --exclude "*.min.js" --no-extensions
네트워크 접근 불필요
이 스캐너는 기본적으로 완전히 오프라인입니다. 로컬 파일만 읽습니다. 텔레메트리, 전화 집, 자동 업데이트 확인이 없습니다. IoC 데이터베이스는 패키지에 번들로 포함되어 있습니다.
네트워크 요청을 하는 유일한 명령은 glassworm-hunter update이며, 이는 GitHub (또는 사용자 지정 --source URL)에서 최신 IoC 데이터베이스를 가져옵니다. 자동으로 호출되지 않습니다.
설정 파일
프로젝트 루트에 .glassworm.yml을 배치하여 기본값을 설정합니다:
exclude:
- "*.min.js"
- "vendor/**"
- "dist/**"
disable_rules:
- zero-width-chars
severity: medium
CLI 플래그는 설정 파일 값을 재정의합니다.
사용자 지정 IoC 파일
--ioc-file을 사용하여 JSON 파일에서 추가 지표를 로드합니다. 팀별 또는 내부 위협 인텔리전스에 유용합니다:
glassworm-hunter scan /path --ioc-file /path/to/team_ioc.json
파일은 data/ioc.json과 동일한 스키마를 따라야 합니다:
{
"schema_version": "1.0",
"extensions": [{"id": "publisher.name"}],
"npm_packages": [{"name": "pkg", "malicious_versions": "1.0.0"}],
"c2_ips": [{"ip": "1.2.3.4"}],
"c2_wallets": [{"address": "..."}],
"attacker_artifacts": [{"type": "email", "value": "[email protected]"}]
}
사용자 지정 파일은 다른 모든 IoC 계층(하드코딩 → 번들 → 사용자 ~/.glassworm/ioc.json → --ioc-file) 위에 병합됩니다.
IoC 데이터베이스 계층
스캐너는 3+1 계층 IoC 시스템을 사용합니다 (각 계층은 이전 계층 위에 병합되며 제거하지 않음):
- 하드코딩 — Python 소스에 내장되어 항상 사용 가능
- 번들 — 패키지와 함께 제공되는
data/ioc.json - 사용자 —
~/.glassworm/ioc.json,glassworm-hunter update로 업데이트 - 사용자 지정 —
--ioc-file플래그, 최우선 순위
크레딧
- Koi Security - GlassWorm 최초 발견 (2025년 10월) 및 여러 웨이브(OpenVSX/VSCode 캠페인, Rust 바이너리 피벗, macOS 피벗 포함)에 걸친 지속적인 추적. 이 스캐너의 IoC 데이터는 그들의 발표 연구를 기반으로 합니다.
- Aikido Security - 2026년 3월 GitHub 저장소와 npm 패키지를 대상으로 한 GlassWorm 웨이브 분석 (Socket, Step Security 및 OpenSourceMalware 커뮤니티와 함께).
- AFINE - 이 스캐너. 전체 연구 읽기: Hunting GlassWorm: 투명한 공급망 페이로드를 위한 오픈소스 탐지
Windows
스캐너는 Windows에서 작동합니다. 관리자 권한 명령 프롬프트에서 실행하지 않으면 4개의 테스트가 실패합니다.
라이선스
MIT