-
npm 생태계 전반에서 파괴적 악성코드 변종이 확산 중이며, GitLab 보안팀이 이를 탐지
- 악성코드는 Shai-Hulud의 진화된 형태로, 감염된 개발자의 다른 패키지까지 자동 감염시키는 웜형 전파 구조
- GitHub·AWS·GCP·Azure 등에서 자격 증명 탈취 후, 공격자 제어 GitHub 저장소로 데이터 유출
- GitHub 및 npm 접근이 동시에 차단되면 사용자 데이터를 즉시 삭제하는 ‘데드맨 스위치’ 내장
- GitLab은 자사 시스템이 감염되지 않았음을 확인했으며, Dependency Scanning과 GitLab Duo Chat을 통한 탐지·대응 방안 제공
공격 개요
- GitLab Vulnerability Research 팀이 npm 생태계에서 대규모 공급망 공격을 탐지
- 내부 모니터링 시스템이 여러 감염된 패키지를 발견
- 악성코드는 Shai-Hulud의 변종으로 확인
- 악성코드는 웜형 전파를 통해 감염된 개발자의 다른 패키지까지 자동 감염
- GitLab은 자사에서 악성 패키지를 사용하지 않았음을 확인하고, 보안 커뮤니티와 정보를 공유
공격 내부 구조
- 내부 모니터링 시스템이 탐지한 악성 npm 패키지는 다음 기능을 수행
- GitHub, npm, AWS, GCP, Azure의 자격 증명 수집
- 탈취한 데이터를 공격자 제어 GitHub 저장소로 전송
- 피해자의 다른 패키지를 자동 감염
-
인프라 접근이 차단되면 파괴적 페이로드 실행
- 여러 감염 패키지가 확인되었으며, 조사가 계속 진행 중
기술 분석: 공격 진행 방식
초기 감염 벡터
- 악성코드는 다단계 로딩 과정을 통해 시스템에 침투
- 감염된 패키지의 package.json에 setup_bun.js 스크립트가 추가
- 겉보기에는 Bun JavaScript 런타임 설치용으로 위장
- 실제로는 bun_environment.js (10MB, 난독화된 페이로드)를 실행
- 작은 로더 파일과 대형 난독화 페이로드로 구성되어 탐지 회피
자격 증명 수집
- 실행 즉시 다양한 소스에서 토큰 및 비밀정보를 수집
-
GitHub 토큰(ghp_, gho_)
-
AWS, GCP, Azure 자격 증명
-
npm 토큰(.npmrc 및 환경 변수)
-
Trufflehog 도구를 이용해 홈 디렉터리 전체를 스캔, API 키·비밀번호·Git 기록 등 탐색
데이터 유출 네트워크
- 탈취한 GitHub 토큰으로 “Sha1-Hulud: The Second Coming.” 설명이 포함된 공개 저장소 생성
- 해당 저장소가 데이터 드롭박스 역할 수행
- GitHub Actions 러너를 설치해 지속성 확보
- 권한이 부족한 경우, 동일 마커를 가진 다른 저장소를 검색해 다른 시스템의 토큰 재활용
공급망 전파
- 탈취한 npm 토큰을 이용해 피해자의 모든 패키지를 감염
- 원본 패키지 다운로드
-
setup_bun.js를 preinstall 스크립트로 삽입
-
bun_environment.js 페이로드 추가
- 버전 번호 증가
- 감염된 패키지를 npm에 재배포
데드맨 스위치
- 악성코드는 GitHub(데이터 유출)과 npm(전파) 접근을 지속적으로 모니터링
- 두 채널 모두 차단되면 즉시 데이터 파괴 실행
-
Windows: 사용자 파일 삭제 및 디스크 섹터 덮어쓰기
-
Unix 계열: shred 명령으로 파일 덮어쓰기 후 삭제
- GitHub 저장소 일괄 삭제나 npm 토큰 대량 폐기 시, 감염된 시스템이 동시에 데이터 삭제를 수행할 위험 존재
침해 지표 (IoC)
- 주요 탐지 지표
- 파일: bun_environment.js (악성 post-install 스크립트)
- 디렉터리: .truffler-cache/, .truffler-cache/extract/
- 프로세스: del /F /Q /S "%USERPROFILE%*", shred -uvz -n 1, cipher /W:%USERPROFILE%
- 명령어: curl -fsSL https://bun.sh/install | bash, powershell -c "irm bun.sh/install.ps1|iex"
GitLab의 탐지 및 대응 지원
-
GitLab Ultimate 사용자는 내장 보안 기능으로 즉시 노출 여부 확인 가능
-
Dependency Scanning 활성화 시, package-lock.json 또는 yarn.lock 내 감염 패키지를 자동 탐지
- 감염 패키지가 포함된 머지 요청 시 경고 표시
-
GitLab Duo Chat과 연동해 빠른 질의 기반 탐지 가능
- 예: “Shai-Hulud v2 캠페인에 영향받은 종속성이 있는가?”
-
Security Analyst Agent가 프로젝트 취약점 데이터를 조회해 즉답 제공
- 여러 저장소를 관리하는 팀은 CI/CD 기반 자동 탐지와 에이전트 기반 신속 대응 병행 권장
향후 전망
- 이번 공격은 공격 인프라 보호를 위해 피해자 데이터 파괴를 이용하는 새로운 형태의 공급망 공격으로 평가
- GitLab은 커뮤니티와 협력해 안전한 복구 전략을 개발 중이며, 자동 탐지 시스템으로 변종을 지속 모니터링
- 조기 정보 공유를 통해 데드맨 스위치로 인한 2차 피해 방지를 목표로 함