본문으로 건너뛰기

SBOM 생성

우리 서비스에 어떤 라이브러리가 포함되어 있는지 정확히 알고 계신가요? SBOM(Software Bill of Materials)은 소프트웨어에 포함된 모든 구성요소의 목록입니다. 마치 식품의 "재료 목록"처럼, 소프트웨어가 어떤 부품들로 이루어져 있는지 투명하게 보여줍니다.

SBOM이 왜 중요한가요?

Log4Shell(CVE-2021-44228) 같은 보안 사고가 발생했을 때, SBOM이 있으면 "우리 서비스 중 어디에 Log4j가 사용되고 있지?"라는 질문에 즉시 답할 수 있습니다. SBOM 없이는 모든 서비스를 일일이 확인해야 하므로 대응이 늦어질 수밖에 없습니다.

SBOM 결과

개요

  • SBOM이란: 소프트웨어에 포함된 모든 구성요소(라이브러리, 패키지 등)의 목록
  • 생성 시점: Build 단계 (이미지 빌드 후)
  • 표준 형식: CycloneDX, SPDX
  • 생성 도구: Trivy

SBOM의 필요성

규정 준수

전 세계적으로 SBOM 제출을 의무화하는 규정이 늘어나고 있습니다.

  • EO 14028 (미국): 미국 연방정부와 거래하는 소프트웨어 공급업체는 SBOM을 제공해야 합니다.
  • EU CRA (유럽): 유럽 사이버 복원력법에 따라 디지털 제품에 SBOM이 필요합니다.
  • NTIA: 미국 상무부에서 정의한 최소 SBOM 요소를 충족해야 합니다.

보안 관리

  • 공급망 공격 대응: 어떤 구성요소가 포함되어 있는지 파악하여 공급망 공격에 빠르게 대응
  • 취약점 영향 범위 파악: 새로운 CVE가 발표되면 영향받는 서비스를 즉시 식별
  • 라이선스 컴플라이언스: 사용 중인 오픈소스 라이선스 파악 및 관리
비즈니스 가치

정부 기관이나 대기업과 거래할 때 SBOM 제출이 요구되는 경우가 늘고 있습니다. 미리 SBOM 생성 프로세스를 구축해두면 비즈니스 기회를 놓치지 않을 수 있습니다.


Step 1: SBOM 생성 시작하기

  1. [서비스 관리] 페이지로 이동합니다.
  2. 대상 서비스를 선택합니다.
  3. Build 단계를 클릭합니다.
  4. SCA 탭을 선택합니다.
  5. SBOM 생성 버튼을 클릭합니다.

Step 2: 생성 옵션 설정

2.1 출력 형식 선택

두 가지 국제 표준 형식을 지원합니다:

  • CycloneDX: OWASP에서 관리하는 표준입니다. 보안 분석과 취약점 관리에 최적화되어 있습니다. 보안이 주요 관심사라면 이 형식을 권장합니다.

  • SPDX: Linux Foundation에서 관리하는 표준입니다. 라이선스 컴플라이언스에 최적화되어 있습니다. 오픈소스 라이선스 관리가 중요하다면 이 형식을 선택하세요.

2.2 생성 범위 선택

  • 전체: OS 패키지 + 애플리케이션 패키지 (권장)
  • OS만: 시스템 레벨 패키지만 포함
  • App만: 애플리케이션 의존성만 포함
어떤 형식을 선택해야 할까요?

특별한 요구사항이 없다면 CycloneDX 전체를 선택하세요. 보안 분석과 연동하기 좋고, 대부분의 도구에서 지원됩니다.


Step 3: SBOM 생성

생성 진행

생성이 시작되면 다음과 같은 단계로 진행됩니다:

[1/3] Analyzing container image...     ← 컨테이너 이미지 분석
[2/3] Extracting component information... ← 구성요소 정보 추출
→ OS packages: 45 ← OS 패키지 45개
→ Application packages: 128 ← 애플리케이션 패키지 128개
→ Total: 173 components ← 총 173개 구성요소
[3/3] Generating SBOM document... ← SBOM 문서 생성
SBOM generated successfully! ← 완료

보통 1-2분 내에 완료됩니다.


Step 4: SBOM 다운로드 및 활용

4.1 다운로드 옵션

  • JSON (sbom.json): 프로그래밍 처리에 적합합니다. 자동화 파이프라인에서 사용하기 좋습니다.
  • XML (sbom.xml): 시스템 통합에 적합합니다. 기존 엔터프라이즈 도구와 연동할 때 유용합니다.

4.2 다운로드 방법

  1. SBOM 다운로드 버튼을 클릭합니다.
  2. 원하는 형식(JSON/XML)을 선택합니다.
  3. 파일을 저장합니다.

SBOM 내용 이해하기

CycloneDX 예시

{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"serialNumber": "urn:uuid:...",
"version": 1,
"metadata": {
"timestamp": "2024-02-15T10:00:00Z",
"component": {
"type": "container",
"name": "my-app",
"version": "1.0.0"
}
},
"components": [
{
"type": "library",
"name": "express",
"version": "4.18.2",
"purl": "pkg:npm/express@4.18.2",
"licenses": [{"id": "MIT"}]
}
]
}

포함되는 정보

SBOM에는 각 구성요소에 대해 다음 정보가 포함됩니다:

  • 이름: 패키지/컴포넌트 이름
  • 버전: 정확한 설치 버전
  • PURL (Package URL): 패키지를 고유하게 식별하는 표준 식별자
    • 예: pkg:npm/express@4.18.2
  • 라이선스: MIT, Apache-2.0, GPL 등 라이선스 정보
  • 해시: 파일 무결성 검증을 위한 해시값
  • 공급자: 패키지 제작자 또는 배포자
PURL이란?

Package URL(PURL)은 패키지를 전 세계적으로 고유하게 식별하는 표준입니다. pkg:npm/express@4.18.2처럼 표기되며, 패키지 타입, 이름, 버전을 하나의 문자열로 표현합니다. 이를 통해 서로 다른 시스템 간에 동일한 패키지를 정확히 참조할 수 있습니다.


SBOM 활용 사례

취약점 분석 연동

새로운 CVE가 발표되었을 때 SBOM을 활용하면 영향받는 서비스를 빠르게 찾을 수 있습니다.

  1. SBOM을 생성하고 저장해둡니다.
  2. 새로운 CVE가 발표되면 SBOM과 대조합니다.
  3. 해당 취약점이 포함된 패키지를 사용하는 서비스를 자동으로 식별합니다.
  4. 영향받는 서비스에 대해 빠르게 대응 조치를 취합니다.

라이선스 분석

오픈소스 라이선스 위반은 법적 문제로 이어질 수 있습니다. SBOM을 통해 사용 중인 라이선스를 파악하세요.

  • MIT (허용적): 저작권 표시만 하면 자유롭게 사용 가능합니다.
  • Apache-2.0 (허용적): 변경사항을 명시해야 합니다.
  • GPL-3.0 (Copyleft): 파생 작업물도 소스 코드 공개가 필요합니다.
  • LGPL (Copyleft - 약함): 라이브러리 형태로 사용 시 소스 공개가 불필요합니다.
GPL 라이선스 주의

GPL 라이선스 라이브러리를 사용하면 파생 작업물의 소스 코드도 공개해야 할 수 있습니다. 상용 소프트웨어에서는 GPL 라이선스 사용에 주의가 필요합니다. SBOM에서 GPL 라이선스가 발견되면 법무팀과 상의하세요.

공급망 검증

  • 서드파티 컴포넌트 검증: 알려지지 않은 공급자의 패키지가 포함되어 있지 않은지 확인
  • 악성 패키지 탐지: 타이포스쿼팅(typosquatting) 등으로 유입된 악성 패키지 탐지
  • 의존성 변경 추적: 버전 간 SBOM을 비교하여 의존성 변경 사항 파악

자동 생성 설정

빌드 시 자동 생성

매 빌드마다 자동으로 SBOM을 생성하도록 설정할 수 있습니다.

  1. Auto CI 설정을 엽니다.
  2. SBOM 자동 생성을 활성화합니다.
  3. 출력 형식(CycloneDX/SPDX)을 선택합니다.
  4. 저장을 클릭합니다.

저장 위치 옵션

생성된 SBOM을 어디에 저장할지 선택할 수 있습니다:

  • KIWI 저장소: KIWI 내부에 저장하여 KIWI UI에서 조회 가능
  • 아티팩트 저장소: Harbor, Nexus 등 별도 저장소에 이미지와 함께 저장
  • Git 저장소: 소스 저장소에 커밋하여 버전 관리
SBOM 보관 기간

규정 준수를 위해 SBOM을 일정 기간 보관해야 할 수 있습니다. 자동 삭제 정책을 설정하기 전에 규정 요구사항을 확인하세요.


문제 해결

생성 실패

  • 이미지 접근 불가: 컨테이너 레지스트리 인증 정보를 확인하세요. 토큰이 만료되었거나 권한이 부족할 수 있습니다.

  • 지원하지 않는 패키지 형식: 일부 특수한 패키지 매니저는 지원되지 않을 수 있습니다. 지원 형식 목록을 확인하세요.

불완전한 SBOM

생성된 SBOM에 일부 패키지가 누락된 경우:

  • Lock 파일 없음: package-lock.json, yarn.lock 등의 lock 파일이 없으면 정확한 버전 정보를 추출할 수 없습니다. lock 파일을 생성하고 이미지에 포함하세요.

  • 빌드 아티팩트 없음: 컴파일된 바이너리만 있고 소스가 없는 경우 패키지 정보 추출이 제한될 수 있습니다. 빌드 후에 SBOM을 생성하세요.

  • 멀티스테이지 빌드: 멀티스테이지 빌드에서 최종 이미지에 복사되지 않은 패키지는 SBOM에 포함되지 않습니다. 이는 정상적인 동작입니다.


관련 가이드