Dependency-Track - 지속적 SBOM 분석 치트시트
Dependency-Track (OWASP 플래그십 프로젝트)는 지속적 소프트웨어 공급망 위험 관리를 위한 플랫폼입니다. 주요 아이디어는 빌드 시 한 번 종속성을 스캔하는 대신, 프로젝트당 CycloneDX SBOM을 업로드하고 플랫폼이 지속적으로 재평가한다는 것입니다. CVE가 공개되면, 다시 빌드하거나 재스캔할 필요 없이 즉시 영향을 받는 구성요소를 포함하는 애플리케이션을 알 수 있습니다.
배포
| 방법 | 명령 |
|---|
| Docker Compose | curl -LO https://dependencytrack.org/docker-compose.yml && docker compose up -d |
| 컨테이너 (API) | docker run -p 8081:8080 dependencytrack/apiserver |
| 프론트엔드 | dependencytrack/frontend 컨테이너 (기본 UI는 8080) |
| Kubernetes | Helm 차트 사용 가능 |
| 요구사항 | ~4GB+ RAM; 프로덕션용 PostgreSQL |
핵심 개념
| 용어 | 의미 |
|---|
| 프로젝트 | 추적하는 애플리케이션/서비스 |
| 구성요소 | 프로젝트 내 종속성 |
| SBOM | 업로드하는 CycloneDX 부품 목록 |
| 취약점 | 구성요소에 영향을 미치는 CVE/공지 |
| 정책 | 위험을 게이팅하는 규칙 (라이선스, 심각도, 연령) |
| 포트폴리오 | 모든 프로젝트, 집계됨 |
SBOM 업로드
Syft 또는 cyclonedx-* 도구로 생성한 후 API를 통해 업로드:
# CycloneDX SBOM 생성
syft dir:. -o cyclonedx-json > bom.json
# Dependency-Track에 업로드
curl -X POST "http://localhost:8081/api/v1/bom" \
-H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" \
-F "bom=@bom.json"
| 엔드포인트 | 목적 |
|---|
POST /api/v1/bom | SBOM 업로드 |
GET /api/v1/project | 프로젝트 나열 |
PUT /api/v1/project | 프로젝트 생성 |
GET /api/v1/vulnerability/project/{uuid} | 프로젝트의 취약점 |
GET /api/v1/metrics/project/{uuid}/current | 현재 위험 메트릭 |
취약점 인텔리전스 소스
| 소스 | 제공 |
|---|
| NVD | CVE 데이터 |
| GitHub 공지 | 생태계 특화 공지 |
| OSV | Open Source Vulnerabilities 데이터베이스 |
| VulnDB | 상용 (선택사항) |
| 내부 | 자체 공지 |
플랫폼은 이 피드를 미러링하고 일정에 따라 저장된 모든 구성요소에 대해 재분석합니다.
정책 엔진
| 정책 조건 | 예시 |
|---|
| 심각도 | CRITICAL 취약점이 있으면 실패 |
| 라이선스 | 독점 제품에서 GPL 차단 |
| 구성요소 연령 | N년 동안 유지되지 않은 종속성 플래그 |
| 좌표 | 특정 패키지/버전 금지 |
| CWE | 특정 약점 클래스 플래그 |
정책은 위반을 생성하며, 이는 취약점과 함께 나타나므로 라이선스 및 위생 위험이 같은 장소에서 추적됩니다.
CI/CD 통합
# 파이프라인에서: 빌드 → SBOM 생성 → 업로드 → 게이팅
syft dir:. -o cyclonedx-json > bom.json
curl -X POST "$DT_URL/api/v1/bom" -H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" -F "bom=@bom.json"
# 분석 결과를 폴링하고 정책 위반 시 실패 처리
| 통합 | 참고 |
|---|
| Jenkins/GitHub Actions | 공식 플러그인/액션 사용 가능 |
| Webhook | Slack/Teams/Jira의 새로운 발견 사항 알림 |
| VEX | 악용 가능성 결정 기록 (영향 받지 않음 등) |
분류 및 VEX
| 작업 | 의미 |
|---|
| 영향 받지 않음 | 취약한 코드 경로에 도달 불가능 |
| 거짓 양성 | 감지가 잘못됨 |
| 해결됨 | 이 프로젝트에서 수정됨 |
| 억제됨 | 정당성과 함께 수락된 위험 |
이를 VEX로 기록하면 노이즈를 줄이고 감시자를 위한 결정을 문서화합니다.
Dependency-Track vs 포인트 스캐너
| 측면 | Dependency-Track | Grype/Trivy | Socket |
|---|
| 모델 | 지속적 SBOM 플랫폼 | 시점별 스캔 | 행동 악성 감지 |
| 재평가 | CVE 신규 시 자동 | 재실행 시에만 | 종속성 변경 시 |
| 포트폴리오 보기 | 예 (모든 프로젝트) | 스캔당 | PR당 |
| 최적 용도 | 조직 전체 공급망 위험 | CI 스캐닝 | 악의적 패키지 감지 |
Syft에서 SBOM을 공급하고; 빌드 시 스캐닝을 위해 Grype와 쌍을 이루고 악의적 패키지 감지를 위해 Socket과 쌍을 이룹니다.
리소스