320x100
320x100

npm의 보안 개선

npm의 Trusted publishing, provenance, 세분화 토큰 등의 개선은 "배포" 측면을 보호하지만

"소비" 단계에서 악성 패키지 설치 자체를 막지는 못함

 

npm install 및 npm update 시 lifecycle scripts (preinstall, postinstall 등)가 패키지 안정성 평가 이전에 개발자 권한으로 임의 코드를 실행할 수 있는 구조임

 

스크립트가 npm / GitHub / AWS / DB 자격 증명 / 소스코드 / 클라우드 인프라 / 파일 시스템 전체에 접근이 가능함

 

Shai-Hulud 같은 공격은 이 구조를 악용하며, 유지 보수가 계정이 탈취되면 악성 스크립트가 실행되어 커뮤니티가 감지하기 전에 피해가 발생할 수 있음

 

 

 

 

해결 방안 - npm의 배포 측 개선 + pnpm의 소비 측 제어의 상호 보완 (defense-in-depth)

pnpm은 기본적으로 lifecycle script를 차단하고 설치를 경고

 

pnpm-workspace.yaml 파일의 설정을 통해 스크립트가 있으면 설치가 실패하도록 강제화 가능 (strcitDepBuilds: true)

 

설치 실패 설정을 통해 다음의 단계를 강제할 수 있음

- pnpm이 어떤 패키지에 스크립트가 있는지 명확히 알려줌

- 스크립트 동작을 조사하고 이해

- 허용/차단을 사람 판단으로 의식적으로 결정하고 문서화

 

최근에 배포된 버전은 일정 쿨다운 기간 동안 설치를 막아, 커뮤니티가 악성 패키지를 탐지, 제거할 시간을 벌어줌

 

이전보다 약한 인증으로 배포된 버전이 나타나면 설치를 차단할 수 도 있음

 

 

 

 

 

 

 

Reference

https://news.hada.io/topic?id=25183

 

npm 공급망 공격으로부터 보호하는 방법 | GeekNews

Seattle Times는 Shai-Hulud 2.0 공격을 우연히 피했지만, 운이 보안 전략이 될 수 없다는 전제에서 클라이언트 측 방어를 도입함npm의 Trusted publishing / provenance / 세분화 토큰 같은 개선은 “배포” 측면

news.hada.io

 

300x250
728x90