trivy

2 개의 포스트

3월 공급망 사고를 통해 본 파이프라인 보안 교훈 (새 탭에서 열림)

최근 발생한 일련의 공급망 공격 사례들은 CI/CD 파이프라인이 현대 소프트웨어 보안의 가장 취약한 고리이자 정교한 위협 행위자들의 핵심 타겟임을 보여줍니다. 이 글은 Trivy, axios 등 주요 오픈소스 도구의 침해 사례를 통해 파이프라인의 내재적 위험을 분석하고, GitLab의 '파이프라인 실행 정책(PEP)'을 활용하여 이러한 공격 패턴을 사전에 차단하고 탐지하는 구체적인 방안을 제시합니다. ## 3월 공급망 공격 사례와 파급력 * **Trivy 및 Checkmarx KICS 침해:** 보안 스캐너 자체가 공격 경로가 되어 CI/CD 환경 변수, 클라우드 토큰, SSH 키 등 민감한 자격 증명을 탈취하는 악성 코드가 삽입되었습니다. * **LiteLLM 백도어 배포:** 침해된 Trivy를 통해 유출된 자격 증명을 사용하여 PyPI에 백도어가 포함된 버전을 게시했으며, 이는 설치 시 즉시 실행되어 데이터를 외부로 유출했습니다. * **AI 코딩 어시스턴트 소스 코드 유출:** 패키징 설정 오류(.npmignore 미비)로 인해 59.8MB에 달하는 전체 소스 코드가 포함된 소스 맵 파일이 공용 npm 저장소에 노출되었습니다. * **axios 트로이목마 주입:** 메인테이너 계정 탈취를 통해 원격 제어 트로이목마(RAT)를 배포하는 악성 종속성이 주입되어 수백만 명의 사용자에게 영향을 미쳤습니다. ## 공급망 공격의 주요 패턴 * **도구 및 액션의 오염:** 파이프라인 내에서 실행되는 보안 도구를 무비판적으로 신뢰하는 점을 악용하며, 가변적인 버전 태그(Tag)를 통해 악성 코드가 주입됩니다. * **패키징 구성 오류:** 빌드 과정에서의 설정 실수로 디버깅 아티팩트나 내부 설정 파일이 운영 패키지에 포함되어 지적 재산권(IP)이 유출되는 경로가 됩니다. * **전이적 종속성 취약점:** 직접적인 종속성뿐만 아니라 하위 종속성 트리에 악성 코드를 심어 전체 빌드 인프라로 위협을 확산시킵니다. ## GitLab 파이프라인 실행 정책(PEP)을 통한 방어 * **강제적 보안 작업 주입:** 개발자가 정의한 `.gitlab-ci.yml` 설정과 관계없이, 조직 전체의 파이프라인에 보안 작업을 강제로 삽입하며 이는 개발자가 임의로 건너뛸 수 없습니다. * **패키징 검증 자동화:** 패키지 배포 전 단계에서 소스 맵, 내부 설정 파일(.env), 소름 돋는 대용량 파일 등 예기치 않은 파일의 포함 여부를 허용 목록과 대조하여 차단합니다. * **불변 식별자 사용 강제:** 도구 및 액션 사용 시 가변적인 태그 대신 불변의 커밋 SHA 또는 이미지 디지스트(Digest) 사용을 강제하여 태그 오염 공격을 방어합니다. * **종속성 드리프트 감지:** 락파일(lockfile)의 상태를 비교하여 예상치 못한 신규 종속성이나 버전 변경이 감지될 경우 빌드를 중단하고 보안 팀에 알림을 보냅니다. 조직의 보안을 개별 프로젝트의 설정에 의존하는 것은 위험합니다. 중앙 집중식 파이프라인 실행 정책을 통해 보안 검사를 표준화하고 강제함으로써, 신뢰 기반의 공급망 공격으로부터 인프라와 지적 재산권을 효과적으로 보호할 수 있습니다.

깃랩 컨테이너 스 (새 탭에서 열림)

GitLab은 컨테이너 라이프사이클 전반에서 발생할 수 있는 보안 위협에 대응하기 위해 파이프라인 기반 스캐닝부터 레지스트리 모니터링까지 다섯 가지 핵심 스캐닝 방식을 제공합니다. 이를 통해 개발자는 취약점을 조기에 발견하는 '시프트 레프트(Shift-left)' 보안을 실현하고, 프로덕션 환경에 배포된 이미지의 안전성을 지속적으로 확보할 수 있습니다. 결과적으로 GitLab의 컨테이너 스캐닝은 단순한 도구를 넘어 소프트웨어 구성 분석(SCA)의 필수 요소로서 통합적인 보안 관리 워크플로우를 구축하도록 돕습니다. ### 파이프라인 기반 컨테이너 스캐닝 * **기능 및 목적**: CI/CD 파이프라인 실행 단계에서 컨테이너 이미지를 검사하여 취약점이 포함된 이미지가 배포되는 것을 사전에 차단합니다. * **기술적 특징**: 오픈 소스 보안 스캐너인 Trivy를 활용하며, Free부터 Ultimate 티어까지 폭넓게 사용할 수 있습니다. * **설정 방법**: 프로젝트의 보안 구성 메뉴에서 머지 요청(MR)을 통해 자동 설정하거나, `.gitlab-ci.yml` 파일에 `Jobs/Container-Scanning.gitlab-ci.yml` 템플릿을 직접 추가하여 활성화합니다. * **사용자 정의**: `CS_IMAGE` 변수를 통해 특정 이미지를 지정하거나, `CS_SEVERITY_THRESHOLD` 변수를 사용해 'High' 또는 'Critical' 등 특정 수준 이상의 취약점만 필터링하여 리포팅하도록 설정할 수 있습니다. ### 취약점 가시성 및 관리 통합 * **머지 요청(MR) 위젯**: 스캔 결과가 MR 페이지 내 보안 위젯에 즉시 노출되어, 개발자가 코드를 병합하기 전에 영향받는 패키지와 해결 가이드를 확인할 수 있습니다. * **중앙 집중식 취약점 보고서**: 보안 팀은 'Vulnerability Report'를 통해 프로젝트 전체의 취약점을 통합 관리하며, 상태 관리(탐지됨, 확인됨, 해결됨 등) 및 담당자 할당이 가능합니다. * **의존성 목록(SBOM)**: 컨테이너 내부의 모든 운영체제 패키지와 애플리케이션 라이브러리를 카탈로그화하여 제공합니다. 이를 통해 소프트웨어 자재 명세서(SBOM)를 관리하고 공급망 보안을 강화할 수 있습니다. ### 레지스트리용 컨테이너 스캐닝 * **자동 모니터링**: GitLab 컨테이너 레지스트리에 푸시된 `latest` 태그 이미지를 대상으로 보안 정책 봇이 자동 스캔을 트리거합니다. * **지속적 취약점 탐지**: Ultimate 티어에서 제공되는 이 기능은 수동 파이프라인 실행 없이도 최신 취약점 데이터베이스(Advisories)를 바탕으로 이미지를 지속적으로 감시합니다. * **활성화 조건**: 프로젝트에 최소 하나 이상의 커밋이 있어야 하며, 컨테이너 레지스트리 알림 기능이 구성된 상태에서 '보안 구성' 메뉴의 토글 스위치를 통해 활성화할 수 있습니다. ### 성공적인 컨테이너 보안을 위한 제언 효과적인 보안 운영을 위해 먼저 **파이프라인 기반 스캐닝**을 도입하여 개발 초기 단계에서 취약점을 걸러내는 환경을 조성하는 것이 중요합니다. 이후 서비스 규모가 커지면 **레지스트리용 스캐닝**을 병행하여 배포된 이후에 새롭게 발견되는 제로데이 취약점 등에 실시간으로 대응하는 다층 방어 전략을 권장합니다.