SBOM 완전성
SBOM 완전성은 파일이 유효한지가 아니라, SBOM이 설명하는 소프트웨어에 들어간 모든 구성 요소를 모든 계층에서 빠짐없이 기재했는지를 뜻합니다.
최종 업데이트: 2026년 11월 11일
SBOM이 완전하다는 것은 설명하는 소프트웨어에 들어간 모든 구성 요소를, 종속성 트리의 모든 계층에서, 어떤 잠금 파일이나 매니페스트에도 없는 구성 요소까지 포함해 기재했다는 뜻입니다. SBOM 완전성은 바로 이 속성입니다. CISA의 2026 Minimum Elements는 정보를 알 수 없는 경우 이를 명시하도록 SBOM 작성자에게 요구하며, 구성 요소의 핵심 데이터를 공개하지 않으면 수신자가 SBOM을 불완전하다고 볼 수 있다고 말합니다.
완전성, 유효성, 품질은 서로 다르다
| 질문 | 의미 | 확인하는 것 | 알 수 없는 것 |
|---|---|---|---|
| 유효 | 파일이 CycloneDX 또는 SPDX 스키마를 준수함 | 스키마 검증기 | 구성 요소 누락 여부 |
| 필드 품질 | 각 구성 요소에 이름, 버전, 공급자, 식별자, 라이선스, 해시가 있음 | 품질 평가 도구 | 구성 요소 누락 여부 |
| 완전 | 소프트웨어에 들어간 것 중 빠진 것이 없음 | 빌드가 실제로 받아들인 것과의 비교 | 비교에서 보지 못한 입력 |
두 번째 행의 식별자는 대개 Package URL이나 CPE입니다. 파일이 처음 두 가지 검사를 완벽하게 통과해도 소프트웨어의 절반이 빠져 있을 수 있습니다.
완전성을 사후에 측정하기 어려운 이유
스캐너는 잠금 파일, 매니페스트, 또는 완성된 결과물을 기반으로 동작합니다. 포스트 인스톨 스크립트가 다운로드한 패키지, 바이너리에 컴파일되어 들어간 크레이트, 한 번도 보여 주지 않은 베이스 이미지 레이어는 알 수 없습니다. 모두 숨은 종속성입니다.
잠금 파일에 패키지 400개가 기재된 Node.js 서비스를 생각해 봅시다. 그중 하나에 postinstall 스크립트가 있고, 이 스크립트가 npm ci 중에 미리 빌드된 바이너리를 다운로드합니다. package-lock.json으로 생성한 SBOM은 유효하고, 모든 구성 요소에 버전과 Package URL이 있지만, 그 바이너리는 빠져 있습니다. 파일 어디에도 빠진 것을 가리키는 단서가 없으므로 어떤 품질 점수도 이를 잡아내지 못합니다.
나중에 다시 빌드해도 답이 나오지 않습니다. 그 빌드가 재현 가능한 빌드가 아니라면, 두 번째 빌드는 첫 번째와 다른 것을 받아들일 수 있습니다.
완전성을 정직하게 표기하는 방법
- 생성 맥락을 밝힙니다. SBOM을 빌드 전에 소스 코드로 만들었는지, 빌드 중에 기록했는지, 빌드 후 결과물을 분석해 만들었는지 적습니다.
- 알려진 공백을 나열합니다. 벤더링된 코드, 미리 빌드된 바이너리, 패키지 관리자 밖에서 설치한 구성 요소처럼 도구가 볼 수 없었던 부분입니다.
- 점수보다 이유가 있는 상태를 우선합니다. 완전성 비율에는 전체 수가 필요한데, 그 전체 수야말로 아무도 모르는 값입니다. "불완전: 작업이 모니터링되지 않은 트래픽을 허용함" 같은 표기는 조치로 이어질 수 있습니다.
SBOM이 볼 수 없었던 것을 밝히는 실무 전반은 SBOM 모범 사례에서 다룹니다.
CRACI의 완전성 상태
CRACI는 각 작업의 SBOM에 완전성 상태를 부여하며, 캐시에도 상태를 부여합니다. CRACI 문서의 정의는 다음과 같습니다.
- Complete: "CRACI가 작업에 대한 완전한 증거를 확인했으며, 복원된 모든 캐시도 완전했습니다."
- Complete with connections: "요구 사항은 충족했지만, 작업이 하나 이상의 사용자 지정 네트워크 연결을 사용했습니다."
- Incomplete: "CRACI가 종속성이 SBOM에서 빠질 수 있는 조건을 확인했습니다."
- Unavailable: "CRACI가 증거 평가를 완료하지 못했습니다."
- Not recorded: "이 작업은 완전성 보고 기능이 도입되기 전에 실행되었습니다."
CRACI가 이를 표기할 수 있는 것은 각 작업이 패키지 소스로 보내는 트래픽을 보기 때문입니다. 그래서 모니터링하지 않은 트래픽이나, 자체 SBOM이 불완전했던 복원 캐시처럼 무언가가 기록을 우회했을 수 있는 경우를 알 수 있습니다. 작업이 불완전하면 "Unmonitored traffic was allowed"처럼 그 이유가 표시됩니다. SBOM 생성을 참고하세요.
이 상태는 CRACI 러너에서 실행되는 빌드에 적용됩니다. 공급업체에서 받은 SBOM이나 CRACI에서 실행되지 않는 파이프라인의 SBOM에는 위의 비교 방법과 규칙을 사용하세요.