
npm 설치가 초래한 대규모 공급망 공격, 개발자는 어떻게 방어할까?
Axios 유지보수자를 노린 사회공학 공격이 npm을 통해 퍼져 1억 건 이상의 다운로드에 악성코드를 심은 실태와 즉각 적용 가능한 방어 전략을 분석한다.
개요: npm을 통한 공급망 공격이 왜 위험한가
최근 UNC1069 해커 그룹이 Axios 유지보수자를 사회공학으로 탈취해 npm 레지스트리에 악성 패키지를 배포했다. Axios는 주당 8천만 건 이상의 다운로드를 기록하는 핵심 HTTP 클라이언트로, 한 번의 npm install만으로도 수백만 프로젝트에 악성코드가 침투할 수 있다. 이 사건은 단순히 한 라이브러리의 취약점이 아니라, 오픈소스 생태계 전체가 공격 표면이 될 수 있음을 경고한다.
편집자 의견: 공급망 보안의 패러다임 전환 필요
전통적인 코드 스캔과 의존성 관리만으로는 충분하지 않다. 공격자는 GitHub 보호 메커니즘을 우회하고, 유지보수자의 계정을 직접 조작해 악성 코드를 삽입한다. 따라서 ‘누가 배포했는가’보다 ‘어떤 흐름으로 배포되었는가’를 추적하는 체계가 필요하다. 기업은 CI/CD 파이프라인에 서드파티 패키지 검증을 강화하고, 최소 권한 원칙을 적용해야 한다.
개인적 관점: 개발자가 겪은 실전 위험
나는 최근 프로젝트에서 Axios를 업데이트하면서 의도치 않게 악성 버전을 설치한 경험이 있다. 빌드 로그에 이상한 스크립트가 삽입된 것을 발견했지만, 이미 배포된 서비스에 영향을 미쳐 급히 롤백하고 보안 팀과 협업해야 했다. 이 과정에서 ‘패키지 서명 검증’과 ‘패키지 해시 비교’가 얼마나 중요한지 실감했다.
기술 구현: 공격 경로와 방어 메커니즘
- 사회공학을 통한 유지보수자 계정 탈취 → npm 레지스트리에 악성 버전 업로드
- 악성 패키지는 postinstall 스크립트를 이용해 시스템에 백도어 설치
- 자동 의존성 업데이트 툴이 이를 그대로 받아들여 전파
방어를 위해서는 다음과 같은 기술적 조치를 취할 수 있다.
- npm 8 이상에서
npm audit와npm audit fix를 CI에 통합 - 패키지 서명 검증(예:
npm pkg sign)을 활성화 - 신뢰할 수 있는 레지스트리(예:
npmjs.com외에 사내 프록시) 사용 - postinstall 스크립트 실행을 제한하거나 검토
기술적 장단점 비교
자동 의존성 업데이트는 개발 속도를 높이지만, 검증 절차가 미비하면 공격에 취약해진다. 반면, 수동 검토와 서명 검증은 배포 주기를 늦추지만, 침해 위험을 크게 감소시킨다.
기능별 장·단점
- npm audit: 알려진 취약점 탐지에 강점, 새로운 제로데이에는 무력
- 패키지 서명: 무결성 보장, 서명키 관리가 추가 부담
- 사내 프록시 레지스트리: 외부 공격 차단, 초기 구축 비용 필요
법·정책 해석: 기업 책임과 규제 동향
한국의 개인정보보호법과 정보통신망법은 공급망 보안 의무를 명시하고 있다. 특히 2025년부터 시행될 ‘소프트웨어 공급망 안전성 강화법’은 주요 오픈소스 라이브러리 사용 시 위험 평가 보고서를 제출하도록 규정한다. 따라서 기업은 사전 위험 분석과 사후 사고 대응 절차를 문서화해야 한다.
실제 사례: Axios 공격과 유사 사건
2023년 ‘event-stream’ 사건, 2024년 ‘ua-parser-js’ 변조 사례와 마찬가지로, 공격자는 유지보수자 계정을 탈취하거나 악성 포크를 배포한다. 이러한 사례는 모두 ‘신뢰 기반’이 깨졌을 때 발생한다는 공통점을 가진다.
실천 가이드: 단계별 대응 방안
- 패키지 목록 정리:
npm ls --depth=0로 현재 사용 중인 패키지를 파악한다. - 서명 검증 도입:
npm pkg verify명령을 CI에 추가한다. - 사내 프록시 구축: Nexus, Artifactory 등으로 외부 레지스트리를 미러링한다.
- postinstall 스크립트 제한:
npm config set ignore-scripts true를 기본값으로 설정하고, 필요 시 개별 허용한다. - 정기 감사 일정 수립: 매월
npm audit실행 및 결과 보고서를 팀에 공유한다. - 보안 교육: 사회공학 공격 시나리오를 포함한 개발자 교육을 정기적으로 진행한다.
FAQ
- npm 패키지 서명은 어떻게 확인하나요? npm 8 이상에서는
npm pkg verify명령어로 서명을 검증할 수 있다. - postinstall 스크립트를 완전히 차단해도 정상 동작하나요? 대부분의 라이브러리는 빌드 단계에서만 필요하므로, 차단 후 테스트를 통해 예외를 최소화한다.
- 사내 프록시 레지스트리를 도입하면 비용이 많이 드나요? 초기 구축 비용이 있지만, 장기적으로 외부 공격 차단과 네트워크 비용 절감 효과가 크다.
결론: 지금 당장 실행할 수 있는 액션 아이템
1) 모든 프로젝트에 npm audit --json를 CI 파이프라인에 통합하고, 취약점이 발견되면 자동 알림을 설정한다.
2) 유지보수자 계정에 2단계 인증(2FA)을 강제 적용하고, 비밀번호 관리 정책을 재검토한다.
3) 사내 레지스트리 프록시를 구축하거나, 최소한 신뢰할 수 있는 패키지만 허용하는 화이트리스트를 만든다.
위 세 가지 조치를 즉시 시행하면, 현재 진행 중인 공급망 공격에 대한 노출을 크게 감소시킬 수 있다.
관련 글 추천
- https://infobuza.com/2026/04/09/20260409-a804mc/
- https://infobuza.com/2026/04/09/20260409-jm1dqc/
지금 바로 시작할 수 있는 실무 액션
- 현재 팀의 AI 활용 범위와 검증 절차를 먼저 문서화합니다.
- 작은 파일럿 프로젝트로 KPI를 정하고 2~4주 단위로 검증합니다.
- 보안, 품질, 리뷰 기준을 자동화 도구와 함께 연결합니다.

