GitLab, 광범위한 NPM 공급망 공격 발견

1 week ago 4

  • npm 생태계 전반에서 파괴적 악성코드 변종이 확산 중이며, GitLab 보안팀이 이를 탐지
  • 악성코드는 Shai-Hulud의 진화된 형태로, 감염된 개발자의 다른 패키지까지 자동 감염시키는 웜형 전파 구조
  • GitHub·AWS·GCP·Azure 등에서 자격 증명 탈취 후, 공격자 제어 GitHub 저장소로 데이터 유출
  • GitHub 및 npm 접근이 동시에 차단되면 사용자 데이터를 즉시 삭제하는 ‘데드맨 스위치’ 내장
  • GitLab은 자사 시스템이 감염되지 않았음을 확인했으며, Dependency ScanningGitLab 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 토큰을 이용해 피해자의 모든 패키지를 감염
    1. 원본 패키지 다운로드
    2. setup_bun.js를 preinstall 스크립트로 삽입
    3. bun_environment.js 페이로드 추가
    4. 버전 번호 증가
    5. 감염된 패키지를 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차 피해 방지를 목표로 함

Read Entire Article