소프트웨어 구성 목록 (SBOM)
소프트웨어에 포함된 요소를 목록화합니다.
소프트웨어 구성 목록 (SBOM)은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
SBOM이란 무엇인가
소프트웨어 구성 명세서(SBOM)는 소프트웨어에 포함된 모든 구성 요소를 정식으로 기계가 읽을 수 있게 기록한 목록입니다. 라이브러리, 해당 버전, 라이선스 및 공급업체 정보가 포함됩니다.
식품 라벨에 재료가 표시되는 것처럼, SBOM을 사용하면 이 제품에 취약한 X 버전이 포함되어 있는가?라는 질문에 몇 초 만에 답할 수 있습니다. SBOM이 없으면 이 질문에 답하기 위해 수작업으로 며칠 동안 추적해야 할 수 있습니다.
지금 SBOM이 중요한 이유
심각한 취약점이 발견되면 운영 측면에서 가장 먼저 확인할 사항은 노출 여부입니다. 우리 제품 중 영향을 받은 구성 요소를 포함해 배포하는 것은 무엇인가?
Log4Shell 사건 당시 SBOM이 있던 조직은 목록을 조회하여 몇 시간 안에 우선순위를 정했습니다. SBOM이 없던 조직은 빌드 디렉터리를 검색하는 데 몇 주를 보냈습니다. 규제 기관과 주요 구매자는 조달 조건으로 SBOM을 점점 더 많이 요구하고 있습니다.
- 신속한 취약점 영향 분석
- 라이선스 준수 및 의무 추적
- 고객과 감사자를 위한 공급망 투명성
표준 SBOM 형식
두 가지 공개 표준이 주로 사용됩니다. 도구를 사용하면 대개 서로 변환할 수 있습니다.
- SPDX — Linux Foundation 표준으로, 라이선스 관리에 강점이 있으며 규제 기관에서 널리 인정됩니다
- CycloneDX — OWASP 표준으로, 보안에 초점을 맞추며 취약점 및 의존성 관계 데이터를 지원합니다
자체 형식을 새로 만들지 마십시오. 사용자와 검사 도구는 이러한 형식을 기대합니다.
항목에 포함되는 내용
각 구성 요소 항목에는 취약점 정보와 대조할 수 있을 만큼 충분한 식별 정보가 있어야 합니다. 핵심 필드는 다음과 같습니다:
- 이름과 버전 — 범위가 아닌 정확한 값
- PURL(패키지 URL) —
pkg:npm/lodash@4.17.21과 같은 범용 식별자 - 해시 — 무결성 확인용
- 라이선스 — SPDX 라이선스 식별자
- 공급업체 — 해당 구성 요소를 만든 주체
# A PURL uniquely identifies a component across ecosystems
pkg:npm/lodash@4.17.21
pkg:pypi/requests@2.31.0
pkg:golang/github.com/gin-gonic/gin@v1.9.1SBOM 생성
소스 또는 빌드 결과물에서 SBOM을 자동으로 생성하십시오. Syft는 두 표준 형식 모두로 출력할 수 있는, 여러 생태계에서 널리 사용되는 생성 도구입니다.
# from a project directory (CycloneDX JSON)
syft dir:. -o cyclonedx-json=sbom.cdx.json
# from a container image (SPDX JSON)
syft my-app:1.4.0 -o spdx-json=sbom.spdx.json
# CycloneDX has native generators per ecosystem too
cyclonedx-npm --output-file sbom.json소스·빌드·실행 환경 SBOM
SBOM은 생성되는 단계에 따라 서로 다른 실제 상태를 기록합니다.
- 소스 SBOM — 매니페스트에 선언된 내용으로, 번들로 포함되거나 직접 저장된 코드를 놓칠 수 있습니다
- 빌드 SBOM — 빌드가 실제로 가져온 내용으로, 출시 버전에 가장 정확합니다
- 실행 환경 / 배포된 SBOM — OS 패키지를 포함하여 실행 중인 이미지에 실제로 존재하는 내용
공급망을 보장하려면 실제 결과물에서 빌드 시점에 생성하고, 최종 컨테이너에서 OS 수준 패키지도 검사하십시오.
SBOM 취약점 검사
SBOM을 알려진 CVE와 구성 요소를 연결하는 대조 도구에 입력하면 강력한 기능을 발휘합니다. 이렇게 하면 생성과 분석을 분리할 수 있으므로, 새 CVE가 공개된 날 오래된 SBOM도 검사할 수 있습니다.
# match an SBOM against vulnerability databases
grype sbom:sbom.cdx.json
# OSV scanner consumes SBOMs directly
osv-scanner --sbom=sbom.spdx.json
# fail CI above a severity threshold
grype sbom:sbom.cdx.json --fail-on highVEX: 악용 가능성 명시하기
SBOM에는 제품에서 실제로 악용할 수 없는 취약한 구성 요소가 표시될 수 있습니다(취약한 함수가 전혀 호출되지 않음). VEX(취약점 악용 가능성 eXchange) 문서에는 이러한 평가 결과가 기록됩니다.
VEX는 불필요한 경보를 줄입니다. 나열된 CVE마다 모든 고객이 불안해하는 대신, 정당한 사유와 함께 not_affected라는 영향을 받지 않음 선언을 게시하거나, 개선 조치와 함께 affected라는 영향을 받음 선언을 게시할 수 있습니다. 이를 통해 단순한 목록을 실행 가능한 분류 결과로 바꿀 수 있습니다.
SBOM 배포 및 서명
SBOM은 진본이며 설명하는 정확한 결과물과 연결되어 있을 때만 신뢰할 수 있습니다. SBOM에 서명하고 별도의 파일로 두는 대신 증명 자료로 첨부하십시오.
# attach a signed SBOM attestation to an image with cosign
cosign attest --predicate sbom.cdx.json \
--type cyclonedx \
my-registry/my-app:1.4.0
# verify the attached SBOM attestation
cosign verify-attestation --type cyclonedx my-registry/my-app:1.4.0지속적 통합에서 SBOM 자동화
수동으로 만든 SBOM은 즉시 실제 상태와 어긋납니다. 공급망 흐름에 생성을 연결하여 모든 출시 버전에서 SBOM을 생성하고 빌드 결과물로 저장하도록 하십시오. 가능하면 같은 작업에서 서명하고 검사하십시오.
- 저장소만이 아니라 빌드된 결과물에서 생성합니다
- 버전을 기준으로 조회할 수 있는 레지스트리에 SBOM을 저장합니다
- 최신 CVE 정보를 기준으로 일정에 따라 저장된 SBOM을 다시 검사합니다
- 취약점 검사 결과를 기준으로 출시를 차단합니다
흔한 SBOM 문제
SBOM을 형식적인 점검 항목으로만 취급하면 조용히 실패합니다.
- 오래됨 — 한 번 생성한 뒤 다시 생성하지 않음
- 불완전함 — OS 패키지, 정적으로 연결된 코드 또는 직접 저장된 코드를 놓침
- 검증되지 않음 — 배포된 결과물과 연결하는 해시가 없음
- 사용되지 않음 — 생성했지만 검사하거나 조회하지 않음
목표는 정확하고, 다시 생성되며, 서명되고, 지속적으로 검사되는 SBOM이지 한 번만 생성하는 JSON 파일이 아닙니다.
빠른 확인: SBOM의 목적
배운 내용을 사고 시나리오에 적용해 보십시오.
요약: SBOM
이제 소프트웨어에 무엇이 포함되어 있는지 목록화하고 그 결과에 따라 조치할 수 있습니다.
- SBOM은 모든 구성 요소를 기계가 읽을 수 있게 나열한 목록이며, SPDX 또는 CycloneDX 형식으로 작성됩니다
- PURL, 버전, 해시 및 라이선스로 구성 요소를 식별합니다
- 빌드 시점에 생성한 뒤 대조 도구(grype, osv-scanner)에 입력하여 CVE를 확인합니다
- VEX를 사용하여 실제 악용 가능성을 선언하고 오탐을 줄입니다
- 지속적 통합 환경에서 서명하고 자동화하며, 새 정보가 제공되면 저장된 SBOM을 다시 검사합니다
다음으로 서명을 통해 결과물의 출처를 입증합니다.
자주 묻는 질문
“소프트웨어 구성 목록 (SBOM)” 강의는 무료인가요?
네 — “소프트웨어 구성 목록 (SBOM)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“소프트웨어 구성 목록 (SBOM)”에서 뭘 배우나요?
소프트웨어에 포함된 요소를 목록화합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“소프트웨어 구성 목록 (SBOM)” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 공급망 위협
- 소프트웨어 구성 목록 (SBOM)
- 의존성 및 아티팩트 서명
- CI/CD 파이프라인 보호