가이드 · CRA 실무

SBOM 생성 및 취약점 보고 가이드

CRA가 요구하는 실무 — 기계판독 가능한 SBOM을 만드는 일, 제14조에 따라 24시간 안에 보고하는 일, 그리고 제조자 의무 전체를 조항별로 확인하는 일. EU 역외 제조업체, 특히 국내 수출기업 관점에서 정리했습니다.

1 · 법적 근거

SBOM 작성은 권장 사항이 아니라 법적 의무입니다. 부속서 I 제2부(취약점 처리 요구사항) 제1항은 제조업체에게 다음을 요구합니다.

제품에 포함된 취약점과 구성요소를 식별하고 문서화할 것. 여기에는 통용되는 기계판독 가능 형식으로, 최소한 제품의 최상위 종속성을 포괄하는 소프트웨어 자재명세서(SBOM)를 작성하는 것이 포함됩니다. 규정 (EU) 2024/2847, 부속서 I 제2부 제1항

CRA의 여러 조항은 해석의 여지를 남겨 두지만, 이 조항은 그렇지 않습니다. “기계판독 가능한 형식”과 “최소한 최상위 종속성”은 반드시 지켜야 하는 최저 기준이며, 다른 수단으로 대신할 수 없습니다.

2 · 범위와 형식

포함 범위

법이 정한 최저 기준은 최상위 종속성입니다. 다만 이것은 출발점일 뿐, 목표로 삼을 수준은 아닙니다. 최상위 종속성만 담은 SBOM으로도 법 조문은 충족할 수 있지만, 실제 취약점 관리에는 부족한 경우가 대부분입니다. 가능한 범위까지 전이(간접) 종속성을 포함하시기를 권합니다.

허용되는 형식

  • SPDX (ISO/IEC 5962:2021) — 라이선스 관리에 강점이 있어 규제 대응 문서에 널리 쓰입니다.
  • CycloneDX — 보안 중심으로 설계되어 취약점 관리 워크플로에 적합합니다.
  • 그 밖에 공인된 도구가 생성하는 구조화된 JSON · XML 형식
PDF는 형식 요건을 충족하지 못합니다 SBOM을 PDF로 보관하면 시장감시당국이 기계판독 불가로 판단할 수 있습니다. 도구가 생성한 원본 JSON · XML 파일을 그대로 보관하십시오.

메타데이터 — CRA 명문 요건과 실무 권장 항목

CRA 부속서 I 제2부 (1)이 직접 요구하는 내용은 두 가지입니다. SBOM은 통용되는 기계판독 가능한 형식이어야 하고, 최소한 최상위 종속성을 포함해야 합니다. 세부 필드는 집행위원회가 이행법으로 정할 수 있습니다(제13조). 그 전까지 아래 표의 나머지 항목은 업계 기준(NTIA 최소 요소, BSI TR-03183 등)을 참고한 실무 권장 사항입니다.

항목구분설명
구성요소명명문 요건 충족의 전제라이브러리 · 패키지 · 모듈의 고유 식별자
버전명문 요건 충족의 전제정확한 버전 문자열. 버전 범위만으로는 취약점을 식별할 수 없습니다.
종속 관계최상위 종속성은 명문 요건직접 · 전이 종속성 구분, 가능하면 종속성 그래프까지
공급자 · 출처실무 권장배포자, 벤더 또는 오픈소스 프로젝트명
암호학적 해시실무 권장구성요소별 SHA-256 이상의 무결성 값
라이선스 식별자실무 권장SPDX 라이선스 표현식 (예: Apache-2.0, MIT)
패키지 좌표(purl)는 반드시 포함하십시오 위 표에는 없지만 실무에서 가장 중요한 항목입니다. purl이 없으면 취약점을 자동으로 대조할 수 없습니다. 예를 들어 Maven은 groupId:artifactId 형태가 아니면 조회 결과가 0건으로 나오는데, 이것이 오류가 아니라 “취약점 없음”처럼 보인다는 점이 문제입니다. 대부분의 생성 도구가 purl을 자동으로 넣어 주지만, 결과 파일에서 직접 확인하시기 바랍니다.

3 · 생성 방법

최신 빌드 환경은 대부분 별도 비용 없이 빌드 시점에 SBOM을 자동으로 생성할 수 있습니다.

Syft (Anchore)

소스 디렉터리, 파일시스템, 컨테이너 이미지로부터 SPDX와 CycloneDX를 생성하는 오픈소스 CLI입니다. 가장 범용적으로 쓸 수 있는 도구입니다.

# 소스 디렉터리에서
syft scan dir:. -o spdx-json > sbom.json

# 컨테이너 이미지에서 (OS 패키지 포함)
syft scan registry.example.com/app:1.2.3 -o cyclonedx-json > sbom.json

CI 내장 기능

  • GitHub — Dependency Graph → Export SBOM (Settings → Code security). SPDX JSON으로 내보냅니다.
  • GitLab — 종속성 스캔(Dependency Scanning) CI 작업이 CycloneDX 보고서를 기본으로 생성합니다.
  • cdxgen — npm, Maven, pip, Go, Rust 등 여러 언어의 프로젝트에서 CycloneDX를 생성합니다.

출시 전 취약점 점검

SBOM을 확정하기 전에 모든 구성요소를 알려진 취약점 데이터와 대조하십시오. 부속서 I 제1부 (2)(a)는 제품을 알려진 악용 가능한 취약점이 없는 상태로 출시하도록 요구합니다. 수정 버전이 나와 있는 취약점을 그대로 둔 채 출시하면 이 요건을 위반할 가능성이 큽니다.

패치가 있다면 출시 전에 적용하는 것이 원칙입니다 수정 버전을 적용하지 않기로 했다면, 해당 취약점이 이 제품에서 악용될 수 없는 근거(사용하지 않는 코드 경로, 완화 조치, VEX 진술 등)를 위험평가와 기술문서에 남겨야 합니다. 근거 없이 남겨 둔 알려진 취약점은 당국에 설명하기 어렵습니다. 최종 판단은 제품 구조에 따라 달라지므로 전문가 검토를 권합니다.

4 · 임베디드 C/C++ — 실제로 어려운 부분

웹·모바일 환경에서는 SBOM 생성이 사실상 자동화되어 있습니다. 하지만 한국의 산업용·차량용·임베디드 제조사가 실제로 다루는 환경은 사정이 다릅니다.

환경대응 방법
Yocto · OpenEmbeddedcreate-spdx 클래스를 쓰면 빌드 시 SPDX가 생성됩니다. 이미지 레시피에 INHERIT += "create-spdx"를 추가하십시오.
Buildroot구버전에는 내장 기능이 없습니다. legal-info 출력물을 변환하거나, 빌드된 이미지에 Syft를 실행하십시오.
Conanconan graph info 결과를 CycloneDX로 변환해 주는 플러그인이 있습니다.
vcpkg설치 시 SPDX가 생성됩니다 (vcpkg install 산출물에 포함).
수동 통합 코드 · 벤더 제공 바이너리자동 생성 방법이 없습니다. 구성요소 목록을 직접 관리하고, 공급업체에 SBOM 제출을 요구하십시오.
대조되지 않은 구성요소를 파악해 두십시오 Conan, vcpkg, Yocto 레이어의 구성요소는 공개 취약점 데이터베이스가 다루는 생태계에 포함되지 않는 경우가 많습니다. 이런 구성요소는 “취약점 0건”이 아니라 반드시 “조회 불가”로 표시되어야 하며, 따로 수동으로 확인해야 합니다. 이 둘을 구분하지 않는 도구는 신뢰할 수 없습니다.

5 · 생명주기 관리와 보관

SBOM은 한 번 만들고 끝나는 산출물이 아니라, 제품 지원 기간 내내 계속 갱신해야 하는 문서입니다. 패치된 구성요소, 새로 추가된 종속성, 제거된 지원종료 구성요소, 공급망 변경 사항을 반영해야 합니다.

SBOM을 포함한 기술문서는 모든 버전을 최초 시장 출시 후 최소 10년간 보관해야 합니다.

갱신된 SBOM은 지속적 모니터링의 기초 자료가 됩니다. 이 내용은 두 번째 가이드에서 다룹니다.

다음 단계

SBOM을 만들었다면 취약점 분석기로 바로 대조해 볼 수 있습니다. 아직 적용 여부가 불확실하다면 적용 진단부터 시작하십시오.

SBOM 취약점 분석기 → CRA 적용 진단 → 문의하기

근거: Regulation (EU) 2024/2847 (사이버복원력법) 부속서 I 제2부, 제14조, 제16조, 제18조 · 제품 분류 기술설명 — 집행위원회 이행규정 (EU) 2025/2392 · ENISA 단일 보고 플랫폼 공개 자료 · 시행일자는 유럽집행위원회 공식 요약 기준. 본 가이드는 참고용이며 법률 자문이 아닙니다.