오픈소스 도구를 활용한 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 또는 동등한 옵션 사용)
    • 프로젝트 정보: 메타데이터에 납품 프로젝트의 이름과 버전이 정확히 기입되었는지 확인합니다.

    관련 문서