SBOM 생성 방법

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

개요

SK텔레콤 제공 도구를 사용할 수 없거나, 이미 자체적인 빌드 파이프라인을 보유한 경우 오픈소스 도구를 활용할 수 있습니다. 본 가이드에서는 SK텔레콤이 검증한 오픈소스 도구들의 사용법을 안내합니다.

도구 환경 구축에 익숙하지 않은 경우, Docker가 설치되어 있다면 SK텔레콤 제공 도구를 참고하시기 바랍니다.

도구 선택 가이드

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

상세 가이드

하위 메뉴에서 각 도구별 상세 사용법을 확인하실 수 있습니다.

  1. 빠른 시작 (cdxgen): 가장 범용적으로 사용되는 cdxgen 도구 사용법
  2. 언어별 가이드: Java, Python, Node.js 등 언어별 전용 도구 설정법
  3. Docker 이미지: 컨테이너 이미지 및 파일시스템 분석 방법

1 - 빠른 시작

범용 도구인 cdxgen을 사용하여 다양한 언어의 프로젝트를 분석하는 방법입니다.

cdxgen 소개

cdxgen은 CycloneDX 형식을 기본 지원하며, 별도의 복잡한 설정 없이 프로젝트 구조를 자동 분석하여 SBOM을 생성해주는 강력한 도구입니다.

추천 대상

  • 소스코드 형태로 납품하는 경우
  • 여러 언어가 섞인 프로젝트 (예: Java 백엔드 + React 프론트엔드)
  • 빠르게 SBOM을 생성하고 싶은 경우

설치 및 실행

1. 설치 (Node.js 필요)

npm install -g @cyclonedx/cdxgen

2. 기본 실행

프로젝트 루트 디렉토리에서 아래 명령어를 실행합니다.

# 기본 생성 (bom.json 생성)
cdxgen -o bom.json

3. 프로젝트 정보 포함 (권장)

SK텔레콤 제출 규격을 준수하기 위해 프로젝트 이름과 버전을 명시합니다.

cdxgen -o bom.json --project-name "MyPaymentApp" --project-version "1.0.0"

4. 언어 타입 명시 (정확도 향상)

특정 언어만 분석하거나 정확도를 높이려면 -t 옵션을 사용합니다.

# Java 프로젝트 명시
cdxgen -t java -o bom.json

# Python 프로젝트 명시
cdxgen -t python -o bom.json

2 - 언어별 가이드

Java, Python, Node.js 등 주요 언어별 패키지 매니저 파일과 전용 도구 활용법을 안내합니다.

1. Java (Maven / Gradle)

Java 프로젝트는 빌드 도구의 플러그인을 사용하는 것이 가장 정확합니다.

Maven

pom.xml에 플러그인을 추가하여 빌드 시 생성합니다.

<plugin>
    <groupId>org.cyclonedx</groupId>
    <artifactId>cyclonedx-maven-plugin</artifactId>
    <version>2.7.9</version>
</plugin>
  • 실행: mvn cyclonedx:makeAggregateBom

Gradle

build.gradle에 플러그인을 적용합니다.

plugins {
    id 'org.cyclonedx.bom' version '1.7.4'
}
  • 실행: ./gradlew cyclonedxBom

2. Python (pip / Poetry)

pip (requirements.txt)

가상환경이 활성화된 상태에서 실행하는 것이 좋습니다.

pip install cyclonedx-bom
cyclonedx-py requirements -o bom.json

Poetry

poetry run cyclonedx-py poetry -o bom.json

3. Node.js (npm / Yarn)

package.jsonpackage-lock.json(또는 yarn.lock)이 있는 위치에서 실행합니다.

npm install -g @cyclonedx/cyclonedx-npm
cyclonedx-npm --output-file bom.json

4. Go (Go Modules)

go.mod 파일이 있는 위치에서 실행합니다.

go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest
cyclonedx-gomod app -json -output bom.json

3 - Docker 이미지

Syft 도구를 사용하여 컨테이너 이미지 및 파일시스템 내부를 분석하는 방법입니다.

Syft 소개

Syft는 컨테이너 이미지 분석에 특화된 도구로, 이미지 레이어 내의 OS 패키지(APK, DEB, RPM)와 애플리케이션 라이브러리를 모두 식별합니다.

설치

# Linux / macOS
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

사용 방법

1. Docker 이미지 스캔

로컬 Docker 데몬에 있는 이미지나 원격 레지스트리의 이미지를 분석합니다.

# CycloneDX JSON 형식으로 출력
syft "myapp:latest" -o cyclonedx-json=bom.json

2. 이미지 파일(.tar) 스캔

docker save로 저장된 타르볼 파일도 분석 가능합니다.

syft "docker-archive:myapp.tar" -o cyclonedx-json=bom.json

3. 디렉토리 스캔 (RootFS)

이미지 내부 파일시스템이나 특정 디렉토리를 스캔할 때 사용합니다.

syft "dir:./rootfs" -o cyclonedx-json=bom.json