사상 최대 규모의 공급망 공격, Go 언어까지 감염되다

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00작년에 모두가 필사적으로 막으려 했던 NPM 웜이 완전히 새로운 일을 벌였습니다.
00:00:04생태계를 넘어 Go 패키지에서도 발견되고 있습니다. 더 악질적인 점은 침투 방식인데,
00:00:09여러분의 Claude 코드 설정이나 VS Code 작업 등에 악성 후크를 심어놓는다는 겁니다.
00:00:13오늘 다룰 내용은 세 가지입니다. 웜에 대한 요약,
00:00:18이번 새로운 공격 방식의 분석, 그리고 보안을 위해 지금 바로 할 수 있는 조치들입니다.
00:00:23NPM 공급망 공격은 이 채널에서 여러 번 다뤘으니,
00:00:28중요한 업데이트를 놓치지 않으려면 BetterStack을 구독하세요.
00:00:36혹시 처음 들어보시는 분들을 위해, Shai Halud는 패키지 저장소에 서식하는 자가 복제 웜입니다.
00:00:41작동 방식은 이렇습니다. 독이 든 패키지를 설치하면 설치 시점에 실행되어 머신에서 비밀 정보를 스캔합니다.
00:00:47NPM 토큰, GitHub 토큰, AWS, GCP 및 Azure 키, SSH 키 같은 정보를 찾아다니죠.
00:00:54심지어 조직을 보호하기 위해 노출된 키를 찾아 회전하도록 설계된 Trufflehog 도구까지 실행합니다.
00:01:01하지만 여기서는 공격자가 그 비밀 정보를 탈취하기 위해 악용하고 있는 것입니다.
00:01:06그런 다음 훔친 NPM 토큰을 사용하여 독이 든 버전의 NPM 패키지를 게시하고,
00:01:12다음 사람을 감염시킵니다. 즉, 공격자가 직접 개입할 필요가 없습니다. 자동으로 퍼지기 때문에
00:01:18단순 악성코드가 아니라 웜이라고 부르는 것입니다. 2025년 9월에 처음 발생했고,
00:01:2411월에 더 커졌으며, 2026년에는 'Team PCP'라는 그룹이 전체 소스코드를 공개하고
00:01:31가장 큰 공격을 성공시킨 사람에게 상을 주는 대회를 열어 모방범들의 공격이 끊이지 않고 있습니다.
00:01:38그런데 보안 기업 Socket.dev가 6월 말에 포착한 새로운 공격 물결에는 두 가지 다른 점이 있습니다.
00:01:43첫째, 생태계를 건너뛰었습니다. 단순히 다른 NPM 패키지에 나타난 것이 아니라 Go 모듈인
00:01:49Varana 블록체인 프로젝트에서 나타났습니다. 하지만 Go 패키지를 직접 감염시킨 것은 아닙니다.
00:01:55Go 도구로는 아무것도 실행되지 않았거든요. 배포된 것은 숨겨진 자바스크립트 파일들이 포함된 소스 아카이브였습니다.
00:02:01코드 실행을 위한 .clawed 폴더와 .vscode 폴더가 들어있어 후크처럼 작동하게 되어 있었죠.
00:02:08.clawed 코드 세션 시작 후크가 포함된 settings.json과,
00:02:14node.clawed.setup.mjs를 실행하는 .vscode 폴더 열기 작업이 포함된 tasks.json이 있어 폴더를 열거나 코딩 세션을 시작하면 바로 악성코드가 발동합니다.
00:02:22거기서부터 BUN을 통해 실제 페이로드를 디코딩하고 준비합니다.
00:02:27.m 파일을 비롯해 찾을 수 있는 모든 자격 증명을 탈취하고, CrowdStrike, Defender,
00:02:34Sentinel-1 같은 보안 프로그램이 실행 중인지 확인한 뒤 작업을 시작합니다. 한번 생각해보세요.
00:02:39설치 스크립트가 실행되지 않으니 'ignore scripts' 플래그는 소용이 없고,
00:02:45악성코드가 node_modules에 사는 게 아니라 프로젝트 설정에 살기 때문에 npm uninstall도 소용없습니다.
00:02:51수년간 의존성을 주의하라고 조언해 왔지만, 이제 공격 대상이 바뀌었습니다.
00:02:56앱의 의존성이 아니라 개발 환경 그 자체가 공격 대상입니다. 눈치채지 못하면
00:03:01GitHub 워크플로우 같은 CI 환경에서 실행되는 프로덕션 환경에 악성코드를 배포하게 될 수도 있습니다.
00:03:08무시무시하게 들리겠지만, 안전을 지키기 위해 지금 바로 할 수 있는 일들이 있습니다.
00:03:13'ignore scripts' 플래그만 믿지 마세요. 이건 설치 후크만 막아주는데,
00:03:18이번 새로운 공격은 그걸 완전히 우회합니다. Claude, VS Code, GitHub 워크플로우는 실행 가능한 코드임을 명심하세요.
00:03:26레포를 클론하거나 의존성 소스를 가져올 때, 코딩 에디터에서 프로젝트를 열기 전에 반드시 해당 파일들을 확인하세요.
00:03:31셋째, VS Code에서 자동 작업을 비활성화하세요. 폴더 열기 작업이 사용자 승인 없이 실행되지 않도록
00:03:38'Manage Automatic Tasks' 명령을 관리해야 합니다. 넷째, 장기 토큰 대신 단기 토큰을 사용하고
00:03:45환경에 토큰을 남기기보다 OIDC 같은 인증 방식을 활용하세요.
00:03:52토큰을 훔쳐서 재사용할 수 없으면 웜이 여러분을 통해 복제할 수 없습니다.
00:03:58다섯째, CI 러너에 이그레스(egress) 필터링을 설정하세요. 혹시 악성코드가 실행되더라도
00:04:04최소한 자격 증명을 공격자에게 전송할 수 없도록 막아야 합니다.
00:04:10GitHub CI를 예로 들면, 이그레스는 데이터를 외부로 내보내는 것을 말합니다. 화이트리스트를 설정해서
00:04:16허용된 곳으로만 요청이 가도록 해야 합니다. 이것이 악성코드를 즉시 차단할 것입니다.
00:04:20무섭게 들릴 수 있다는 거 압니다.
00:04:22하지만 NPMRC에서 최소 릴리스 기간을 설정하거나,
00:04:27단기 토큰만 사용하고,
00:04:29자동 후크를 비활성화하며 비밀번호 관리자에 민감 정보를 저장하는 등
00:04:34모범 사례를 따른다면 피해를 입을 가능성을 훨씬 줄일 수 있습니다. 보안에 대해 더 알고 싶으시다면
00:04:40Burp Suite의 무료 대안을 다룬 영상을 방금 공개했습니다. 저는 BetterStack의 Warren이었고,
00:04:45시청해주셔서 감사합니다. 다음 영상에서 뵙겠습니다!

핵심 요약

공격 대상이 의존성에서 개발 환경 자체로 이동했으므로, VS Code의 자동 작업 비활성화와 CI 환경 내 이그레스 필터링 설정 등 직접적인 환경 보안 강화가 필수적이다.

하이라이트

  • Shai Halud 웜은 NPM 토큰, GitHub, AWS, GCP, Azure, SSH 키를 포함한 비밀 정보를 자동으로 스캔하고 탈취한다.

  • 2026년 Team PCP 그룹이 소스코드를 공개하고 공격 대회까지 열면서 모방범에 의한 공격이 지속되고 있다.

  • 최근 공격은 NPM을 넘어 Go 프로젝트 소스 아카이브에 자바스크립트 후크를 포함하는 방식으로 생태계를 확장했다.

  • VS Code의 .vscode 폴더 내 tasks.json 및 settings.json을 조작하여 프로젝트를 여는 즉시 악성코드가 실행된다.

  • 기존의 'ignore scripts' 플래그는 설치 후크만 차단하므로 이번 공격을 막지 못한다.

  • CI 환경에서 이그레스 필터링을 통해 화이트리스트 외부로의 데이터 전송을 차단하는 것이 자격 증명 탈취 방지에 효과적이다.

타임라인

Shai Halud 웜의 작동 방식과 위협

  • Shai Halud는 NPM 패키지에 숨어 비밀 정보를 탈취하고 스스로를 복제하는 자동화된 웜이다.
  • 탈취된 NPM 토큰을 활용해 독이 든 패키지를 자동으로 게시하여 공격자가 개입하지 않아도 전파된다.
  • 2026년 Team PCP라는 그룹이 공격 소스코드를 공개하고 경진대회를 열면서 모방 공격이 확산 중이다.

2025년 9월 등장한 Shai Halud는 설치 시점에 머신의 AWS, GitHub, GCP, Azure 키 등을 스캔한다. Trufflehog 같은 보안 도구조차 공격자가 비밀 정보를 수집하는 도구로 악용된다. 웜은 탈취한 토큰으로 악성 패키지를 즉시 배포하여 사용자 간 감염 고리를 스스로 완성한다.

Go 생태계로 확장된 새로운 공격 방식

  • 공격자는 Go 모듈인 Varana 블록체인 프로젝트의 소스 아카이브에 악성 자바스크립트 파일을 포함했다.
  • 프로젝트 폴더를 열거나 코딩 세션을 시작하면 .vscode 및 .clawed 폴더 내 후크가 자동으로 실행된다.
  • 공격은 개발 환경 설정을 악용하므로 npm uninstall이나 'ignore scripts' 플래그로 방어할 수 없다.

최근 포착된 공격은 Go 패키지 자체가 아닌 소스 아카이브 내부의 설정 파일을 타겟으로 한다. tasks.json과 settings.json을 통해 node.clawed.setup.mjs가 실행되고, BUN을 거쳐 페이로드가 작동한다. 보안 프로그램 실행 여부를 확인한 후 개발 환경 내 자격 증명을 탈취하며, 프로젝트 설정에 악성코드가 상주하여 기존의 의존성 관리 방식으로는 대응이 어렵다.

개발 환경 및 CI 보안 강화 전략

  • VS Code의 Manage Automatic Tasks 명령을 사용하여 사용자 승인 없는 자동 작업을 비활성화해야 한다.
  • CI 러너에 이그레스 필터링을 설정하여 화이트리스트 외부로 자격 증명이 유출되는 것을 차단한다.
  • 장기 토큰 대신 OIDC 같은 단기 인증 방식을 사용하여 탈취된 토큰의 재사용 가능성을 제거한다.

개발 도구와 CI 워크플로우를 실행 가능한 코드로 간주하고 접근해야 한다. 코드를 클론하기 전 설정 파일의 후크 포함 여부를 확인하는 습관이 중요하다. 특히 CI 환경에서는 데이터 외부 유출을 원천 차단하는 이그레스 화이트리스트 설정이 실제 피해를 방지하는 실질적인 보호책이 된다.

커뮤니티 글

모든 글 보기