자바스크립트 생태계 덮친 샤이 훌루드… npm 통해 자율 확산

| 김민준 기자

자바스크립트 개발 생태계를 정조준한 악성코드 '샤이 훌루드(Shai Hulud)'가 진화하면서 소프트웨어 공급망 공격의 수준이 한층 고도화된 것으로 드러났다. 최신 분석에 따르면 이 악성코드는 기존의 개별 패키지 침투 수준을 넘어 개발자를 무의식적이고 지속적인 감염의 매개체로 만들어, 자동으로 확산되는 체계를 갖췄다.

보안 전문 기업 익스펠(Expel)이 공개한 보고서에 따르면, 최근 변종 샤이 훌루드는 개발자 환경을 자동으로 감염시키고, 이들이 관리하는 npm 레지스트리를 경유해 재확산되는 구조를 갖추고 있다. 이 악성코드는 설치 단계에서 바이러스를 심어놓은 npm 패키지를 실행하면서 두 단계에 걸쳐 감염 절차를 진행한다. 먼저 대상이 되는 환경에 '번(Bun)' 자바스크립트 런타임이 설치돼 있지 않을 경우 자동으로 이를 깔고, 이후에는 복잡하게 난독화된 페이로드를 통해 백그라운드에서 크리덴셜 탈취, 데이터 유출 및 재감염을 유도한다.

특히 이번 변종은 크리덴셜 수집 방식이 정교하다. AWS 시크릿 매니저, 마이크로소프트 애저 키볼트, 구글 클라우드 시크릿 매니저 등 주요 클라우드 인프라의 시크릿 관리 시스템에 직접 접근해 민감 데이터를 추가로 추출하는 방식이 사용됐다. 로컬 시스템 자체에서도 NPM 게시 토큰, GitHub 인증 정보, 그리고 클라우드 키까지 모조리 수집하는 것으로 확인됐다. 이 과정에서 사용된 도구는 TruffleHog로, 이는 소스코드, 설정 파일, Git 기록 등에서 하드코딩된 비밀 정보를 자동으로 탐색하는 툴이다.

샤이 훌루드의 가장 특징적인 전술은 GitHub 인프라의 악용이다. 기존 악성코드가 명령제어(C2) 서버와 연동되는 방식과 달리, 이 악성코드는 탈취한 정보를 공개 저장소에 업로드하고, 감염된 기기를 GitHub Actions의 셀프 호스팅 러너로 등록한다. 이를 통해 외부에서의 지속적인 원격 접속이 가능해지고, 공격자는 감염된 개발자의 계정을 무기로 삼아 추가 패키지에 악성코드를 주입, 자동적으로 변경된 버전을 npm에 재등록하는 방식으로 감염 범위를 확대한다.

보고서에 따르면 현재까지 감염된 것으로 파악되는 저장소는 2만 5,000곳 이상, 영향을 받은 패키지는 수백 개에 달하는 것으로 추정된다. 이 중에는 오픈소스 커뮤니티에서도 널리 쓰이는 대중적인 도구들이 포함돼 있다.

익스펠은 이번 사례를 통해 소프트웨어 공급망 보안의 ‘신뢰 계층(trust layer)’이 더 이상 안전지대가 아님을 경고했다. 샤이 훌루드는 자바스크립트 생태계를 공략했지만, 파이썬(PyPI), 루비(RubyGems), PHP(Composer) 등 유사한 신뢰 기반을 가진 다른 언어 커뮤니티 역시 유사한 공격에 노출될 가능성이 높다는 것이다. 개발 도구 생태계를 노리는 자율 확산 악성코드의 출현은 향후 더욱 지속적이고 광범위한 위협으로 이어질 수 있다는 점에서 경계가 필요하다.