오픈소스 도구를 활용한 SBOM 생성

범용 오픈소스 도구를 활용하여 환경별로 SBOM을 생성하는 방법을 안내합니다.

SKT 제공 도구를 사용할 수 없거나, 이미 자체적인 빌드 파이프라인을 보유한 경우 오픈소스 도구를 직접 활용할 수 있습니다. 아래는 SK텔레콤이 검증한 주요 오픈소스 도구 목록과 공식 사용법 링크입니다.

도구 환경 구축에 익숙하지 않은 경우, Docker가 설치되어 있다면 BomLens를 먼저 검토해 보시기 바랍니다.

도구 선택 가이드

graph TD
    A[분석 대상 확인] --> B{소스코드인가?}
    B -- Yes --> C[cdxgen 권장]
    B -- No --> D{Docker 이미지인가?}
    D -- Yes --> E[Syft 또는 Trivy 권장]
    D -- No --> F[바이너리/펌웨어]
    F --> G[Syft 권장]

주요 도구 안내

cdxgen (소스코드 분석 권장)

Java, Python, Node.js, Go 등 다양한 언어 프로젝트를 자동 분석하여 CycloneDX 형식의 SBOM을 생성합니다.

Syft (컨테이너 이미지 및 바이너리 분석 권장)

빌드된 컨테이너 이미지나 패키지 매니저 메타데이터가 포함된 빌드 산출물을 분석하여 OS 패키지와 애플리케이션 라이브러리를 모두 식별합니다. CycloneDX 및 SPDX 형식을 지원합니다.

Trivy (컨테이너 이미지 분석)

컨테이너 이미지 분석과 취약점 스캔을 함께 수행할 수 있는 올인원 도구입니다.

언어별 전용 플러그인

빌드 도구 플러그인을 사용하면 더 정확한 의존성 정보를 추출할 수 있습니다.

언어/빌드 도구플러그인/도구공식 문서
Java (Maven)cyclonedx-maven-plugin링크
Java (Gradle)cyclonedx-gradle-plugin링크
Pythoncyclonedx-bom링크
Node.js@cyclonedx/cyclonedx-npm링크
Gocyclonedx-gomod링크

전이적 의존성 포함 확인

SK텔레콤 제출 SBOM은 전이적 의존성(Transitive Dependencies)을 반드시 포함해야 합니다.

전이적 의존성이란 프로젝트가 직접 선언하지 않았지만, 사용하는 라이브러리가 내부적으로 의존하는 라이브러리를 말합니다. 이 항목이 누락되면 숨겨진 취약점을 탐지할 수 없어 SBOM이 반려될 수 있습니다.

핵심 원칙: 빌드(패키지 설치) 완료 후 SBOM을 생성해야 합니다.

소스코드만 있는 상태에서는 전이적 의존성이 누락될 수 있습니다. 아래 표를 참고하여 SBOM 생성 전에 선행 작업을 완료하시기 바랍니다.

도구별 전이적 의존성 지원 현황

도구 / 방법전이적 의존성 포함SBOM 생성 전 선행 작업
cdxgen (소스코드)자동 포함별도 빌드 불필요 (자동 감지)
cdxgen (Java/Maven)조건부mvn package 또는 mvn dependency:resolve 먼저 실행
cdxgen (Java/Gradle)조건부./gradlew dependencies 먼저 실행
cdxgen (Python)조건부가상환경 활성화 후 pip install -r requirements.txt 먼저 실행
cdxgen (Node.js)조건부npm install 또는 yarn install 먼저 실행
Syft (Docker 이미지)자동 포함이미지 빌드 완료 후 스캔 (OS/앱 패키지 모두 포함)
Syft (파일시스템)조건부패키지 매니저 메타데이터가 포함된 배포 아티팩트만 가능. 설치 디렉터리나 원시 파일 모음은 purl이 누락됨
Maven 플러그인자동 포함mvn package 단계에서 자동 생성
Gradle 플러그인자동 포함./gradlew cyclonedxBom 실행

권장: Docker 이미지로 납품하는 경우, 빌드된 이미지를 Syft로 스캔하면 소스코드 분석보다 더 완전한 전이적 의존성을 포함할 수 있습니다.

공통 주의사항

도구를 사용하기 전 아래 사항을 확인하시기 바랍니다.

  • 전이적 의존성 포함 여부: 위 표를 참고하여 SBOM 생성 전 선행 작업을 완료합니다. 의존성 누락은 반려 사유가 됩니다.
  • PURL 포함 여부: 생성된 SBOM에 모든 컴포넌트의 purl 필드가 포함되어 있는지 확인합니다. SK텔레콤 시스템은 PURL을 기반으로 취약점을 매핑합니다. 제출 전 jq '[.components[] | select(.purl)] | length' sbom.json으로 purl 보유 컴포넌트 수를 세어 전체 컴포넌트 수와 일치하는지 확인하고, 0이거나 현저히 적으면 검증 체크리스트의 절차에 따라 재생성하시기 바랍니다.
  • 출력 포맷: CycloneDX JSON 형식을 권장합니다. (-o cyclonedx-json 또는 동등한 옵션 사용)
  • 프로젝트 정보: 메타데이터에 납품 프로젝트의 이름과 버전이 정확히 기입되었는지 확인합니다.

관련 문서