Shai-Hulud Worm 2.0에 대응하기: npm 공급망 침해에 대한 Elastic의 업데이트된 대응

속편은 누구나 좋아하죠, 그렇지 않나요? 11월 24일 월요일부터 소프트웨어 개발 커뮤니티는 Shai-Hulud Worm이 돌아와 2.0으로 업데이트되었다는 소식에 대응하고 있습니다. 커뮤니티는 대응 모드에 들어갔으며, Elastic도 예외는 아닙니다. Elastic 제품은 Node Package Manager(npm)를 포함하여 제공하지 않지만, 다른 많은 소프트웨어와 마찬가지로 Elastic의 소프트웨어는 빌드 중 npmjs.com 패키지 레지스트리에서 패키지를 가져오기 위해 npm을 사용합니다.
이 블로그에서는 계속 증가하는 침해된 패키지로 인한 위협을 모니터링하고 완화하기 위해 Elastic이 취한 조치를 살펴봅니다. 또한 이번 Shai-Hulud의 새 변종에 맞춘 예방 및 탐지 규칙, 헌트 쿼리 및 권장 사항을 공유합니다.
진화한 위협 이해하기: Shai-Hulud 2.0
npm 에코시스템의 방대한 규모는 악의적인 활동의 주요 표적이 되게 합니다. 2025년 11월에는 GitHub 리포지토리 설명에 사용된 캠페인 표식 때문에 Shai-Hulud: The Second Coming이라고 불리는 악성 npm 웜의 새 변종이 2025년 9월의 초기 공격 이후 등장했으며, 현재 활발히 데이터를 유출하고 있습니다. 이 변종은 AsyncAPI, Zapier, PostHog 및 Postman의 인기 프로젝트를 포함한 수백 개의 패키지를 침해했습니다.
초기 변종과의 유사점은 npm 패키지가 자체 복제 멀웨어에 감염된다는 점입니다. 하지만 Shai-Hulud 2.0은 setup_bun.js 파일을 사용해 bun을 설치한 후, 악성 코드가 포함된 bun_environment.js를 실행하는 데 이를 사용한다는 점에서 첫 번째 변종과 다릅니다. 이후 임의의 이름을 가진 GitHub 리포지토리를 생성하여 탈취한 데이터를 유출합니다. 이때 흔히 한 피해자의 데이터를 관련이 없는 별도 피해자와 연결된 리포지토리에 게시하며, 이를 “교차 피해자 유출”이라고 합니다. 새로 생성된 GitHub 리포지토리에는 Sha1-Hulud: The Second Coming이라는 설명이 포함됩니다.
결국 자체 리포지토리만 검색해서는 환경에서 유출된 데이터를 발견하지 못할 수 있습니다. 또한 Shai-Hulud는 더 이상 20개의 npm 패키지를 감염시키는 데 그치지 않습니다. 이제 최대 100개의 npm 패키지를 감염시키며, GitHub 또는 npm 자격 증명을 사용해 인증할 수 없으면 사용자의 홈 디렉터리를 삭제합니다.
Elastic의 대응
초기 Shai-Hulud 인시던트 이후 구현한 교훈과 메커니즘을 활용하여 Elastic은 즉각적이고 포괄적인 방어 조치를 배포할 수 있었습니다.
종속성 인벤토리: Elastic은 소프트웨어 구성 분석(SCA) 도구를 사용하여 제품을 지속적으로 스캔합니다. 이를 통해 어떤 패키지가 어디에 사용되는지 신속하게 파악할 수 있었습니다.
위협 인텔리전스: 여러 위협 인텔리전스 피드를 사용하여 증가하는 악성 패키지 목록을 종속성 인벤토리와 대조하고 경보를 트리거했습니다.
npmjs 모범 사례 및 제한: 9월의 Shai-Hulud 1 이후 Elastic 팀은 Trusted Publisher로 이전해 계속 게시할 수 있도록 했습니다. 남아 있던 토큰은 모두 해지하여 장기 토큰을 사용한 게시 기능을 차단했습니다.
종속성 최소 출시 경과 기간: Elastic은 자동화에 최소 패키지 출시 경과 기간(대기 기간)을 구현하여, 새 패키지 버전이 14일간 제공된 후에만 자동으로 가져오도록 했습니다.
엔드포인트 스캔 구현: Elastic Agent용 OSQuery 통합을 사용하여 Elastic 노트북에 설치된 알려진 침해 npm 패키지를 지속적으로 스캔하도록 구현했습니다.
즉시 사용 가능한(OOTB) 탐지 규칙 실행: Elastic Security Labs는 침해된 패키지를 설치하고 실행하는 시스템을 식별하는 데 도움이 되는 즉시 사용 가능한 Elastic Security 탐지 규칙을 이미 제공합니다. 자체 위협 헌트에 사용할 수 있는 아래 보호 조치에 대한 자세한 정보를 포함했습니다.
Elastic 개발자에게 알림: Elastic 개발자에게 진행 중인 조사에 대해 알리고 새 npm 패키지를 업데이트하거나 설치하지 못하도록 권고문을 발송했습니다.
The Second Coming이 더 가까이 다가오다
파트너 Entro를 통해 Elastic은 Elastic의 지속적 통합(CI) 파이프라인이 Shai-Hulud 2.0 멀웨어를 실행하고 데이터를 공개 GitHub 리포지토리에 게시했다는 사실을 알게 되었습니다. 이 파이프라인은 GitOps에 사용되며, 특히 Elastic Cloud용 오케스트레이터입니다. Elastic Cloud 시스템이나 Elastic 고객에게 미친 영향은 없었습니다. 원인은 전이 종속성으로 밝혀졌습니다. 신속한 대응과 엔지니어링 팀과의 조율을 통해 잠재적으로 악용되기 전에 위협을 억제하고 해결할 수 있었습니다.
신속한 억제 및 해결
식별된 모든 Elastic GitHub 리포지토리에서 멀웨어가 포함된 오픈 소스 종속성 제거
멀웨어가 실행될 수 있는 파이프라인 또는 수동 프로세스 식별
영향을 받은 CI 실행 및 사용자 식별
이러한 실행에서 사용할 수 있는 시크릿 식별
모든 비임시 시크릿 교체
고객 영향이 없음을 확인
GitHub는 다음 네 파일이 포함된 Elastic에서 추출한 데이터가 노출된 리포지토리를 신속하게 삭제했습니다.
데이터가 포함되지 않은 cloud.json
CI 러너의 세부 정보와 관련 없는 GitHub 사용자 및 해당 사용자의 GitHub 토큰이 포함된 contents.json
오탐으로 식별된 시크릿이 포함된 truffleSecrets.json
빌드에 사용된 시크릿을 포함하여 CI 러너와 연결된 환경 변수가 포함된 environment.json참고: Elastic은 이러한 시크릿이 해지되었음을 확인했습니다.
Elastic 시크릿이 Elastic 외부에서 사용되었다는 증거는 없습니다.
웜이 Elastic npm 패키지로 확산되었다는 증거는 없습니다.
이 파이프라인은 Elastic 제품과 관련이 없습니다.
Elastic 고객에게 미친 영향은 없습니다.
헌팅 쿼리
Elastic Security 고객에게도 자체 환경에서 잠재적 침해를 헌팅할 것을 권장합니다. 다음 KQL 쿼리를 사용하여 이 공급망 침해와 관련된 행위를 식별할 수 있습니다.
// IOC for the Github Self-Hosted Actions runner name
process.name:Runner.Listener and process.command_line:*SHA1HULUD*
// IOC - node/bun executing bun_environment.js
process.name:(node or bun) and process.args:*bun_environment.js
// credentials discovery using trufflehog from node/bun or node_modules related working directory
process.name:("trufflehog" or "trufflehog.exe") and process.args:"filesystem" and process.args:"--json" and (process.parent.name : (node or bun or node.exe or bun.exe) or process.working_directory:*node_modules*)
// curl used to download GH actions runner to victim machine
process.name:(curl or or curl.exe or powershell.exe or wget or wget.exe) and process.command_line:*github.com/actions/runner/releases/download*
//docker escape via mounting the host file system and executing bash commands to tamper with the host file system
process.name:docker and process.args :("--privileged" and run) and process.args :"-v" and process.args :/\:/* and process.args :(bash or sh or cp)일치 항목 예시:


즉시 사용 가능한(OOTB) Elastic 탐지
다음 즉시 사용 가능한 탐지 및 예방 규칙도 Shai-Hulud Worm 2.0 활동에 대한 업데이트된 탐지 범위를 제공합니다.
의심스러운 웹 서비스에 대한 비정상적인 네트워크 연결 (탐지 엔진)
일반적으로 악용되는 웹 서비스에 대한 연결 (탐지 엔진)
DPAPI 마스터 키 검색 가능성 (Elastic Defend)
Windows 자격 증명 관리자 저장소 검색 가능성 (Elastic Defend)
서명되지 않은 프로세스를 통한 웹 브라우저 자격 증명 액세스 (Elastic Defend)
브라우저 정보 검색 가능성 (Elastic Defend)
서명되지 않았거나 신뢰할 수 없는 프로세스에 의한 웹 브라우저 자격 증명 데이터 액세스 (Elastic Defend)
Node.js를 통해 생성된 Curl 또는 Wget (탐지 엔진)
- TruffleHog 실행을 통한 자격 증명 액세스 (탐지 엔진)
보안에 대한 약속
보안은 Elastic의 개발 수명 주기와 운영 프로세스의 근간입니다. 새로운 Shai-Hulud Worm은 글로벌 소프트웨어 공급망을 겨냥한 사이버 위협이 지속적이고 빠르게 진화한다는 사실을 보여 줍니다. Elastic 환경에서 발생한 이번 인시던트는 보안 팀의 효율성과 신속한 대응의 중요성을 입증합니다. Elastic은 다음 사항을 계속 실천하겠습니다.
지속적인 모니터링: 시스템 및 네트워크에 대한 침해 징후를 감지하기 위해 연중무휴 24시간 모니터링을 유지합니다.
신속한 대응: 보안팀이 새로운 위협에 신속하고 효과적으로 대응할 준비가 되어 있도록 합니다.
투명성: 보안 인시던트와 완화 노력에 대해 사용자 및 커뮤니티와 공개적으로 소통합니다.
새로운 정보를 계속 모니터링하겠습니다. 이번 이벤트에 대해 더 많은 정보를 파악하는 대로 이 게시물을 업데이트하겠습니다. Elastic이 환경 보안에 어떤 도움을 드릴 수 있는지 자세히 알아보려면 보안 솔루션 페이지를 방문하세요.
이 게시물에서 설명된 모든 기능이나 성능의 출시와 일정은 Elastic의 단독 재량에 따라 결정됩니다. 현재 제공되지 않는 기능이나 성능은 예정된 시간에 출시되지 않을 수도 있으며 아예 제공되지 않을 수도 있습니다.