공급망 공격 방어, 패키지 쿨다운(Cooldown) 도입이 답일까?
공급망 공격(Supply Chain Attack)의 위험성을 줄이기 위해, 패키지 릴리즈 후 일정 기간(쿨다운) 동안 설치를 유예하는 기능이 주목받고 있음.
자바스크립트(JavaScript) 생태계에서 가장 빠르게 도입되었으며, 핍(pip), 번들러(Bundler) 등 다양한 언어의 패키지 매니저에서도 쿨다운 기능이 추가되는 추세임.
쿨다운 기능은 절대 시간(Absolute Timestamp) 방식과 상대 시간(Relative Duration) 방식을 지원하며, 상대 시간 방식이 보안 측면에서 더 효과적임.
시스템 패키지 매니저(System Package Manager)는 릴리즈 전 검토 과정을 거치므로, 쿨다운의 필요성이 낮음.
다양한 패키지 매니저의 쿨다운(Cooldown) 구현 현황
자바스크립트(JavaScript) 생태계는 쿨다운 기능 도입에 가장 적극적으로 나서, PNPM, Yarn, Bun 등이 2025년에 관련 기능을 출시했다. 파이썬(Python)의 UV는 절대 시간 및 상대 시간 방식을 모두 지원하며, 핍(pip)은 절대 시간 방식만 지원한다. 루비(Ruby)의 Bundler는 쿨다운을 직접 지원하지 않지만, gem.coop을 통해 48시간 지연 기능을 제공한다. Cargo는 쿨다운 관련 RFC가 진행 중이며, Cargo 1.94에서 쿨다운 관련 인프라가 안정화될 예정이다. 쿨다운 기능은 공급망 공격(Supply Chain Attack) 방어에 기여할 수 있다.
쿨다운(Cooldown) 설정 방식 및 기술적 고려 사항
쿨다운 기능은 절대 시간(Absolute Timestamp)과 상대 시간(Relative Duration) 방식을 지원하며, 상대 시간 방식이 보안 측면에서 더 효과적이다. 상대 시간 방식은 릴리즈 시점과 관계없이 항상 최신 릴리즈를 일정 기간 동안 차단하므로, 공격자가 악성 코드를 배포한 후 빠르게 확산되는 것을 막을 수 있다. 핍(pip)의 경우, 상대 시간 지원에 대한 논의가 진행 중이며, 시간대(Timezone) 설정 문제도 고려해야 한다. 시간대 차이(Timezone Drift)로 인해 쿨다운 적용 여부가 달라질 수 있다.
시스템 패키지 매니저(System Package Manager)와 언어별 패키지 매니저의 차이점
시스템 패키지 매니저는 릴리즈 전에 검토 과정을 거치므로, 쿨다운의 필요성이 낮다. 예를 들어, 데비안(Debian)은 업로드된 패키지를 unstable, testing, stable 단계를 거쳐 배포하며, 각 단계에서 검토가 이루어진다. 반면, 언어별 패키지 매니저는 릴리즈와 배포가 동시에 이루어지므로, 쿨다운을 통해 보안 취약점을 보완해야 한다. 공급망 공격(Supply Chain Attack)의 주요 타겟이 되는 이유이다.
자동 업데이트 도구 및 쿨다운(Cooldown) 설정
자동 업데이트 도구인 Dependabot과 Renovate는 쿨다운 기능을 지원하며, 쿨다운 기간을 설정할 수 있다. Dependabot은 dependabot.yml 파일에서 쿨다운 설정을 지원하며, Snyk는 자동 업데이트 PR에 대해 21일의 쿨다운을 기본적으로 적용한다. 또한, npm-check-updates는 --cooldown 파라미터를 통해 쿨다운 기간을 설정할 수 있으며, StepSecurity는 쿨다운 기간 내에 릴리즈된 npm 패키지를 사용하는 PR을 실패시키는 GitHub PR check를 제공한다. 이러한 도구들을 통해 쿨다운 설정을 자동화할 수 있다.