원문 캡처 · kitware.com
원문 캡처 · kitware.com

TL;DR

  • CMake가 빌드 의존성 그래프를 활용해 설치 시점이나 빌드 트리에서 SPDX 3.0.1 JSON-LD 형식의 소프트웨어 자재 명세서(SBOM)를 생성하는 실험적 기능을 제공함.
  • 이 기능은 CMAKE_EXPERIMENTAL_GENERATE_SBOM에 해당 CMake 버전에서 요구하는 UUID를 설정하고 SPDX 생성을 요청해야 사용할 수 있음.
  • 명령줄에서 CMAKE_INSTALL_SBOM_FORMATS=SPDX를 지정하면 설치 가능한 내보내기 세트에 대해 설치 과정에서 SBOM이 생성되며, 대상은 미리 내보내기 세트와 연결돼 있어야 함.
  • 프로젝트의 install(SBOM) 명령이나 빌드 트리의 export(SBOM) 명령으로 SBOM을 만들 수 있고, 여러 내보내기 세트를 하나로 묶을 수도 있음.
  • 향후 개선 과제로 메타데이터 모델링, 전이 의존성 처리, 라이선스 보고, 패키징 및 CI 워크플로 통합이 제시됨.

CMake로 SBOM 생성하기

  • CMake는 프로젝트의 빌드 설명에서 소프트웨어 자재 명세서(SBOM)를 직접 생성하는 실험적 지원을 제공함.
  • 빌드 후 스캐너에 의존하는 대신 CMake가 컴파일과 링크에 사용하는 의존성 그래프를 바탕으로 표준 형식의 SBOM을 생성함.
  • 현재 지원하는 출력 형식은 SPDX이며, 기능이 성숙해지면 다른 SBOM 형식을 추가할 수 있도록 설계됨.

SBOM이란?

  • 소프트웨어 자재 명세서(SBOM)는 소프트웨어 시스템을 구성하는 요소를 기계가 읽을 수 있는 형식으로 기록한 목록임.
  • 일반적으로 패키지 이름과 버전, 의존 관계, 라이선스 식별자, 체크섬 및 메타데이터를 포함함.
  • 사이버 보안 분석, 라이선스 준수, 감사, 장기 유지 관리를 지원함.
  • SBOM 자체가 취약점 분석을 수행하는 것은 아니며, 후속 도구가 영향 및 준수 여부를 평가할 수 있도록 구조화된 데이터를 제공함.
  • CMake의 초기 구현은 소프트웨어 구성 요소 메타데이터의 표준 표현인 SPDX 3.0.1 JSON-LD를 사용함.
  • 빌드 과정에 SBOM 생성을 포함하면 모호성을 줄이고 외부 스캔 도구에 대한 의존을 낮춤.

실험적 SBOM 생성 활성화

  • SBOM 지원은 실험적 기능이며, CMAKE_EXPERIMENTAL_GENERATE_SBOM 변수에 현재 사용하는 CMake 버전에서 요구하는 UUID 값을 설정해 명시적으로 활성화해야 함.
  • UUID는 릴리스마다 변경될 수 있으므로, 사용하는 CMake 버전의 Help/dev/experimental.rst에서 올바른 값을 확인해야 함. 안내된 링크는 master 브랜치를 가리킴.
  • SPDX 생성도 별도로 요청해야 하며, 구성 시점 또는 프로젝트의 CMake 명령에서 지정할 수 있음.
  • 구성 시점에는 CMAKE_INSTALL_SBOM_FORMATS 변수에 SPDX를 지정함.
  • 명령줄에서는 소스 변경 없이 구성 단계에서 실험 기능 UUID와 SPDX 형식을 설정하고, 이어 빌드와 설치를 수행함.
  • CMAKE_INSTALL_SBOM_FORMATS가 SPDX로 설정되면 설치 과정에서 대상이 되는 설치 내보내기 세트의 SBOM을 자동 생성함.
  • 프로젝트는 설치 대상과 내보내기 세트를 이미 연결해야 함.

프로젝트에서 활성화

  • CMake 소스 코드를 수정할 수 있는 경우 install(SBOM) 변형 명령을 사용함.
  • 예제 프로젝트는 최소 CMake 버전을 4.3으로 설정하고, sbom_example이라는 프로젝트를 버전 0.0.1로 선언함.
  • 프로젝트 안에서 CMAKE_EXPERIMENTAL_GENERATE_SBOM에 UUID ca494ed3-b261-4205-a01f-603c95e4cae0를 설정함. 실제 사용 시에는 해당 CMake 버전의 Help/dev/experimental.rst와 일치하는 UUID를 사용해야 함.
  • 정적 라이브러리 libexample과 실행 파일 demo_app을 만들고, fmt 패키지를 찾아 demo_app에 libexample 및 fmt::fmt를 연결함.
  • demo_app을 bin 대상 위치에 설치하면서 demo_app 내보내기 세트에 포함함.
  • install(SBOM) 명령에서 SBOM 이름을 sbom_example, 내보내기 세트를 demo_app, 형식을 spdx, 대상 위치를 bin으로 지정함.
  • 프로젝트를 설치하면 sbom_example.spdx.json이 생성됨.
  • 생성된 SBOM의 일부에는 CMakeLists.txt 파일에서 생성됐다는 설명, 생성 시각 2026-04-22T15:35:07Z, 프로젝트 설명, 빌드 시각, fmt:fmt 패키지와 제공 조직, fmt의 버전 12.1.0, demo_app의 버전 0.0.1 및 애플리케이션 용도가 포함됨.

빌드 트리에서 생성

  • 설치를 수행하지 않고 SBOM이 필요한 CI 및 기타 워크플로에서는 export(SBOM)으로 빌드 트리에서 직접 생성할 수 있음.
  • 예제에서는 sbom_example을 이름으로 지정하고 demo_app 내보내기 세트와 spdx 형식을 사용함.
  • EXPORTS 옵션에는 여러 내보내기 세트를 지정할 수 있으며, 관련 구성 요소를 하나의 SBOM으로 결합할 수 있음.
  • 자세한 내용은 CMake의 install(SBOM) 및 export(SBOM) 문서에서 확인할 수 있음.

로드맵

  • SPDX가 첫 번째 지원 SBOM 형식이며, 향후 다른 형식도 도입할 수 있도록 구현됨.
  • 진행 중인 작업에는 더 풍부한 메타데이터 모델링, 전이 의존성의 개선된 처리, 강화된 라이선스 보고, 패키징 및 CI 워크플로와의 긴밀한 통합이 포함됨.
  • 실제 사용에서 얻는 피드백이 기능의 발전 방향에 직접 반영될 예정임.
  • 논의에는 CMake Discourse를, 문제 보고에는 CMake 이슈 트래커를 이용하도록 안내함.

감사의 말

  • 이 자료는 계약 번호 HR001124C0489에 따른 DARPA 지원으로 작성됨.
  • 자료에 담긴 의견, 조사 결과, 결론 또는 권고는 작성자들의 견해이며 DARPA의 견해를 반드시 반영하지는 않음.
  • 작업은 국가 안보 분야 비영리 단체 Riverside Research와 협력해 Kitware, Inc.가 수행함.