
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에 UUIDca494ed3-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.가 수행함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요