본문으로 건너뛰기

소프트웨어 구성 분석 (SCA)

SCA란

소프트웨어에 포함된 오픈소스 컴포넌트를 분석해 알려진 취약점(CVE)을 탐지하는 기법입니다. SBOM(Software Bill of Materials)을 기반으로 의존성 전체를 추적하고 신규 CVE 발견 시 즉시 대응합니다.

아래 설정은 예시입니다 — 작동하는 전체 구현은 참조 저장소에

이 페이지의 YAML·명령은 핵심을 보여주는 예시입니다. 복사해 바로 쓸 수 있는 전체 파이프라인(정책 파일·샘플 앱 포함)은 Best Practice 저장소에서 확인하세요.


SBOM 생성 — syft

기본 사용법

Bash
# CycloneDX JSON 생성 (권장)
syft . -o cyclonedx-json=sbom.cdx.json

# SPDX JSON 생성
syft . -o spdx-json=sbom.spdx.json

# 컨테이너 이미지 분석
syft nginx:latest -o cyclonedx-json=sbom.cdx.json

포맷 선택

포맷주관권장 용도
CycloneDX JSONOWASP보안·취약점 관리 (grype 연동)
SPDX JSONLinux Foundation공급망 공유·규제 대응

보안 파이프라인 중심이라면 CycloneDX JSON을 권장합니다.


취약점 스캔 — grype

GitHub Actions 전체 워크플로우

YAML
# .github/workflows/sca.yml

name: SCA — SBOM & Vulnerability Scan

on:
pull_request:
branches: [main, develop]

jobs:
sca:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- name: Generate SBOM
uses: anchore/sbom-action@v0
with:
format: cyclonedx-json
output-file: sbom.cdx.json

- name: Scan vulnerabilities
uses: anchore/scan-action@v7
with:
sbom: sbom.cdx.json
fail-build: true
severity-cutoff: high
config: .grype.yaml

- name: Upload SBOM artifact
uses: actions/upload-artifact@v7
with:
name: sbom-${{ github.sha }}
path: sbom.cdx.json
retention-days: 90

GitLab CI

YAML
# .gitlab-ci.yml (sca 잡 부분)

sca:
stage: test
image: ubuntu:22.04
script:
# ubuntu 기본 이미지에는 curl이 없음
- apt-get update -qq && apt-get install -y -qq curl ca-certificates
- curl -sSfL https://get.anchore.io/syft
| sh -s -- -b /usr/local/bin
- curl -sSfL https://get.anchore.io/grype
| sh -s -- -b /usr/local/bin
- syft . -o cyclonedx-json=sbom.cdx.json
- grype sbom:sbom.cdx.json --fail-on high --config .grype.yaml
artifacts:
paths:
- sbom.cdx.json
expire_in: 90 days
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"

취약점 정책 설계

심각도별 SLA

아래는 CI 게이트 운영에 맞춘 조직 강화안 예시입니다. KWG 기준선(Critical 1주, High 4주)과 대응 기한의 정본은 취약점 대응 기한과 VEX를 참조하세요.

심각도CVSS 범위강화안 SLA 예시빌드 차단
Critical9.0–10.024시간차단
High7.0–8.97일차단
Medium4.0–6.930일경고만
Low0.1–3.9다음 릴리즈무시

처음 도입 시에는 Critical만 차단하고 팀이 익숙해진 뒤 High로 확대하는 것을 권장합니다.

grype 정책 파일

무시 규칙은 반드시 이유와 승인일을 기록하세요

감사(Audit) 대응 시 근거 없는 예외는 오히려 컴플라이언스 리스크가 됩니다.

YAML
# .grype.yaml

fail-on-severity: high

ignore:
# 실제 코드 경로 미사용 — 보안팀 승인 2024-01-15
- vulnerability: CVE-2023-XXXXX
reason: '해당 함수 미사용 확인'
# 테스트 전용 패키지
- package:
name: some-test-lib
type: npm

VEX 활용

VEX(Vulnerability Exploitability eXchange)란: 특정 CVE가 해당 제품에서 실제로 악용 가능한지를 기계가 읽을 수 있는 형식으로 명시하는 문서입니다. "CVE는 존재하지만 해당 코드 경로 미사용"을 공식적으로 표현해 하위 공급망의 불필요한 알림을 방지합니다.

실무 활용: CycloneDX VEX 또는 OpenVEX 형식으로 작성하고 SBOM과 함께 배포합니다. 현재는 도입 초기 단계이나 공급망 규제 강화 추세에 따라 중요성이 커지고 있습니다. 상태값 4가지 등 개념 정리는 취약점 대응 기한과 VEX가 정본입니다.


SBOM 보관 정책

보관 위치: CI/CD 아티팩트로 저장하고 릴리즈 태그와 연결해 버전별 SBOM을 추적합니다. GitHub Actions upload-artifact, GitLab artifacts.paths를 활용합니다.

보관 기간: ISO/IEC 18974는 프로그램 존속 기간 동안 보존을 요구합니다. 실무적으로는 릴리즈 버전별 영구 보관을 권장합니다.

업데이트 시점: 의존성 변경 시마다 재생성합니다. PR 단위 자동 생성으로 항상 최신 상태를 유지합니다.


SBOM 분석기

syft·trivy·cdxgen으로 생성한 SBOM 파일을 업로드하면 취약점을 분석하고 대응 가이드를 자동으로 생성합니다.

먼저 샘플로 미리보기 (API 키 불필요)

API 키 없이 미리 만든 샘플 SBOM의 분석 결과를 바로 확인할 수 있습니다. 도구가 어떤 결과를 만들어 주는지 먼저 체감한 뒤, 아래에서 본인 SBOM으로 실제 분석을 진행하세요.

내 SBOM으로 실제 분석하기

이 도구는 Anthropic API 키가 필요합니다

브라우저에서 직접 Anthropic API를 호출합니다. 본인의 Anthropic API 키를 입력하면 바로 사용할 수 있으며, 키와 입력 내용은 브라우저에서 Anthropic으로만 전송됩니다(trustedoss 서버를 거치지 않습니다). 사용량은 본인 Anthropic 계정에 과금됩니다.


셀프 스터디

Claude Code로 SBOM 심층 분석

위 분석기는 브라우저에서 바로 사용 가능합니다. 더 상세한 분석과 .grype.yaml 정책 파일 자동 생성이 필요하면 아래 agent를 사용하세요.

사전 조건: Trusted OSS 저장소 클론 필요

Bash
cd agents/sbom-vuln-analyst
claude

agent가 아래를 자동으로 수행합니다.

  • CycloneDX / SPDX / grype 결과 자동 감지
  • 심각도별 분류 및 수정 버전 제시
  • .grype.yaml 예외 처리 예시 생성
  • CI/CD 파이프라인 연동 안내

다음 단계

매일 돌리는 SCA 엔진이 필요하다면

위 분석기는 한 번씩 결과를 확인하는 용도입니다. 팀 전체가 상시 운영하는 self-hosted SCA가 필요하면, 상용 SCA 없이 취약점(CVE)·라이선스·SBOM을 한 UI에서 관리하는 Apache-2.0 도구 TRUSCA로 이어갈 수 있습니다.

  • 직접 띄워 보기: TRUSCA 저장소 (Docker Compose 또는 Helm 배포)
  • 상용 도구 도입이 어려운 환경(예산·인력·폐쇄망)에서 상시 운영 SCA를 무료로 갖추는 경로입니다.

호스팅된 공개 데모 인스턴스는 제공하지 않습니다. 위 가이드로 본인 환경에 직접 띄워 확인하세요.