사이버 보안

NPM 공급망 공격: 발생한 일과 해결 방법

mm
Securities.io maintains rigorous editorial standards and may receive compensation from reviewed links. We are not a registered investment adviser and this is not investment advice. Please view our affiliate disclosure.
Digital vault being cracked open

암호화폐 산업과 전 세계는 최근 보안 전문가들이 Node.js 생태계를 목표로 한 공급망 공격을 확인하면서, 이미 최대 18개의 npm 패키지가 손상된 사실을 알게 되어 깜짝 놀랐습니다.

이는 이러한 몇몇 패키지가 주당 수십억 건의 다운로드를 기록하기 때문입니다.

소프트웨어 패키지는 제3자 소프트웨어를 배포하기 위해 사용됩니다. 일반적으로 패키지 관리자를 통해 외부 소스에서 가져오며, 소스 코드, 라이브러리, 문서 및 소프트웨어를 빌드하고 실행하는 데 필요한 기타 파일을 포함합니다.

이제, 악성 코드를 포함한 패키지가 정품 패키지인 척 위장하지만 실제로는 소프트웨어를 감염시키려는 의도를 가진 악성 패키지입니다. 시스템에 침투하면 악성 패키지의 악성 코드는 파일을 수정하고, 데이터를 탈취하며, 심지어 전체 시스템을 장악해 공격자가 원하는 대로 조작할 수 있습니다.

Python 및 .NET과 같은 다른 주요 오픈소스 생태계도 공격에 취약하지만, JavaScript의 광범위한 사용으로 인해 사이버 범죄자들에게 특히 노출됩니다.

Node.js는 JavaScript 위에 구축된 오픈소스 런타임 환경으로, 개발자가 웹 브라우저 외부에서 코드를 실행할 수 있게 합니다. 

전통적으로, 주로 웹 페이지를 인터랙티브하게 만드는 데 사용되는 인터프리터 언어는 브라우저 내 클라이언트‑사이드 웹 개발에 주로 사용되었지만, Node.js는 JavaScript의 사용 범위를 서버‑사이드 및 기타 애플리케이션으로 확장했습니다.

Node.js를 사용하면 개발자는 웹 서버, API, 도구 등 빠르고 확장 가능한 애플리케이션을 구축할 수 있습니다.

npm을 통해 제공되는 방대한 오픈소스 라이브러리와 도구 생태계 덕분에 개발이 간소화되고 다양한 기능을 위한 솔루션을 손쉽게 찾을 수 있습니다.

Node Package Manager, 즉 npm은 JavaScript 개발의 핵심 도구로, 코드 패키지를 찾고, 빌드하고, 관리하는 데 사용됩니다. 의존성 관리, 협업 지원, 워크플로우 간소화에 도움을 줍니다. 

이 세계 최대 규모의 소프트웨어 레지스트리는 300만 개가 넘는 코드 패키지를 보유하고 있으며 완전히 무료로 이용할 수 있습니다. 

누구나 등록 없이 모든 npm 공개 소프트웨어 패키지를 다운로드할 수 있습니다. 오픈소스 개발자는 npm을 통해 소프트웨어를 공유하고 차용하며, 많은 조직이 이를 사용해 사내 개발을 관리합니다.

npm을 컴퓨터에 설치하려면 먼저 Node.js를 설치해야 합니다.

JavaScript용 패키지 관리자는 GitHub의 자회사인 npm, Inc.가 유지 관리하고 있으며, GitHub은 2018년 마이크로소프트가 75억 달러에 인수한 세계 최고의 소프트웨어 개발 플랫폼입니다. 

지난 주, 전 세계 1700만 명 이상의 개발자가 의존하는 이 도구가 손상되어 인터넷에 일시적인 공포를 일으켰지만, 전문가들이 조기에 차단하고 공격자가 50달러 이상을 탈취하지 못하면서 곧 진정되었습니다. 무슨 일이 있었는지 살펴보겠습니다!

What Happened in the NPM Supply-Chain Attack (Sept 2025)

JavaScript 생태계에서 발생한 대규모 공급망 공격에서 해커들은 악성 코드를 포함한 일련의 npm 패키지를 손상시켰습니다. 이 공격의 목적은 무방비 상태인 사용자의 디지털 자산을 탈취하는 것이었습니다. 

특히, 개발자 ‘qix’의 npm 계정이 해킹되었습니다. 

Qix는 오픈소스 유지관리자 계정으로, 피싱 공격에 의해 손상되었습니다. 이를 통해 공격자는 18개의 인기 npm 패키지에 악성 코드를 주입했습니다. 이 패키지들은 매주 수억 번 다운로드되며 프레임워크, 개발자 도구, 프로덕션 서비스에 내장됩니다.

영향을 받은 패키지에는 chalk, debug, color-name, wrap-ansi, ansi-styles와 같은 가장 인기 있는 패키지와, 덜 알려진 backslash, chalk-template, has-ansi 등이 포함됩니다.
Swipe to scroll →

Package Compromised version(s) Action
debug 4.4.2 버전 4.4.2 이전으로 고정; 재설치; 빌드 로그 스캔
chalk 5.6.1 버전 5.6.1 이전으로 고정; 클린 빌드 재배포
ansi-styles 6.2.2 버전 6.2.2 이전으로 고정; 하위 종속성 감사
ansi-regex 6.2.1 버전 6.2.1 이전으로 고정
strip-ansi 7.1.1 버전 7.1.1 이전으로 고정
wrap-ansi 9.0.1 버전 9.0.1 이전으로 고정
color, color-convert, color-string, color-name 5.0.1 / 3.1.1 / 2.1.1 / 2.0.1 목록에 있는 버전 이전으로 고정; 재잠금 및 재빌드
has-ansi, supports-color, slice-ansi 6.0.1 / 10.2.1 / 7.1.1 목록에 있는 버전 이전으로 고정
backslash, is-arrayish, error-ex, simple-swizzle, chalk-template, supports-hyperlinks 0.2.1 / 0.3.3 / 1.3.3 / 0.2.3 / 1.1.1 / 4.1.1 목록에 있는 버전 이전으로 고정
duckdb, @duckdb/node-api, @duckdb/node-bindings, @duckdb/duckdb-wasm 1.3.3 / 1.3.3 / 1.3.3 / 1.29.2 목록에 있는 버전 사용을 피하고 공급업체 업데이트를 기다리세요

영향을 받은 모든 패키지는 npm 레지스트리에서 제거되었습니다. 고가치 오픈소스 유지관리자를 손상시킴으로써, 이번 공격은 오픈소스 소프트웨어(OSS) 생태계에 대한 신뢰를 무기화했으며, 개발자는 자신이 사용하는 모든 의존성을 직접 감사하지 못합니다. 그들은 사용량과 평판, 그리고 레지스트리의 보안을 신뢰합니다.

NPM Supply Chain Attack Tweet

패키지를 손상시키기 위해 해커는 피싱 경로를 택했습니다. 공격자는 먼저 npm 패키지 유지관리자 계정을 탈취하기 위한 피싱 캠페인을 시작한 뒤, 손상된 버전을 업로드하기 전에 npm 패키지에 악성 코드를 삽입했습니다.

개발자 Josh Junon은 npm을 모방한 피싱 이메일에 속아 피해를 입었습니다. 공격자는 npm 로그인 페이지를 흉내 낸 피싱 사이트를 이용해 그의 자격 증명을 탈취했고, 침입 직후 Junon의 npm 계정 이메일 주소를 변경해 계정을 잠갔습니다.

“안녕, 나 해킹당했어. 모두 미안해, 정말 창피해요,” 라고 Junon이 HackerNews에 적어 사건을 확인했습니다. 그는 npm만 영향을 받았다고 명확히 했습니다:

“처음엔 합법적으로 보였어요. 변명은 없고, 그냥 일주일 내내 바빴고, 당황스러운 아침이라 할 일 목록에서 뭔가를 끊어내려 했어요. 사이트로 바로 가는 대신 링크를 클릭한 실수를 했습니다.” 

피싱 이메일은 support [at] npmjs [dot] help에서 발송되었으며, Junon에게 링크를 클릭하도록 위협적인 문구를 사용했습니다.

npm을 사칭한 공격자는 2FA 자격 증명을 업데이트하라고 요청했으며, “계정 보안을 위한 지속적인 약속”이라고 주장하고 모든 사용자가 동일한 조치를 취하도록 요구했습니다. 

“우리 기록에 따르면 마지막 2FA 업데이트가 12개월 이상 지났습니다,” 라는 피싱 이메일은 2025년 9월 10일부터 “오래된 2FA 자격 증명은 일시적으로 잠길 것”이라고 덧붙였습니다.

같은 이메일이 다른 패키지 유지관리자와 개발자를 표적으로 삼는 데에도 사용되었습니다.

영향을 받은 패키지의 광범위한 사용량을 고려하면, 이 사건이 신속히 처리되지 않았다면 큰 사고가 될 수 있었습니다.

Aikido Security의 Charlie Erickson이 보고서에서 언급했듯이, 수많은 웹사이트가 이 공격으로 인한 심각한 피해를 피했습니다. npm 패키지에 포함된 코드는 웹사이트 클라이언트에서 실행될 수 있었습니다.

“이 악성 코드는 본질적으로 브라우저 기반 인터셉터로, 네트워크 트래픽과 애플리케이션 API를 가로챕니다,” 라고 그는 분석에서 말했습니다. “위험한 점은 여러 계층에서 작동한다는 것입니다: 웹사이트에 표시되는 콘텐츠를 변경하고, API 호출을 조작하며, 사용자의 앱이 서명한다고 믿는 내용을 조작합니다. 인터페이스가 정상처럼 보여도, 기본 트랜잭션은 백그라운드에서 리다이렉트됩니다.

악성 코드는 암호화폐를 탈취하도록 설계되었습니다. 공격자는 문자열에서 암호화폐 지갑 주소를 스캔해 암호화 관련 애플리케이션을 사용하는 사람들을 위험에 빠뜨립니다.

이 악성 코드는 사용자가 모르게 브라우저 내에서 조용히 작동하며, 지갑 주소를 재작성하고 자금이 공격자가 제어하는 계정으로 전송되도록 합니다. 비트코인 (BTC ), 이더리움 (ETH ), 솔라나 (SOL ), 트론 (TRX ), 라이트코인 (LTC ), 비트코인 캐시 (BCH ) 등 다양한 암호화폐를 손상된 시스템에서 직접 탈취합니다.

이를 위해 악성 코드는 fetch와 같은 브라우저 API와 window.ethereum과 같은 지갑 인터페이스를 모니터링합니다.

악성 코드는 “브라우저에서 암호화 및 Web3 활동을 조용히 가로채고, 지갑 상호작용을 조작하며, 결제 목적지를 재작성해 자금과 승인 이 공격자 제어 계정으로 리다이렉트됩니다. 사용자는 눈에 띄는 증상이 없습니다,” 라고 Erickson이 설명했습니다.

완료 후에도 악성 코드는 흔적을 지우면서 백그라운드에 남아 피해자의 네트워크에서 향후 트랜잭션을 포착합니다.

공격의 심각성을 감안해 하드웨어 지갑 제공업체 Ledger의 CTO Charles Guillemet는 온체인 트랜잭션을 확인할 때 주의를 기울이라고 경고했습니다. 영향을 받은 패키지는 이미 10억 회 이상 다운로드되었습니다. 그는 게시물에서 언급했으며, 악성 페이로드가 “실시간으로 암호화 주소를 조용히 교체해 자금을 탈취한다”고 밝혔습니다. 

“하드웨어 지갑을 사용한다면 서명하기 전 모든 트랜잭션을 주의 깊게 확인하면 안전합니다. 하드웨어 지갑을 사용하지 않는다면 현재는 온체인 트랜잭션을 하지 않는 것이 좋습니다.”

– Guillemet

한편, DefiLlama의 가명 설립자 0xngmi는 X에 “실제 영향 범위는 ‘모든 웹사이트’보다 훨씬 작다”고 공유했습니다. 이는 악성 npm 패키지가 배포된 이후 업데이트된 프로젝트만 위험에 처했기 때문입니다. 그는 “아직도 이 문제가 해결되고 나쁜 패키지가 정리될 때까지 암호화 웹사이트 사용을 피하는 것이 안전하다”고 덧붙였습니다.

결국 해커들은 이렇게 거대한 공급망 공격에서도 단 50달러 상당의 암호화폐만 탈취했습니다. 이 50달러는 이더와 Brett, Andy와 같은 여러 밈 코인으로 구성되었습니다.

Got only $50?

 

하지만 이는 운이 좋았던 것이며, 보안 연합(Security Alliance) 인텔리전스 플랫폼은 X에 다음과 같이 언급했습니다:

“이것은 훨씬 더 나쁠 수도 있었습니다. 개발자 머신을 목표로 한 지속성을 가진 은밀한 백도어가 레이더 아래에 오래 머물 수 있었을 것입니다.”

그 이후로 Aave, Uniswap, Ledger, Jupiter, MetaMask, Phantom, Blast 등 많은 암호화 애플리케이션이 npm 공격으로부터 안전하다고 사용자에게 알렸습니다.

공격이 실패했지만, 이는 개발자들에게 가장 높은 보안을 위해 자체 코드베이스를 넘어선 조치가 필요함을 상기시킵니다. 널리 신뢰받고 사용된 소프트웨어 의존성도 언제든지 손상될 수 있습니다.

GitHub와 npm 같은 코딩 플랫폼도 널리 사용되는 패키지의 안전성을 보장하기 위해 더 많은 노력이 필요합니다.

“더 인기 있는 패키지는 신뢰할 수 있는 출처에서 온 것임을 증명하는 인증을 요구해야 하며, 무작위 인터넷 위치에서 온 것이 아니라는 보증이 필요합니다.”

– Eriksen

One of the best things npm could do

 

코드 저장소가 손상되면 개발자는 프로젝트 전체를 포기하게 되는 등 심각한 재앙을 초래할 수 있습니다.

이번 사건은 오늘날 소프트웨어 생태계가 얼마나 상호 연결되고 취약한지를 보여줍니다. 하나의 계정이 손상되면 공격자는 막대한 범위에 접근할 수 있으므로 개발 프로세스 전 단계에서 공급망 보안 조치를 강화하는 것이 필수적입니다.

Safeguarding Against the Fast-Rising Threat of Malware 

악성 소프트웨어 위협이 증가하고 공격이 더욱 정교하고 표적화됨에 따라, 사용자들은 교육을 받고 모든 플랫폼에서 항상 경계를 유지하는 것이 중요합니다.

악성 소프트웨어, 즉 멀웨어는 가장 흔한 사이버 공격 유형 중 하나입니다. 공격자는 피해자의 컴퓨터에 몰래 접근하거나 손상을 입히려는 의도로 소프트웨어 코드를 개발합니다.

매년 전 세계에서 수십억 건의 멀웨어 공격이 다양한 기기와 운영 체제에서 발생합니다. 멀웨어를 이용해 사이버 범죄자는 장치뿐 아니라 전체 기업 네트워크를 인질로 잡습니다.

공격자는 피해자의 장치에 무단으로 접근함으로써 로그인 자격 증명, 신용카드 번호, 기타 중요한 정보를 탈취합니다. 기업이 보유한 방대한 개인 데이터는 해커가 큰 금액을 갈취하는 데 악용될 수 있어, 멀웨어 공격은 기업을 겨냥하는 경우가 늘고 있습니다. 

데이터에 따르면 2024년에 전체 조직의 59%가 이러한 공격을 경험했습니다. 소규모 기업도 안전하지 않으며, 47%가 지난해 랜섬웨어에 감염되었습니다. 동시에 평균 랜섬 금액은 500% 상승해 200만 달러에 이르렀습니다. 

멀웨어 공격 복구 평균 비용도 273만 달러에 달합니다. 현재 인터넷이 직면한 가장 큰 위협 중 하나는 멀웨어이며, 이는 컴퓨터 시스템과 사용자를 해치는 다양한 형태로 나타납니다.

바이러스, 랜섬웨어, 트로이목마, 웜, 스파이웨어, 애드웨어, 크립토-잭킹 등 다양한 멀웨어 유형이 존재합니다. 이 모든 종류는 네트워크에 무단 접근하거나 시스템을 손상시키도록 설계되었습니다.

공격의 근본 원인을 살펴보면, 32%는 취약점 악용, 29%는 자격 증명 탈취, 23%는 악성 이메일이 주요 원인입니다.

그렇다면 어떻게 이 끊임없는 위협으로부터 스스로를 보호할 수 있을까요? 가장 간단하고 첫 번째 단계는 컴퓨터와 소프트웨어를 항상 최신 상태로 유지하는 것입니다. 또한, 인터넷에서 무분별하게 클릭하는 것을 피해야 합니다. 특히 암호화폐 사용자는 링크에 의심을 가지고, 확실하지 않은 파일은 절대 다운로드하지 않아야 합니다.

이와 동일하게 이메일 첨부 파일도 조심해야 합니다. 의심스러운 이메일을 열지 말고 파일 공유를 최소화하세요. 안티바이러스 소프트웨어를 설치하는 것이 현명합니다.

불가피하게 조직도 멀웨어 공격에 대비해 방어력을 강화할 수 있습니다. 가장 직관적인 방법은 강력한 비밀번호, 다중 인증, VPN을 사용하는 것이며, 개인도 이를 통해 보다 효과적으로 자신을 보호할 수 있습니다.

조직은 지속적으로 장치를 모니터링해 의심스러운 활동을 감지하고, 취약점을 평가하며, 침투 테스트를 수행해야 합니다. 네트워크와 분리된 드라이브에 민감한 데이터를 백업하면 멀웨어 공격 복구에 도움이 됩니다.

직원들은 훈련을 받아 이러한 공격을 신속히 식별하고, 사고 대응 계획을 마련해 의심되는 멀웨어 위협을 발견했을 때 누구에게 연락해야 하는지 알아야 합니다.

제로 트러스트 네트워크 아키텍처를 활용하면 기업은 데이터나 자산에 대한 무단 접근을 차단할 수 있습니다. 제로 트러스트에서는 사용자를 절대 신뢰하지 않고 항상 검증합니다.

오늘날 하이퍼 디지털 시대에 이러한 관행은 개인이 상호 연결된 세계에서 자신을 보호하는 데 도움이 됩니다.

악성 패키지로부터 자신을 보호하는 일반적인 멀웨어 보안 권고 사항은 npm 공격에도 적용되지만, npm 생태계는 개방형 구조, 작은 패키지의 대량 재사용, 방대한 의존성 트리 등으로 인해 추가적인 특별 예방 조치가 필요합니다.

이 심각한 위협으로부터 자신을 보호하려면 패키지를 설치하기 전에 항상 신뢰성을 재확인해야 합니다. 패키지 무결성을 검증하면 의존성 트리가 변조되지 않았는지 확인할 수 있습니다. 

패키지의 정당성을 판단할 때는 소스와 소유권 외에도 유지관리자 변경 사항을 살펴보세요. 또한 패키지가 수행하는 작업과 실제 필요성을 검토하는 것이 좋습니다.

새로운 위협을 지속적으로 모니터링하고 상황에 맞는 조치를 제공하는 보안 도구를 사용하세요. npm audit를 실행해 프로젝트 의존성의 알려진 취약점을 확인할 수 있습니다. 배포 전 자동 보안 스캔을 구현하면 검토 및 승인된 코드만 프로덕션에 반영됩니다.

이제 최신 멀웨어 공격으로부터 자신을 보호하려면 overrides 기능을 사용해 package.json에 영향을 받은 패키지를 가장 안전한 버전으로 고정해야 합니다. 

npm audit를 실행하거나 소프트웨어 구성 분석(SCA) 도구를 사용해 의존성 트리에서 영향을 받은 버전을 확인하세요. 빌드 로그, 개발 환경, 외부 트래픽을 점검해 침해 지표(IoC)를 모니터링하세요.

Click here for a list of top five companies that fought back against cyberattacks.

Final Thoughts: Hardening Open-Source Dependencies

인터넷 위협은 끊임없이 증가하고 점점 더 정교해지고 있습니다. 

공격자들이 새로운 공격 벡터를 활용하고 자원이 부족한 프로젝트를 표적으로 삼으면서, 개발자와 기업, 사용자는 위협이 나타나기를 기다리는 것이 아니라, 선제적으로 조치를 취해야 합니다. 한 번의 약한 연결 고리가 전체 시스템을 무너뜨릴 수 있기 때문입니다. 

신흥 위협에 대한 정보를 지속적으로 파악하고, 소프트웨어 공급망을 지속적으로 감사하며, 위협을 모니터링함으로써 우리는 끊임없이 진화하는 사이버 위험으로부터 진정으로 스스로를 보호할 수 있습니다.

Click here for a list of top five public companies that paid off cyber attackers.

가우라브는 2017년에 암호화폐 거래를 시작하여 그 이후로 암호화폐 분야에 사랑에 빠졌습니다. 암호화폐에 대한 그의 관심은 암호화폐와 블록체인 전문 작가로 그를 만들었습니다. 곧 그는 암호화폐 회사와 미디어 아웃렛에서 일하게 되었습니다. 그는 또한 큰 배트맨 팬입니다.