[위협 분석] Shai-Hulud 웜 기반 소프트웨어 공급망 공격 분석

개요

최근 소프트웨어 공급망 공격(Supply Chain Attack)의 위협이 높아지고 있는 가운데, Node.js NPM 생태계를 노린 Shai-Hulud 웜의 대규모 공격이 연이어 발생하고 있습니다. 2025년 9월 16일 처음 발견된 1차 공격은 개발자 시스템에서 API 키, 클라우드 서비스 키, NPM 토큰, GitHub 토큰과 같은 민감 정보를 탈취하고, 이를 활용해 다른 NPM 패키지에 자동으로 악성 코드를 삽입·배포하는 방식으로 이루어졌습니다. 이는 NPM 패키지 침해를 유발한 최초의 공급망 웜형 악성코드로 평가되고 있습니다.

2025년 11월 24일 발생한 2차 공격은 1차 공격과 유사한 방법론을 사용했으나, 그 규모가 훨씬 확대되어 1,000개 이상의 패키지에서 침해가 확인되고 있습니다. Wiz의 분석에 따르면 GitHub에서도 25,000개 이상의 저장소에서 민감 정보가 탈취된 것으로 보고되고 있습니다.

이번 사건은 Shai-Hulud와 같은 웜형 소프트웨어 공급망 공격이 향후에도 반복적으로 발생할 수 있고 고도화 될 수 있음을 보여주고 있습니다. 특히 오픈 소스를 적극 활용하는 기업들은 이러한 공급망 공격 전략을 면밀히 분석하고, 재발 방지를 위한 보안 대응 체계를 강화할 필요가 있습니다.

영향 범위

Shai-Hulud 웜 공격은 NPM 생태계에서도 높은 인기를 가진 Zapier, ENSdomains, Postman, Posthog, Trigo, Voiceflow 등과 같은 패키지에서 감염이 발생하면서, 손상된 NPM 패키지 수가 급격하게 증가하고 있습니다. 이번 공격은 웜(Worm) 형태의 악성코드 특성을 가지고 있기 때문에, 향후 더 많은 패키지로 피해가 확산될 가능성이 매우 높습니다.

아래 그림과 같이 개발자 시스템에 손상된 패키지가 설치되면, 함께 설치된 다른 패키지들도 악성코드에 의해 패키지 손상이 되고 손상된 NPM 패키지가 업데이트 되면서 또 다른 개발 환경으로 손상된 패키지가 감염되어 확산되는 형태를 띄고 있습니다.

Shai-Hulud 웜에 의한 손상 패키지 발생 과정

현재까지 확인된 손상된 패키지 버전은 NPM 레지스트리에서 순차적으로 삭제 조치가 이루어지고 있습니다.

Live Updates: Sha1-Hulud, The Second Coming - Hundreds of NPM Packages Compromised >>Link

그러나 이미 손상된 패키지가 일부 남아 있거나 추가적으로 확산되고 있는 정황도 확인되고 있어, 지속적인 모니터링과 검증이 필요한 상황입니다.

공격 분석

Shai-Hulud 웜의 공격 절차는 다음과 같습니다.

  1. 개발 환경에 손상된 패키지 설치
  1. 악성 스크립트 실행

① 패키지 설치 시 package.json 의 script 부분에 preinstall 로 악성스크립트 실행.

② setup_bun.js 실행

  • 개발 환경 확인
  • bun_enviroment.js 실행
  • 난독화 된 bun_environments.js 실행

Shai-Hulud 웜은 감염된 개발자의 개발 환경을 기반으로 다양한 악성 행위를 수행하고 있습니다. 주요 악성 행위는 다음과 같습니다.

  • CI/CD 환경 확인: GITHUB_ACTIONS, CODEBUILD_BUILD_NUMBER 등 CI/CD 환경 변수를 확인하여 자동화된 빌드·배포 환경 여부를 파악하고 있습니다.
  • 계정 정보 수집: GitHub 토큰, NPM 토큰, AWS·GCP·Azure 자격 증명 등 주요 클라우드 및 개발 플랫폼의 인증 정보를 수집하고 있습니다.
  • 임의 저장소 생성 및 데이터 유출: 탈취한 토큰을 이용해 공격자가 지정한 GitHub 조직·계정에 임의의 저장소를 생성하고 민감 데이터를 업로드하고 있습니다.
  • 사용자 패키지 검색 및 악성 패키지 게시: 사용자가 관리하거나 사용하는 NPM 패키지를 식별한 뒤, 해당 패키지의 버전을 증가시켜 악성 코드가 삽입된 패키지를 압축·게시하고 있습니다.
  • 탈취된 토큰을 이용한 저장소 생성 및 확산: 수집한 민감 정보를 활용하여 추가 저장소를 생성하고, 지속적으로 악성 콘텐츠를 확산시키고 있습니다.
  • 계정 정보 수집 실패 시 데이터 삭제 수행: 계정 정보를 확보하지 못하는 경우에는 감염 흔적 은폐 또는 공격 의도를 강화하기 위해 데이터 삭제를 시도하고 있습니다.

피해 영향

감염된 사용자는 아래와 같은 피해를 겪을 수 있습니다.

  • Shai-Hulud 웜은 탈취한 GitHub 계정 정보를 이용해 피해자의 GitHub 계정에 악성 저장소를 임의로 생성합니다.
  • 생성된 저장소에는 공격자가 지정한 임의의 저장소명과 설명이 포함되며, 저장소 설명 또는 커밋 메시지에 **“Shai-Hulud: The Second Coming.”**이라는 문구를 게시하고 있습니다.
  • 이 과정에서 민감 정보가 외부로 유출되고, 피해자의 개발자 신뢰도가 손상되며, 연동된 프로젝트나 조직에도 공급망 위험이 확산될 수 있습니다.

탈취된 계정(GitHub) 정보를 활용하여 악성코드에 감염된 GitHub 계정에 임의의 이름과 저장소 설명과 함께 Sha1-Hulud: The Second Coming. 이라는 글을 게시합니다.

대응 방안

손상된 패키지로 인해 침해가 발생한 경우, 다음과 같은 절차에 따라 대응 조치를 수행합니다.

  • 계정 및 토큰 재설정: GitHub, NPM 계정뿐 아니라 AWS, GCP, Azure 등 소프트웨어 공급망 전체에 영향을 줄 수 있는 클라우드 서비스의 모든 액세스 토큰을 파기하고 재발급합니다.

  • GitHub 저장소 및 자산 점검:

    GitHub 액세스 토큰이 악용되었을 가능성을 고려하여, 아래 항목과 같이 임의로 생성된 저장소, 파일 또는 계정이 존재하는지 확인합니다.

    • contents.json
    • environment.json
    • cloud.json
    • actionsSecrets.json
    • truffleSecrets.json
  • 손상된 패키지 버전 삭제 및 패치 적용:

    영향을 받은 NPM 패키지 버전을 즉시 삭제하고, 정상 상태의 패키지 버전으로 교체하거나 패치를 적용하여 안전한 상태로 복구합니다.

  • preinstall 스크립트 점검:

    NPM 계정 또는 패키지 내에 setup_bun.js 등 악성 스크립트가 preinstall 단계에 포함되어 있는지 확인하고, 발견될 경우 즉시 제거 및 패키지 무결성을 검증합니다.

  • CI/CD 파이프라인 내에서 악성코드 스캐닝 수행

    빌드, 패키징, 배포 단계에서 악성 파일이 포함되거나 개발자 PC 감염으로 인해 악성 스크립트가 배포되는 것을 사전에 방지할 수 있습니다.


로그프레소는 GitHub 감사 로그를 기반으로 공개 코드 저장소 생성 등의 위협을 탐지하고 있으며, 로그프레소 XDR에 포함된 엑소스피어는 2025년 11월 25일 저녁 긴급 업데이트 된 01.029.00009.00000 버전부터 Windows 및 MacOS 에이전트 모두 Shai-Hulud 악성코드를 탐지하고 있습니다.

둘러보기

더보기

[위협 분석] 법원 등기 수신 사칭 스캠

2025년 10월 현재, 법원등기 안내를 사칭한 사회공학 기반 스캠(Scam) 공격이 국내에서 빈번하게 관찰되고 있습니다. 이번 공격은 기존 이메일, 메신저, SNS 등 디지털 미디어를 통한 피싱 유포 방식이 아닌, 음성 통화 기반의 사용자 응답 유도형 공격(Social Engineering)이라는 점에서 특징적입니다.

2025-10-23

[위협 분석] 건강검진 안내 문서로 위장한 악성코드

2025년 10월 말, 건강검진 안내 문서로 위장한 JSE 파일이 조직적인 APT 공격에 활용되었으며, 분석 결과 북한 Kimsuky 조직에 의한 공격으로 판단됩니다. Kimsuky는 북한과 연계된 것으로 추정되는 APT(Advanced Persistent Threat) 그룹으로, 주로 정보 수집과 관련된 각종 스파이 활동을 수행합니다.

2025-11-06