피드로 돌아가기
gomod-age: A Simple CI Gate Against Go Dependency Supply Chain Attacks
Dev.toDev.to
Security

신규 Go 패키지 배포 초기 72시간의 위험, gomod-age로 차단

gomod-age: A Simple CI Gate Against Go Dependency Supply Chain Attacks

r4mimu2026년 4월 4일5intermediate

Context

Go 생태계의 go.sum은 무결성만 검증할 뿐 패키지의 신뢰성 여부는 판단하지 못함. 악성 패키지가 배포된 후 커뮤니티에 의해 발견되기까지의 보안 공백 구간이 존재함. CI 파이프라인에서 검증되지 않은 최신 버전의 의존성을 즉시 수용하는 구조적 취약점이 있음.

Technical Solution

  • 의존성 패키지의 배포 시점을 GOPROXY에서 조회하여 설정된 임계값(기본 3일)과 비교하는 쿼런틴(Quarantine) 메커니즘 도입
  • -base 플래그를 통해 베이스 브랜치와 diff를 수행하고 변경된 모듈만 검사하여 불필요한 오탐지 제거
  • GOPRIVATE 설정을 자동으로 인식하여 내부 프라이빗 모듈은 검사 대상에서 제외하는 필터링 전략 적용
  • .gomod-age.yaml 설정 파일을 통한 특정 모듈의 glob 패턴 기반 제외 처리 및 버전별 개별 허용 리스트(Allow list) 관리
  • replace 지시문이 적용된 경우 원본이 아닌 교체된 대상 모듈의 배포 시간을 추적하는 정밀 검사 로직 구현
  • GOPROXY의 콤마(,) 및 파이프(|) 구분자 처리 방식을 그대로 준수하는 프록시 체인 호환 설계

Key Takeaway

보안은 단일 도구가 아닌 계층적 방어 체계로 구축해야 하며, 알려진 취약점(CVE) 탐지 이전에 '시간 기반의 신뢰 검증'이라는 단순하지만 강력한 휴리스틱 전략을 통해 공급망 공격의 초기 진입을 효과적으로 차단할 수 있음.


신규 의존성 추가 시 최소 3~7일의 에이징(Aging) 기간을 CI 게이트로 강제하여 공급망 공격 위험을 낮출 것

원문 읽기