본문으로 건너뛰기

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

SCA란

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


SBOM 생성 — syft

기본 사용법

# 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 전체 워크플로우

# .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@v4

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

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

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

GitLab CI

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

sca:
stage: test
image: ubuntu:22.04
script:
- curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh
| sh -s -- -b /usr/local/bin
- curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh
| 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

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

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

grype 정책 파일

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

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

# .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과 함께 배포합니다. 현재는 도입 초기 단계이나 공급망 규제 강화 추세에 따라 중요성이 커지고 있습니다.


SBOM 보관 정책

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

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

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


셀프 스터디

Claude Code로 SBOM 심층 분석

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

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

cd agents/sbom-vuln-analyst
claude

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

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

SBOM 분석기

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


다음 단계