00:00:00이것은 우리가 지금까지 본 것 중 가장 큰 NPM 공급망 침해 사례 중 하나일 수 있으며,
00:00:03만우절 장난이 아닙니다. 타이밍이 안 좋았을 뿐이며 사람들이 이 사실을 꼭 알아야 합니다.
00:00:07이번 주에만 1억 100만 번 설치된 HTTP 클라이언트인 Axios 패키지에서 발생했습니다.
00:00:13그리고 17만 4천 개 이상의 종속 항목을 가지고 있습니다. 그래서 이미 Datadog,
00:00:18OpenClaw, WordPress와 같은 패키지에 영향을 미쳤으며, 북한 해커와도 연관이 있습니다.
00:00:22그럼 바로 들어가서 무슨 일이 일어났는지 살펴보겠습니다.
00:00:29사건의 전말은 이렇습니다. 2026년 3월 31일, 공격자가 NPM 계정을 탈취했습니다.
00:00:34Axios의 리드 메인테이너 계정으로 두 개의 백도어 버전을 배포했습니다. 최신 릴리스로 태그된
00:00:391.14.1 버전과 레거시로 태그된 0.30.4 버전입니다.
00:00:44이 패키지들에는 "plaincryptojs"라는 유령 종속성을 도입했는데,
00:00:48이것은 본질적으로 일반적인 crypto.js 패키지였지만 한 가지 작은 수정 사항이 있었습니다.
00:00:52바로 setup.js라는 포스트 인스톨 스크립트가 있었습니다. 즉, 이 오염된 패키지를 설치하는
00:00:58모든 사용자와 모든 CI 환경에서 이 스크립트가 실행되었다는 뜻입니다. 스크립트 자체에는
00:01:02사용 중인 운영 체제를 확인한 다음, 서버에 연결하여 해당 OS에 맞는
00:01:07두 번째 페이로드를 다운로드하는 난독화된 코드가 포함되어 있었습니다. 따라서 이 공격으로부터
00:01:12안전한 사람은 없었으며, 공격자들은 심지어 macOS 페이로드가 Intel과 Apple Silicon Mac
00:01:16모두에서 작동하도록 만들었습니다. 그리고 진짜 심각한 것은 바로 이 두 번째 페이로드입니다.
00:01:20이것은 RAT(원격 제어 트로이 목마)이며, 모든 운영 체제에서 기본적으로 동일하게 작동합니다.
00:01:25먼저 문서, 데스크톱, 설정 폴더를 훑으며 파일을 스캔합니다.
00:01:29윈도우 버전은 심지어 OneDrive, AppData 및 시스템의 모든 드라이브 문자를 스캔한 다음,
00:01:33파일 목록을 서버로 다시 전송했습니다. 아마도 훔칠 만한 가치가 있는 것이 있는지 확인하기 위해서였겠죠.
00:01:38그 후에는 비콘(Beaconing)을 시작합니다. 60초마다 여러분의 호스트 이름, 사용자 이름,
00:01:42운영 체제, 시간대, 하드웨어 모델 및 실행 중인 모든 프로세스의 전체 목록을 서버로 보냅니다.
00:01:47이를 통해 공격자는 사용자가 어떤 소프트웨어를 실행 중인지, 그리고 활발히 사용 중인지 확인할 수 있습니다.
00:01:52이 모든 것이 충분히 나쁘지 않게 들린다면, 더 최악인 부분이 남아 있습니다.
00:01:56공격자가 원격으로 네 가지 명령을 내릴 수 있는데, 이를 통해 시스템의 모든 디렉토리를 탐색하고,
00:02:00임의의 쉘 명령이나 스크립트를 실행하며, 추가 맬웨어를 심고 실행하거나,
00:02:05흔적을 지우기 위해 프로세스 전체를 종료할 수도 있습니다. 실제로 공격자들은
00:02:10원래의 셋업 스크립트가 스스로를 삭제하게 만든 다음, 포스트 인스톨 설정이 포함된
00:02:15package.json을 삭제하고 깨끗한 버전으로 교체하여 최대한 감지되지 않도록 설계했습니다.
00:02:19보시다시피 이 해킹은 정말 심각하며, 개발자 워크스테이션과 CI/CD 러너를 타겟으로 하여
00:02:23.env 파일, NPM 토큰, SSH 키와 같은 모든 유형의 비밀 정보를 찾도록 설계되었습니다.
00:02:28이 악성 페이로드를 실행한 모든 시스템은 전체 자격 증명 탈취 시나리오로 간주해야 합니다.
00:02:34이 모든 상황에 더해, 어떻게 NPM 계정이 침해되었는지에 대한 의문도 남아 있습니다.
00:02:38메인테이너는 2단계 인증(2FA)을 사용 중이었고, GitHub Action 파이프라인에도 인증이 활성화되어 있었다고 언급했습니다.
00:02:43따라서 현재로서는 수명이 긴 NPM 액세스 토큰을 사용하여 NPM CLI를 통해
00:02:47패키지가 배포된 것으로 보입니다. 다음 질문은 그들이 어떻게 그 토큰에 액세스했느냐는 것이며,
00:02:53메인테이너는 누군가가 자신의 계정 복구 코드를 얻었을 수도 있다고 생각하지만,
00:02:56어떻게 그렇게 했는지는 현재로서는 완전히 미스터리입니다. 만약 여러분이 이번 사건의
00:03:01영향을 받았는지 확인하고 싶다면, 잠금(lock) 파일에서 영향을 받은 axios 버전과
00:03:04plaincryptojs 패키지를 검색해 보십시오. 또한 node_modules에서 해당 패키지 자체를 검색해 보십시오.
00:03:09만약 발견된다면 불행히도 나쁜 소식입니다. 또한 시스템에서 RAT의 흔적을
00:03:14확인할 수 있으며, 제가 아래에 링크된 전체 분석 글을 남겨둘 테니 절차를 따라 하시고
00:03:18침해되었을 경우 어떻게 해야 할지 확인하십시오. 앞으로는 이러한 공격을
00:03:22예방하기 위해 취할 수 있는 몇 가지 단계가 있습니다. 첫 번째는 항상 잠금 파일을 커밋하고,
00:03:26파이프라인에서 'npm install' 대신 'npm ci' 명령어를 사용하는 것입니다.
00:03:31또한 패키지 관리자에서 최소 게시 기간을 설정하여, 패키지가 설치되기 전
00:03:35최소 48시간이 지난 것인지 확인하는 것이 좋습니다. 이를 통해 악성 패키지가 제때 적발되기를 바라는 것이죠.
00:03:39실제로 이번 Axios 건은 배포 3시간 만에 발견되어 삭제되었습니다. 마지막으로
00:03:44가능하다면 npm install 시 '--ignore-scripts' 플래그를 사용하거나, 기본적으로
00:03:48모든 포스트 인스톨 스크립트를 차단하고 신뢰하는 종속성에서만 실행하는 Bun과 같은 패키지 관리자를 사용하십시오.
00:03:53올해 우리가 보게 될 가장 큰 공격이 이것이기를 바라지만, 점점 더 많은 공격이 발생하고 있으니
00:03:57항상 안전에 유의하시기 바랍니다. 이에 대해 어떻게 생각하시는지 아래 댓글로 알려주시거나
00:04:01구독 버튼을 눌러주세요. 그럼 언제나 그렇듯, 다음 영상에서 뵙겠습니다.
00:04:04시청해 주셔서 감사합니다.