NPM 공급망 공격, 안전한 개발 환경 구축은?
NPM 패키지 관리자(Package Manager)의 공급망 공격으로 인한 보안 사고 발생, 심각한 피해 초래
쿨다운(Cooldown), PGP 서명(PGP Signing), 의존성 관리 도구(Dependency Management Tools) 등 다양한 보안 강화 방안 제시
Go, Rust 등 안전한 생태계의 패키지 관리 시스템(Package Management System)과 비교하며 근본적인 문제 제기
Postinstall 스크립트(Postinstall Scripts)의 위험성 및 npm 팀의 책임감 있는 대응 촉구
쿨다운(Cooldown)을 통한 공급망 공격 완화
댓글에서는 쿨다운(Cooldown), 즉 패키지 릴리스 후 일정 기간(예: 1~7일) 동안 해당 패키지를 사용하지 않도록 하는 방법을 제안한다. Artifactory/Nexus와 같은 기업 환경의 패키지 관리 시스템(Package Management System)에서 이미 쿨다운 기능을 지원하며, pnpm을 사용하면 기본적으로 1일 쿨다운을 설정할 수 있다. 또한, depsguard와 같은 오픈 소스 도구를 활용하여 간편하게 쿨다운을 적용할 수 있다. 이는 공격자가 악성 코드를 배포한 후 피해를 최소화하는 데 효과적이다.
Postinstall 스크립트(Postinstall Scripts)의 위험성
커뮤니티에서는 postinstall 스크립트(Postinstall Scripts)의 존재 자체에 대한 근본적인 의문을 제기한다. 이러한 스크립트는 패키지 설치 시 임의의 코드를 실행할 수 있어, 공급망 공격의 주요 진입점이 된다. 한 사용자는 npm 팀이 특정 시점 이후에 릴리스된 패키지에 대해서만 postinstall 스크립트를 실행하도록 정책을 변경해야 한다고 주장한다. 이는 잠재적인 보안 위협을 줄이는 데 기여할 수 있다.
PGP 서명(PGP Signing)을 활용한 패키지 무결성 검증
한 사용자는 PGP(Pretty Good Privacy) 서명을 통해 패키지의 무결성을 보장하는 방안을 제시한다. PGP 서명은 패키지 배포자의 신원을 확인하고, 패키지 내용이 변조되지 않았음을 보장한다. 이는 악성 코드 삽입을 방지하는 데 효과적인 방법 중 하나이다. 하지만, PGP 서명 도입은 개발자들의 추가적인 설정 및 관리 부담을 야기할 수 있으며, npm 프로젝트가 이를 적극적으로 수용하지 않는다는 점이 문제로 지적된다.
안전한 생태계(Go/Rust)와의 비교 분석
댓글에서는 Go, Rust와 같은 언어의 패키지 관리 시스템(Package Management System)이 npm보다 안전한 이유를 분석한다. 이들 언어는 표준 라이브러리의 활용도가 높고, 빌드 과정에서 강력한 암호화 검증을 수행한다. 이는 서드파티 패키지에 대한 의존성을 줄이고, 공급망 공격의 위험을 감소시키는 데 기여한다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 보안을 강화하는 방법도 제시된다.