Supply Chain Security
소프트웨어 공급망 보안
소프트웨어 공급망 보안
소프트웨어 공급망 보안(Supply Chain Security)은 소프트웨어 개발부터 배포까지 전 과정에서 악의적인 코드 삽입, 의존성 위협, 빌드 시스템 침해를 방지하는 보안 영역입니다. SolarWinds(2020), Log4j(2021), XZ Utils(2024) 사태로 그 중요성이 부각되었습니다.
공급망 공격 벡터는 다양합니다. 의존성 혼동(dependency confusion), 타이포스쿼팅(typosquatting), 악성 메인테이너, 빌드 서버 침해, 코드 서명 키 탈취 등이 있습니다. 하나의 라이브러리 침해가 수천 개 프로젝트에 영향을 줍니다.
방어 전략은 다층적입니다. SBOM으로 구성요소 가시성 확보, SLSA로 빌드 출처 검증, Sigstore로 서명 검증, Dependabot으로 취약 의존성 관리, 비공개 레지스트리로 의존성 통제를 조합합니다.
규제 측면에서 미국 행정명령 14028, EU Cyber Resilience Act는 SBOM 제출과 공급망 보안을 의무화하고 있습니다. 기업들은 컴플라이언스 요구사항에 대응해야 합니다.
# 소프트웨어 공급망 보안 체크리스트 구현
# 1. SBOM 생성 (Syft)
syft packages ghcr.io/myorg/myapp:latest -o spdx-json > sbom.json
# 2. 취약점 스캔 (Grype)
grype sbom:sbom.json --output json > vulnerabilities.json
# 3. 의존성 잠금 (package-lock.json, go.sum 등)
npm ci --ignore-scripts # 스크립트 실행 없이 정확한 버전 설치
# 4. 비공개 레지스트리 설정 (.npmrc)
registry=https://registry.myorg.com/
@myorg:registry=https://registry.myorg.com/
# 5. 컨테이너 이미지 서명 (Cosign)
cosign sign --yes ghcr.io/myorg/myapp:latest
# 6. SLSA Provenance 검증
slsa-verifier verify-artifact myapp.tar.gz \
--provenance-path myapp.tar.gz.intoto.jsonl \
--source-uri github.com/myorg/myapp
# 7. Kubernetes 정책 (Kyverno - 서명된 이미지만 허용)
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-signed-images
spec:
validationFailureAction: Enforce
rules:
- name: verify-signature
match:
resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- "ghcr.io/myorg/*"
attestors:
- entries:
- keyless:
issuer: "https://token.actions.githubusercontent.com"
# 8. CI 파이프라인 보안 (GitHub Actions)
# - 최소 권한 원칙 (permissions)
# - OIDC 토큰 사용 (id-token: write)
# - Dependabot 활성화
# - branch protection 설정
CISO: "Log4j 때 우리 어떤 서비스가 영향받는지 파악하는 데 며칠 걸렸죠. SBOM 없이는 공급망 가시성이 없어요."
DevOps: "SBOM 자동 생성하고 취약점 알림 받으려면 어떻게 해야 하나요?"
CISO: "CI에 Syft로 SBOM 생성, Grype로 스캔, Dependency Track으로 중앙 관리하면 됩니다."
면접관: "소프트웨어 공급망 보안 전략을 설명해주세요."
지원자: "SBOM으로 모든 의존성을 추적하고, SLSA L3로 빌드 출처를 검증합니다. Sigstore로 이미지 서명하고, Kyverno로 서명 검증을 강제합니다. 비공개 레지스트리로 의존성을 통제하고, Dependabot으로 취약점을 자동 패치합니다."
리뷰어: "package.json에 버전이 ^로 되어있어요. 공급망 공격에 취약합니다. 정확한 버전으로 고정하세요."
작성자: "npm shrinkwrap 적용하고 package-lock.json 커밋하겠습니다."