- 의존성 쿨다운(dependency cooldown) 은 오픈소스 공급망 공격의 대부분을 완화할 수 있는 간단하고 효과적인 보안 기법
- 공격자는 보통 인기 오픈소스 프로젝트를 탈취해 악성 코드를 배포하지만, 대부분의 공격 노출 기간이 일주일 이하로 짧음
- 새 버전 공개 후 일정 기간(예: 7일) 대기하는 쿨다운을 설정하면, 자동 업데이트로 인한 감염 위험을 크게 줄일 수 있음
- Dependabot, Renovate, pnpm 등은 이미 쿨다운 기능을 기본 지원하며, 설정이 쉽고 추가 비용이 없음
- 패키지 관리자 수준에서 쿨다운을 기본 제공하면, 공급망 보안 강화와 불필요한 경보 감소에 기여 가능
공급망 공격의 구조와 문제점
- 대부분의 공급망 공격(supply chain attack) 은 동일한 패턴을 가짐
- 공격자가 인기 오픈소스 프로젝트의 자격 증명 탈취 또는 CI/CD 취약점을 이용해 접근
- 악성 변경을 배포 채널(PyPI, npm 등)에 업로드
- 자동 업데이트나 버전 고정 미비로 인해 사용자가 감염된 버전을 설치
- 보안 벤더가 이를 탐지해 경고 후, 패키지 저장소가 해당 버전을 제거
- (1)~(2)단계 간격은 길지만, (2)~(5)단계는 수 시간~수일 내 처리되어 공격자의 활동 기간이 짧음
- 최근 18개월간 주요 사례의 공격 가능 기간(window of opportunity)
- xz-utils: 약 5주
- Ultralytics: 12시간(1단계), 1시간(2단계)
- tj-actions: 3일
- chalk: 12시간 미만
- Nx: 4시간
- rspack: 1시간
- num2words: 12시간 미만
- Kong Ingress Controller: 약 10일
- web3.js: 5시간
- 이 중 8건이 1주 미만의 공격 기간을 가졌으며, 대부분 쿨다운으로 차단 가능
쿨다운의 개념과 효과
-
쿨다운(cooldown) 은 새 의존성이 공개된 후 일정 기간 동안 사용을 지연하는 방식
- 이 기간 동안 보안 벤더가 악성 여부를 탐지할 수 있음
- 장점
- 실증적으로 효과적이며, 대규모 공격의 대부분을 차단
- 구현이 매우 간단하고 대부분의 도구에서 무료로 설정 가능
- Dependabot 예시
version: 2 - package-ecosystem: github-actions directory: / schedule: interval: weekly cooldown: default-days: 7 - 보안 벤더의 긍정적 행동 유도: 과도한 경보나 홍보 대신 신속한 탐지에 집중하게 함
결론 및 제언
- 10건 중 8건의 공격이 1주 이하의 기간이었으며, 7일 쿨다운으로 대부분 차단 가능
- 14일 쿨다운을 적용하면 xz-utils를 제외한 모든 사례 방어 가능
- 쿨다운은 완벽한 해결책은 아니지만, 노출 위험을 80~90% 줄이는 간단한 방법
- Dependabot, Renovate 외에도 패키지 관리자 자체에서 쿨다운을 기본 지원하도록 개선 필요
- 공급망 보안은 기술적 문제뿐 아니라 사회적 신뢰 구조의 문제이지만, 쿨다운은 현실적 완화책으로 유용함