Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sbomlyze — SBOM용 Git diff—CycloneDX, SPDX, Syft 문서를 비교하고, 변조를 탐지하며, CI를 게이팅합니다. | Kitploit
도구/GitHubGitHub/rezmoss/sbomlyze
Static AnalysisVulnerability AnalysisConfiguration AuditingDevSecOpsUtilities & FrameworksSecret DetectionThreat IntelligenceSupply Chain Security
GitHubrezmoss/sbomlyze

sbomlyze

SBOM용 Git diff—CycloneDX, SPDX, Syft 문서를 비교하고, 변조를 탐지하며, CI를 게이팅합니다.

저장소 보기
24211일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

sbomlyze

당신의 SBOM을 위한 git diff. 두 소프트웨어 자재 명세서(SBOM)를 비교하여 빌드, 버전, 릴리스 간 변경 사항을 확인하세요.

sbomlyze는 버전 문자열뿐만 아니라 구성 요소 해시를 비교합니다. 공격자가 버전을 올리지 않고 패키지를 교체하면 sbomlyze가 이를 플래그로 표시합니다. 생성기와 취약점 스캐너는 이를 놓칩니다.

[![CI][ci-img]][ci] [![GitHub Marketplace][marketplace-img]][marketplace] [![GitHub Release][release-img]][release] [![Go Report Card][go-report-img]][go-report] [![OpenSSF Scorecard][scorecard-img]][scorecard] [![License: Apache-2.0][license-img]][license] [![Downloads][download-img]][download]

SBOMlyze가 실제 pull request에서 동일 버전 해시 변경을 차단합니다

이 신호가 매니페스트 또는 일반 구성 요소 diff와 어떻게 다른지 Manifest diff vs. SBOM diff vs. integrity drift에서 확인하세요.

생성기는 SBOM을 만들고 스캐너는 CVE를 찾습니다. sbomlyze는 두 SBOM 사이에 무엇이 변경되었는지, 그리고 그것을 신뢰할 수 있는지 알려줍니다. 생성기 다음에 실행하세요: syft image:tag -o cyclonedx-json | sbomlyze - --compliance 는 임시 파일 없이 생성된 SBOM을 분석하고 점수를 매깁니다. 기준선과 비교하여 드리프트를 분류하고 파이프라인을 게이트하세요.

GitHub Action 빠른 시작

[GitHub Marketplace의 SBOMlyze Diff][marketplace]를 추가하여 체크인된 SBOM 또는 별도로 생성된 SBOM을 git 기준선과 비교하세요. 아래의 불변 SHA는 게시된 v0.5.1 Action입니다.```yaml steps:

  • uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0

  • uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1 with: sbom-path: build/sbom.cdx.json

root@kitploit:~
이 Action은 기본적으로 Job Summary를 작성하고, 정책을 적용하거나,
무결성 드리프트를 보고하거나, SARIF를 업로드하거나,
단일 풀 리퀘스트 코멘트를 유지할 수 있습니다.
입력, 출력, 권한 및 보안 지침은 [전체 Action 참조](https://github.com/rezmoss/sbomlyze/blob/HEAD/ACTION.md)에서
확인하세요. [라이브 데모 저장소](https://github.com/rezmoss/sbomlyze-action-demo)에서
정상 통과하는 의존성 업데이트와 차단된 동일 버전 해시 변경을 확인할 수
있으며, 공개 워크플로 실행 및 SARIF 증거가 포함되어 있습니다.

포맷별 자체 사용(dogfood) 예시는 공개
[Go + SPDX](https://github.com/rezmoss/sbomlyze-go-spdx-demo),
[Node + CycloneDX](https://github.com/rezmoss/sbomlyze-node-cyclonedx-demo), 또는
[container](https://github.com/rezmoss/sbomlyze-container-demo) 데모를 사용하세요. 각 데모에는
재현 가능한 검토 시나리오 5개가 포함되어 있습니다.
[10분 베타 가이드](https://github.com/rezmoss/sbomlyze/blob/HEAD/BETA.md)는 네 가지 핵심 활성화 및 신호
품질 질문을 다룹니다.

생성된 SBOM은 커밋할 필요가 없습니다. `baseline: workflow-artifact`는
성공한 기본 브랜치 실행에서 가장 최근의 일치하는 아티팩트를
검색합니다. [고정된 Syft 동반 워크플로](https://github.com/rezmoss/sbomlyze/blob/HEAD/examples/workflows/syft-companion.yml)는
생성 및 베이스라인 게시를 보여주며, SBOMlyze는 검토와
정책을 담당합니다.

## 왜 sbomlyze인가?

많은 도구가 SBOM을 생성합니다. 그러나 그것들을 비교하는 도구는 드물고, 변경이 일상적인지 공급망 위험 신호인지 알려주는 도구는 더욱 드뭅니다. sbomlyze가 그 공백을 메웁니다.

| 기능 | **sbomlyze** | cyclonedx-cli | sbomqs | syft / trivy |
|---|:---:|:---:|:---:|:---:|
| SBOM 간 **diff** | ✅ | 기본 | ❌ | ❌ |
| **무결성 / 변조** 드리프트 (버전 변경 없이 해시 변경) | ✅ | ❌ | ❌ | ❌ |
| 의존성 그래프 diff + 전이적 깊이 위험 | ✅ | ❌ | ❌ | ❌ |
| **NTIA / CISA / BSI** 규정 준수 점수 | ✅ | ❌ | ✅ | ❌ |
| 포맷 변환 (Syft / CycloneDX / SPDX) | ✅ | ✅ | ❌ | 부분 |
| **TUI + Web UI** 탐색기 | ✅ | ❌ | ❌ | ❌ |
| 정책 게이트 + SARIF / JUnit / Markdown / HTML / Patch | ✅ | 부분 | 부분 | 부분 |

## 기능

- **SBOM diffing**: 두 SBOM을 비교하여 추가, 제거, 변경된 구성 요소를 한눈에 확인
- **Drift classification**: 버전 드리프트와 **무결성 드리프트**(버전 변경 없이 해시가 변경되어 변조를 나타냄) 및 메타데이터 드리프트를 구분
- **Compliance scoring**: 모든 SBOM을 **NTIA**, **CISA 2025**, **BSI TR-03183** 최소 요소 기준으로 점수화
- **Dependency graph diff**: 전이적 의존성과 공급망 깊이 추적
- **Multi-format support**: Syft, CycloneDX, SPDX (JSON)
- **Format conversion**: CycloneDX, SPDX, Syft 포맷 간 변환
- **Strong identity matching**: PURL → CPE → BOM-ref → namespace/name 우선순위
- **Statistics mode**: 단일 SBOM의 라이선스, 의존성, 무결성 지표 분석
- **Interactive TUI mode**: 키보드 탐색 및 검색으로 SBOM 탐색
- **Web UI mode**: 드래그 앤 드롭 업로드를 지원하는 브라우저 기반 SBOM 탐색기
- **Policy engine**: CI 파이프라인에서 드리프트, 라이선스, 규정 준수 점수 규칙 적용
- **GitHub Marketplace Action**: Job Summary, SARIF 및 선택적 코멘트 출력으로 SBOM 드리프트에 대한 풀 리퀘스트 게이팅
- **Duplicate & collision detection**: 동일 패키지의 여러 버전과 모호한 ID 일치 항목 탐지
- **Multiple output formats**: 텍스트, JSON, SARIF, JUnit XML, Markdown, HTML, JSON Patch
- **Tolerant parsing**: 구조화된 경고와 함께 오류 발생 시에도 계속 파싱

## 설치

### Homebrew (macOS/Linux)```bash
brew install rezmoss/sbomlyze/sbomlyze

설치 스크립트

설치 스크립트는 사용자의 OS/아키텍처에 맞는 올바른 바이너리를 다운로드합니다:```bash

Install to ./bin

curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh

Install to /usr/local/bin (requires sudo)

curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sudo sh -s -- -b /usr/local/bin

Install specific version

curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh -s -- -v 0.4.0

root@kitploit:~
**설치 옵션:**

| 옵션 | 설명 |
|--------|-------------|
| `-b <dir>` | 설치 디렉터리 (기본값: `./bin`) |
| `-d` | 디버그 출력 활성화 |
| `-v <ver>` | 특정 버전 설치 (기본값: 최신) |

설치 프로그램은 항상 릴리스 체크섬을 검증합니다. 호환되는 GitHub CLI가 설치되어 있으면, 릴리스의 빌드 출처(provenance)도 검증하며, 해당 검증이 성공하지 않으면 실패로 처리합니다.

### Go 설치```bash
go install github.com/rezmoss/sbomlyze/cmd/sbomlyze@latest

바이너리 릴리스에서

GitHub Releases에서 최신 바이너리를 다운로드하세요.

v0.3.7부터 릴리스 아카이브는 GitHub 아티팩트 증명과 함께 게시됩니다. 다음을 사용하여 다운로드를 독립적으로 검증하세요:```bash gh attestation verify ./sbomlyze_0.4.0_Linux_x86_64.tar.gz
--repo rezmoss/sbomlyze
--signer-workflow rezmoss/sbomlyze/.github/workflows/release.yml

root@kitploit:~
서명되지 않은 apt, rpm, apk 저장소 지침은 저장소가 패키지 관리자 기본 서명 검증을 지원할 때까지 제거되었습니다.

**macOS 사용자:** 다운로드 후 격리 플래그를 제거하십시오:```bash
xattr -d com.apple.quarantine ./sbomlyze
chmod +x ./sbomlyze

소스에서 빌드```bash

git clone https://github.com/rezmoss/sbomlyze.git cd sbomlyze go build -o sbomlyze ./cmd/sbomlyze

root@kitploit:~
## 빠른 시작```bash
# Compare two SBOMs (the headline use case)
sbomlyze before.json after.json

# Analyze a single SBOM
sbomlyze image.json

# Read an SBOM from standard input
syft image:tag -o cyclonedx-json | sbomlyze -

# Use standard input on either side of a diff
syft image:tag -o cyclonedx-json | sbomlyze baseline.json -

# Score an SBOM against NTIA / CISA / BSI minimum elements
sbomlyze image.json --compliance

# Interactive TUI explorer
sbomlyze image.json -i

# Web UI (opens browser)
sbomlyze -web

# Convert between SBOM formats
sbomlyze convert syft.json --to spdx
sbomlyze convert cdx.json --to syft -o output.json

# JSON output for CI integration
sbomlyze before.json after.json --json

# SARIF output for GitHub Code Scanning
sbomlyze before.json after.json --format sarif

# Markdown report for PR comments
sbomlyze before.json after.json --format markdown

# Apply policy checks
sbomlyze before.json after.json --policy policy.json

사용법```

sbomlyze <sbom1|-> [sbom2|-] [options] sbomlyze convert <sbom|-> --to [-o output]

Modes: Single file: sbomlyze [--json] Show statistics Interactive: sbomlyze -i Interactive explorer Convert: sbomlyze convert --to Convert SBOM format Web server: sbomlyze -web [--port 8080] Web UI explorer Two files: sbomlyze [...] Show diff

Use - in place of one SBOM path to read it from standard input.

Options: -i, --interactive Interactive TUI explorer -web, --web Start web UI server --port Web server port (default 8080) --json Output in JSON format (shortcut for --format json) --format Output format: text, json, sarif, junit, markdown, html, patch --compliance Show NTIA/CISA/BSI compliance scoring --policy Policy file for CI checks --strict Fail on parse warnings --tolerant Continue on parse warnings (default) --no-pager Disable automatic paging of output --to Target format for convert: cyclonedx (cdx), spdx, syft -o, --output Output file for convert (default: stdout) --version, -v Show version information --help, -h Show this help message

root@kitploit:~
## 명령어

### 통계 모드 (단일 파일)

SBOM을 분석하여 구성 요소, 라이선스, 종속성에 대한 통찰력을 얻습니다.```bash
sbomlyze image.json

출력에는 스캔 컨텍스트, 자동 감지된 주요 발견 사항 및 통계가 포함됩니다:``` Scan Context: Tool: syft 1.40.1 Schema: 16.0.18 Scan Scope: all-layers Source Type: image Source: alpine:latest

Key Findings: 💻 OS/Distro: Alpine Linux v3.21 📦 Dominated by apk: 71 of 71 packages (100.0%) 📂 8,542 files tracked on filesystem 🔗 Relationships: 71 containment + 64 dependency 📜 License profile: 72% permissive, 20% copyleft ⚠️ Low hash coverage: 0.0% (71 of 71 missing) 🔍 Top catalogers: apkdb-cataloger (71)

📦 SBOM Statistics

Total Components: 71

By Package Type: apk 71

Licenses: With license: 71 Without license: 0

Top Licenses: MIT 17 BSD-3-Clause 8 GPL-2.0-only 8

Integrity: With hashes: 0 Without hashes: 71

Dependencies: Components with deps: 65 Total dep relations: 176

root@kitploit:~
#### 주요 발견 사항

sbomlyze는 SBOM에 대한 인사이트를 자동으로 생성합니다. 단일 파일 분석의 경우 다음이 포함됩니다:

| 발견 항목 | 설명 |
|---------|-------------|
| **OS/배포판 감지** | SBOM 메타데이터에서 운영체제 또는 배포판을 식별합니다 |
| **지배적 생태계** | 하나의 패키지 유형이 전체 패키지의 60%를 초과하여 지배하는 경우 보고합니다 |
| **파일시스템 사용량** | 파일시스템에서 추적되는 파일 수 |
| **관계 밀도** | 포함(containment) 및 의존(dependency-of) 관계의 수 |
| **위치 핫스팟** | 구성 요소가 발견되는 주요 디렉터리 |
| **라이선스 위험 프로필** | 허용적/카피레프트/알 수 없음 라이선스 비율 분석 |
| **데이터 품질 경고** | 라이선스(<50%), 해시(<50%), PURL(<80%) 적용 범위가 낮을 때 경고 |
| **중복 경고** | 중복 구성 요소 그룹을 표시합니다 |
| **카탈로거 세부 내역** | 구성 요소를 감지한 상위 스캐너/카탈로거 (Syft SBOM) |

#### 커버리지 지표

통계 모드는 데이터 품질 평가를 위한 커버리지 백분율을 계산합니다:

| 지표 | 설명 |
|--------|-------------|
| **PURL 커버리지** | Package URL을 가진 구성 요소의 비율 |
| **CPE 커버리지** | CPE를 가진 구성 요소의 비율 (취약점 스캔 준비 상태) |
| **라이선스 커버리지** | 라이선스를 하나 이상 가진 구성 요소의 비율 |
| **해시 커버리지** | 무결성 해시를 가진 구성 요소의 비율 |

#### 라이선스 분류

라이선스는 자동으로 다음 범주로 분류됩니다:

| 범주 | 예시 |
|----------|----------|
| **카피레프트** | GPL, LGPL, AGPL, MPL, EPL, CDDL |
| **허용적(Permissive)** | MIT, BSD, Apache, ISC, Zlib, Unlicense |
| **퍼블릭 도메인** | 퍼블릭 도메인 헌정 |
| **알 수 없음** | 인식되지 않거나 누락된 라이선스 |

### 변환 모드

CycloneDX, SPDX 및 Syft JSON 형식 간에 SBOM을 변환합니다. 입력 형식은 자동으로 감지됩니다.```bash
# CycloneDX to SPDX
sbomlyze convert image.cdx.json --to spdx

# Syft to CycloneDX (cdx is an alias for cyclonedx)
sbomlyze convert syft-output.json --to cdx

# SPDX to Syft, writing to a file
sbomlyze convert spdx-output.json --to syft -o converted.json

지원되는 대상 형식

보존되는 내용

변환 시 구성 요소 이름, 버전, PURL, CPE, 라이선스, 해시, 공급업체 정보 및 종속성 관계가 보존됩니다. 형식별 필드(예: Syft language, foundBy, locations)는 CDX로 변환할 때 CycloneDX 속성을 통해 전달됩니다.

Diff 모드 (두 파일)

두 SBOM을 비교하여 버전 간 변경 사항을 확인합니다.```bash sbomlyze v1.0.json v2.0.json

root@kitploit:~
#### Diff 개요

diff는 파일 이름, 크기, OS 정보, 도구 정보, 구성 요소 수에 대한 나란한 메타데이터 비교로 시작하며, 사용 가능한 경우 스캔 컨텍스트 세부 정보가 이어집니다.

#### 출력```
📊 Drift Summary:
  📦 Version drift:   58 components
  ⚠️  Integrity drift: 1 component (hash changed without version change!)
  📝 Metadata drift:  2 components

🔑 Key Findings:
  📈 Attack surface: +5 packages (7.0%), +120 files (3.2%)
  🚨 2 version downgrades detected: openssl 3.1.4→3.0.2, curl 8.5.0→8.4.0
  🔄 56 version upgrades (2 major, 12 minor, 42 patch) among 65 shared packages
  ⚠️  Integrity drift (1 total): 1 npm (review recommended)
  ❌ python ecosystem entirely removed (15 → 0 packages)
  ➕ New ecosystem: golang (8 packages)
  ✅ Core system packages stable: apk (71) unchanged

+ Added (2):
  + libgcrypt 1.10.3-r0
  + libgpg-error 1.49-r0

- Removed (3):
  - libapk 3.0.3-r1
  - libgcc 15.2.0-r2
  - nghttp3 1.13.1-r0

~ Changed (58):
  ~ nginx
      version: 1.29.4-r1 -> 1.27.3-r1
  ~ suspicious-pkg ⚠️  [INTEGRITY]
      hash[SHA256]: abc123 -> def456

>> Added dependencies:
  pkg:apk/alpine/libxslt: +[so:libgcrypt.so.20]

<< Removed dependencies:
  pkg:apk/alpine/libcurl: -[so:libnghttp3.so.9]

🔗 New transitive dependencies (3):
  + pkg:npm/lodash (depth 2)
    via: [pkg:npm/my-app pkg:npm/express pkg:npm/lodash]
  + pkg:npm/underscore (depth 3)
    via: [pkg:npm/my-app pkg:npm/express pkg:npm/lodash pkg:npm/underscore]

📊 New deps by depth:
  Depth 2:              1
  Depth 3+ (risky):     2 ⚠️

Diff 주요 발견 사항

Diff 모드에서 sbomlyze는 두 SBOM을 비교하여 더 풍부한 인사이트를 자동 생성합니다:

유형별 패키지 샘플

추가 및 제거된 구성 요소는 패키지 유형별로 그룹화되고 샘플 목록과 함께 제공되어 각 생태계에서 무엇이 변경되었는지 쉽게 확인할 수 있습니다.

규정 준수 점수

감사자와 조달 팀이 계속 묻는 질문인 "이 SBOM이 충분히 완전한가?" 에 답하기 위해 세 가지 주요 최소 요소 프레임워크에 대해 모든 SBOM을 점수화합니다.```bash

Score a single SBOM

sbomlyze image.json --compliance

Score alongside a diff

sbomlyze before.json after.json --compliance

As JSON for CI

sbomlyze image.json --compliance --json

root@kitploit:~
### 평가된 프레임워크

| 프레임워크 | 검사 수 | 주요 요구 사항 |
|-----------|--------|----------------------|
| **NTIA 최소 요소** (2021) | 7 | 이름, 버전, 공급자, 고유 ID(PURL/CPE), 종속성 관계, SBOM 작성자, 타임스탬프 |
| **CISA 2025 최소 요소** (2025년 8월 초안) | 10 | NTIA에 소프트웨어 생산자, 라이선스 정보, **구성 요소 해시**, 도구 이름을 추가 |
| **BSI TR-03183-2** (v2.1.0, 2025) | 9 | 구성 요소 작성자 연락처, **SHA-512 해시**, SPDX 형식 라이선스, SBOM 작성자 연락처를 요구 |

### 점수 표시

각 프레임워크는 백분율(통과 검사 수 / 전체 검사 수)과 전체 점수(프레임워크 간 평균)를 보고하며 상태 표시기를 포함합니다:

| 상태 표시기 | 점수 |
|-----------|-------|
| 🟢 | ≥ 90% |
| 🟡 | 70–89% |
| 🟠 | 50–69% |
| 🔴 | < 50% |

JSON 출력(`--compliance --json`)에는 검사별 통과/실패 세부 정보가 포함된 전체 보고서가 포함되며, HTML 형식은 규정 준수 보고서를 보고서 페이지에 포함합니다.

### CI에서 규정 준수 게이팅

[정책 엔진](#policy-engine)을 통해 규정 준수 임계값을 시행합니다. 임계값을 설정하면 `--compliance` 플래그 없이도 규정 준수 평가가 트리거됩니다:```json
{
  "min_ntia_score": 85,
  "min_cisa_score": 70,
  "min_bsi_score": 80,
  "min_overall_compliance": 75
}

입력된 청크 내용이 비어 있습니다. 번역할 원문이 제공되지 않았으니, 청크 33의 실제 내용을 다시 보내 주세요.```bash sbomlyze image.json --policy compliance-policy.json

root@kitploit:~
## Dependency Graph Diff

sbomlyze는 단순한 구성요소 목록 비교를 넘어 전체 의존성 그래프를 분석하여, 전이 의존성을 통해 유입되는 공급망 위험을 탐지합니다.

### 기능

| 기능 | 설명 |
|---------|-------------|
| **엣지 비교** | 추가/제거된 직접 의존성 (A가 B에 의존) |
| **전이 도달 가능성** | 그래프를 통해 새로 나타나는 간접 의존성 |
| **전이 손실 추적** | 제거된 전이 의존성 |
| **경로 추적** | 각각의 새로운 전이 의존성에 어떻게 도달하는지 정확히 표시 |
| **깊이 추적** | 각각의 새로운 의존성이 코드에서 몇 홉 떨어져 있는지 |
| **위험 요약** | 깊이 3 이상의 의존성은 더 높은 위험으로 표시 |

### 깊이가 중요한 이유

그래프 깊은 곳에서 유입되는 의존성은 다음과 같은 특징이 있습니다:
- 감사 및 검토가 더 어려움
- 종종 명시적 승인 없이 포함됨
- 공급망 공격의 일반적인 경로 (예: event-stream 사건)

깊이 요약은 검토 우선순위를 정하는 데 도움을 줍니다:

| 깊이 | 위험 수준 | 설명 |
|-------|------------|-------------|
| **1** | 낮음 | 직접 의존성 (직접 선택한 것들) |
| **2** | 중간 | 내 의존성의 의존성 |
| **3+** | 높음 ⚠️ | 깊은 전이 의존성 - 신중히 검토 필요 |

### 예시: 깊은 전이 의존성 탐지```bash
# Before: app -> express (simple, 1 dep)
# After:  app -> express -> lodash -> underscore -> deep-lib (chain of 4)

sbomlyze before.json after.json

출력:``` 🔗 New transitive dependencies (3):

  • lodash (depth 2) via: [app express lodash]
  • underscore (depth 3) via: [app express lodash underscore]
  • deep-lib (depth 4) via: [app express lodash underscore deep-lib]

📊 New deps by depth: Depth 2: 1 Depth 3+ (risky): 2 ⚠️

root@kitploit:~
### 의존성 그래프용 JSON 출력```json
{
  "dependencies": {
    "added_deps": {
      "pkg:npm/express": ["pkg:npm/lodash", "pkg:npm/body-parser"]
    },
    "removed_deps": {},
    "transitive_new": [
      {
        "target": "pkg:npm/underscore",
        "via": ["pkg:npm/my-app", "pkg:npm/express", "pkg:npm/lodash", "pkg:npm/underscore"],
        "depth": 3
      }
    ],
    "transitive_lost": [],
    "depth_summary": {
      "depth_1": 0,
      "depth_2": 2,
      "depth_3_plus": 2
    }
  }
}

드리프트 탐지

sbomlyze는 구성 요소 변경 사항을 세 가지 드리프트 유형으로 분류하여 일반 업데이트와 잠재적으로 의심스러운 변경을 구분하는 데 도움을 줍니다.

드리프트 유형

무결성 드리프트 (보안 신호)

무결성 드리프트는 구성 요소의 해시가 변경되었지만 버전이 동일하게 유지될 때 발생합니다. 이는 다음을 나타낼 수 있습니다:

  • 공급망 공격: 패키지가 악성 버전으로 교체됨
  • 버전 범프 없는 재빌드: 합법적이지만 바람직하지 않은 관행
  • 다른 빌드 환경: 재현성 문제```bash

Example output with integrity drift

~ suspicious-pkg ⚠️ [INTEGRITY] hash[SHA256]: abc123 -> def456

root@kitploit:~
**권장 사항**: 무결성 드리프트를 항상 조사하세요. 무해할 수 있지만, 공급망 보안의 핵심 신호입니다.

### 드리프트에 대한 JSON 출력

드리프트 요약은 `diff` 객체 안에 있습니다:```json
{
  "diff": {
    "changed": [
      {
        "id": "pkg:npm/suspicious-pkg",
        "name": "suspicious-pkg",
        "changes": ["hash[SHA-256]: abc123 -> def456"],
        "drift": {
          "type": "integrity",
          "hash_changes": {
            "changed": {
              "SHA-256": {"before": "abc123", "after": "def456"}
            }
          }
        }
      }
    ],
    "drift_summary": {
      "version_drift": 55,
      "integrity_drift": 1,
      "metadata_drift": 2
    }
  }
}

드리프트 요약 추출:```bash

Get drift summary

sbomlyze before.json after.json --json | jq '.diff.drift_summary'

Check for integrity drift in CI

sbomlyze before.json after.json --json | jq -e '.diff.drift_summary.integrity_drift > 0'

root@kitploit:~
## 중복 및 충돌 감지

### 중복 감지

sbomlyze는 SBOM 내에서 동일한 식별자를 가지지만 버전이 다른 구성 요소를 식별합니다:```
⚠️  Duplicates Found: 2
  lodash: [4.17.20, 4.17.21]
  express: [4.18.0, 4.19.2]

In diff mode, duplicate version diffing tracks:

  • 새 중복: 새 SBOM에서 중복된 구성 요소
  • 해결된 중복: 통합된 중복 그룹
  • 버전 추가/제거: 기존 중복 그룹 내 버전 변경

충돌 감지

충돌은 구성 요소가 동일한 ID를 공유하지만 특성이 충돌하는 모호한 ID 일치입니다:

유형설명
이름 불일치동일한 ID에 매핑된 서로 다른 구성 요소 이름
해시 불일치동일한 버전의 구성 요소가 서로 다른 해시를 가짐 (잠재적 변조)

SBOMlyze SBOM 탐색기 (TUI)```bash

sbomlyze sbom.json -i

root@kitploit:~
![interactive-sbom](https://assets.kitploit.com/production/public/readmes/12637/d28ec876b78778fce19967cad0a41a5ebd0acb43ad4dd0aeb7837ff5204b9903.gif)

### TUI 키보드 단축키

#### 탐색

| 키 | 동작 |
|-----|--------|
| `↑` / `k` | 위로 이동 |
| `↓` / `j` | 아래로 이동 |
| `PgUp` / `Ctrl+u` | 반 페이지 위로 |
| `PgDn` / `Ctrl+d` | 반 페이지 아래로 |
| `Home` / `g` | 맨 위로 이동 |
| `End` / `G` | 맨 아래로 이동 |
| `Enter` | 구성 요소 세부 정보 보기 |
| `Esc` / `Backspace` | 뒤로 가기 |
| `q` / `Ctrl+c` | 종료 |

#### 검색 및 필터

| 키 | 동작 |
|-----|--------|
| `/` | 모든 필드에서 심층 검색 (이름, PURL, 라이선스, 원시 JSON) |
| `t` | 패키지 유형별 필터링 (npm, apk, golang, pypi 등) |
| `c` | 활성화된 모든 필터 지우기 |

#### 보기

| 키 | 컨텍스트 | 동작 |
|-----|---------|--------|
| `j` | 상세 보기 | 구문 강조로 원시 구성 요소 JSON 보기 |
| `d` | JSON 보기 | 상세 보기로 다시 전환 |
| `Enter` | JSON 보기 | 구성 요소 JSON을 파일로 내보내기 |
| `?` | 모든 보기 | 모든 키 바인딩이 포함된 도움말 표시 |

### 구성 요소 상세 보기

상세 보기에는 구성 요소에 대한 포괄적인 정보가 표시됩니다:
- 패키지 정보 (이름, 버전, PURL, 네임스페이스, 공급업체)
- 시각적 표시가 있는 라이선스
- 무결성 해시
- CPEs (Common Platform Enumeration)
- 종속성 목록
- 식별자 (ID, BOM-ref, SPDX-ID)

## Web UI 모드

드래그 앤 드롭 파일 업로드를 지원하는 브라우저 기반 SBOM 탐색기를 시작합니다:```bash
# Start web server on default port 8080
sbomlyze -web

# Start on custom port
sbomlyze -web --port 3000

그런 다음 브라우저에서 http://localhost:8080을 여세요.

Screenshot 2026-02-06 at 17 08 13

웹 UI 기능

표시되는 통계

웹 UI는 다음을 포함한 포괄적인 통계를 표시합니다:

  • 구성 요소 수 패키지 유형별(npm, apk, pypi 등)
  • 라이선스 분포 범주별 세분화(copyleft, permissive, public domain)
  • 적용 범위 지표 시각적 진행률 막대 포함:
    • PURL 적용 범위(패키지 URL 존재 여부)
    • CPE 적용 범위(취약점 스캔 준비 상태)
    • 라이선스 적용 범위
    • 해시/무결성 적용 범위
  • 언어별 분류(Syft로 생성된 SBOM의 경우)
  • 관계 통계(contains, dependency-of, evident-by)
  • 중복 탐지 경고

사용 사례

보안 검토

  • SBOM을 업로드하고 전체 의존성 트리를 탐색
  • CPE 적용 범위를 확인하여 취약점 스캔이 작동하는지 확인
  • 라이선스나 해시가 없는 구성 요소 검토

규정 준수 감사

  • 모든 구성 요소에서 특정 라이선스 검색
  • 라이선스 범주 분포(copyleft vs permissive) 보기
  • 문서화를 위해 원시 JSON 내보내기

개발 디버깅

  • 이미지에 포함된 패키지 탐색
  • 전이 의존성 확인
  • 패키지 메타데이터가 올바른지 확인

파일시스템 브라우저

웹 UI에는 SBOM 내 파일을 탐색하기 위한 전체 파일시스템 브라우저가 포함되어 있습니다(Syft로 생성된 파일 메타데이터가 있는 SBOM에 특히 유용):

  • 디렉터리 트리 탐색 이동 경로 표시 포함
  • 파일 검색 하위 문자열 및 glob 패턴 지원(예: *.so, /usr/lib/**/*.conf)
  • 레이어 필터링 컨테이너 이미지 SBOM용(이미지 레이어별 파일 탐색)
  • 구성 요소-파일 관계(어떤 구성 요소가 어떤 파일을 소유하는지)
  • 파일 통계 유형, MIME 유형, 확장자, 레이어별
  • 소유자 없는 파일 감지(어떤 구성 요소와도 연결되지 않은 파일)

옵션

-i (대화형 모드)

키보드 컨트롤로 SBOM을 탐색하는 터미널 기반 TUI 탐색기를 실행합니다.```bash sbomlyze image.json -i

root@kitploit:~
Features: 트리 탐색, 구성 요소 세부 정보, 검색, 라이선스/해시 검사.

### `-web` (웹 서버 모드)

브라우저 기반 SBOM 탐색을 위한 웹 서버를 시작합니다.```bash
# Default port 8080
sbomlyze -web

# Custom port
sbomlyze -web --port 3000

웹 UI는 드래그 앤 드롭 업로드, 대화형 트리 뷰, 심층 검색 및 통계 대시보드를 제공합니다.

--compliance

SBOM을 NTIA, CISA 2025 및 BSI TR-03183 최소 요소 프레임워크에 대해 채점합니다. 준수 점수를 참조하세요.```bash sbomlyze image.json --compliance sbomlyze image.json --compliance --json

root@kitploit:~
### `--format` / `-f`

출력 형식을 선택합니다. 7가지 형식을 사용할 수 있습니다:

| 형식 | 플래그 | 설명 | 가장 적합한 용도 |
|--------|------|-------------|----------|
| **text** | `--format text` (기본값) | 사람이 읽기 쉬운 터미널 출력 | 로컬 검사 |
| **json** | `--json` 또는 `--format json` | 구조화된 JSON | CI 파이프라인, 스크립팅 |
| **sarif** | `--format sarif` | GitHub Code Scanning용 SARIF 2.1.0 | GitHub 통합 |
| **junit** | `--format junit` | JUnit XML 테스트 결과 | CI 테스트 대시보드 |
| **markdown** | `--format markdown` | PR 댓글 작성 준비가 된 Markdown 보고서 | 풀 리퀘스트 댓글 |
| **html** | `--format html` | 자체 포함 HTML 보고서(인라인 CSS/JS) | 감사자, 공유 가능한 보고서 |
| **patch** | `--format patch` | RFC 6902 JSON Patch 작업 | 프로그래매틱 패칭 |```bash
# SARIF output for GitHub Code Scanning
sbomlyze before.json after.json --format sarif > results.sarif

# JUnit output for CI test dashboards
sbomlyze before.json after.json --format junit > results.xml

# Markdown report for PR comments
sbomlyze before.json after.json --format markdown > report.md

# Self-contained HTML report
sbomlyze before.json after.json --format html > report.html

# JSON Patch operations
sbomlyze before.json after.json --format patch > changes.json

SARIF 형식

GitHub Code Scanning에 적합한 SARIF 2.1.0 보고서를 생성합니다. 감지된 규칙은 다음과 같습니다.

  • integrity-drift (오류): 버전 변경 없이 해시 변경
  • deep-dependency (경고): 깊이 3 이상의 새 종속성
  • new-component / removed-component (참고): 구성 요소 추가/제거
  • version-change (참고): 구성 요소 버전 업데이트
  • policy-violation (오류/경고): 정책 규칙 위반

JUnit 형식

다음에 대한 테스트 케이스가 포함된 JUnit XML을 생성합니다.

  • 무결성 드리프트 없음
  • 깊은 전이 종속성 없음(깊이 3 이상)
  • 정책 준수(위반당 테스트 케이스 1개)
  • SBOM diff 요약

Markdown 형식

다음을 포함하는 Markdown 보고서를 생성합니다.

  • 나란한 SBOM 비교 표(파일, 크기, OS, 커버리지 메트릭)
  • 스캔 컨텍스트 세부 정보
  • 주요 발견 사항
  • 유형별로 그룹화된 추가/제거 패키지(접이식 섹션)
  • 드리프트 요약, 종속성 깊이 및 정책 위반

HTML 형식

감사자에게 이메일로 보내거나 릴리스에 첨부하기에 적합한 자체 포함된 단일 HTML 파일(인라인 CSS 및 JavaScript, 외부 자산 없음)을 생성합니다. --compliance가 설정된 경우 통계 대시보드, 종속성 트리, 드리프트 요약 및 내장된 컴플라이언스 보고서가 포함됩니다.

Patch 형식

diff를 나타내는 RFC 6902 JSON Patch 연산 배열(add, remove, replace)을 생성합니다.

--json

--format json의 약어입니다. 프로그램에서 사용할 수 있도록 결과를 JSON 형식으로 출력합니다.```bash

Stats as JSON

sbomlyze image.json --json

Diff as JSON

sbomlyze before.json after.json --json

root@kitploit:~
**통계 JSON 구조:**```json
{
  "stats": {
    "total_components": 71,
    "by_type": {"apk": 71},
    "by_license": {"MIT": 17, "BSD-3-Clause": 8},
    "without_license": 0,
    "with_hashes": 0,
    "without_hashes": 71,
    "total_dependencies": 176,
    "with_dependencies": 65,
    "duplicate_count": 0,
    "by_language": {"go": 45, "python": 12},
    "by_found_by": {"apk-db-cataloger": 71},
    "license_categories": {
      "copyleft": 8,
      "permissive": 55,
      "public_domain": 0,
      "unknown": 8
    },
    "with_cpes": 71,
    "without_cpes": 0,
    "with_purl": 71,
    "without_purl": 0
  },
  "warnings": []
}

--policy <file>

정책 규칙을 적용하고 위반 시 CI를 실패 처리합니다.```bash sbomlyze before.json after.json --policy policy.json

root@kitploit:~
자세한 내용은 [Policy Engine](#policy-engine)을 참조하세요.

### `--strict`

파싱 오류가 발생하면 즉시 실패합니다.```bash
sbomlyze broken.json --strict
# Error parsing broken.json: unknown SBOM format
# exit status 1

--tolerant (기본값)

오류가 발생해도 처리를 계속하고 경고를 수집합니다.```bash sbomlyze broken.json --tolerant

📦 SBOM Statistics

==================

Total Components: 0

...

⚠️ Parse Warnings (1):

[broken.json] unknown SBOM format

root@kitploit:~
파싱 경고에는 구조화된 정보가 포함됩니다: 소스 파일, 사람이 읽을 수 있는 메시지, 그리고 선택적으로 문제를 일으킨 필드.

### `--no-pager`

자동 출력 페이징을 비활성화합니다. 출력을 다른 명령으로 파이프하거나 비대화형 환경에서 실행할 때 유용합니다.```bash
sbomlyze image.json --no-pager
sbomlyze before.json after.json --no-pager | head -20

Policy Engine

CI/CD 파이프라인에서 규칙을 적용하기 위한 정책을 생성합니다. 위반이 발생하면 sbomlyze는 코드 1로 종료됩니다.

정책 파일 형식```json

{ "max_added": 10, "max_removed": 5, "max_changed": 100, "deny_licenses": ["GPL-3.0", "AGPL-3.0"], "require_licenses": true, "deny_duplicates": true, "deny_integrity_drift": true, "max_depth": 3, "warn_supplier_change": true, "warn_new_transitive": true, "min_ntia_score": 85, "min_cisa_score": 70, "min_bsi_score": 80, "min_overall_compliance": 75 }

root@kitploit:~
### Policy Rules

| 규칙 | 유형 | 설명 |
|------|------|-------------|
| `max_added` | int | 허용되는 최대 새 구성 요소 수 (0 = 무제한) |
| `max_removed` | int | 허용되는 최대 제거 구성 요소 수 (0 = 무제한) |
| `max_changed` | int | 허용되는 최대 변경 구성 요소 수 (0 = 무제한) |
| `deny_licenses` | []string | 금지된 라이선스 식별자 목록 |
| `require_licenses` | bool | 모든 *추가된* 구성 요소에 라이선스가 있어야 합니다 (diff 모드에서는 새로 추가된 구성 요소만 확인) |
| `deny_duplicates` | bool | 결과에 중복 패키지가 존재하면 실패 |
| `deny_integrity_drift` | bool | 버전 변경 없이 구성 요소 해시가 변경되면 실패 (공급망 위험) |
| `max_depth` | int | 깊이 >= N인 새 전이 의존성이 있으면 실패 (0 = 무제한) |
| `warn_supplier_change` | bool | 구성 요소 공급자/작성자가 변경된 경우 경고 (실패 아님) |
| `warn_new_transitive` | bool | 새 전이 의존성에 대해 경고 (실패 아님) |
| `min_ntia_score` | int | NTIA 준수 점수가 이 값보다 낮으면 실패 (0-100, 0 = 비활성화) |
| `min_cisa_score` | int | CISA 준수 점수가 이 값보다 낮으면 실패 (0-100, 0 = 비활성화) |
| `min_bsi_score` | int | BSI 준수 점수가 이 값보다 낮으면 실패 (0-100, 0 = 비활성화) |
| `min_overall_compliance` | int | 전체 준수 점수가 이 값보다 낮으면 실패 (0-100, 0 = 비활성화) |

> `min_*_score` 임계값을 설정하면 `--compliance` 플래그 없이도 자동으로 준수 평가가 트리거됩니다.

### 예: 엄격한 정책```json
{
  "max_added": 5,
  "max_removed": 3,
  "max_changed": 20,
  "deny_licenses": ["GPL-3.0", "AGPL-3.0", "SSPL-1.0"],
  "require_licenses": true,
  "deny_duplicates": true,
  "deny_integrity_drift": true,
  "max_depth": 3,
  "warn_supplier_change": true,
  "warn_new_transitive": true,
  "min_overall_compliance": 80
}

정책 위반 출력```

!! Policy Violations (3): [max_added] too many components added: 10 > 5 [max_removed] too many components removed: 7 > 3 [deny_licenses] component foo has denied license: GPL-3.0

root@kitploit:~
## 지원되는 SBOM 형식

| 형식 | 파일 감지 | 추출된 식별자 |
|--------|----------------|----------------------|
| Syft (네이티브) | JSON 키 `"artifacts"` + 다음 중 하나: `"source"`, `"distro"`, `"descriptor"` | PURL, CPE, name |
| CycloneDX | JSON 키 `"bomFormat"` = `"CycloneDX"` 또는 `"$schema"`에 `cyclonedx` 포함 | PURL, CPE, BOM-ref, group (namespace) |
| SPDX | JSON 키 `"spdxVersion"`이 `"SPDX-"`로 시작 | PURL, CPE, SPDXID |

모든 형식은 JSON이어야 합니다. XML 지원은 현재 제공되지 않습니다.

### 형식 변환

sbomlyze는 지원되는 세 가지 형식 간에 변환할 수 있습니다:```bash
sbomlyze convert input.json --to spdx          # any format → SPDX 2.3
sbomlyze convert input.json --to cyclonedx     # any format → CycloneDX 1.5
sbomlyze convert input.json --to syft          # any format → Syft JSON

자세한 내용은 Convert Mode를 참조하세요.

형식 간 비교

sbomlyze는 다양한 형식의 SBOM을 비교할 수 있습니다:```bash

Compare Syft output with CycloneDX

sbomlyze syft-output.json cyclonedx-output.json

Compare SPDX with Syft

sbomlyze spdx-output.json syft-output.json

root@kitploit:~
**참고:** SBOM 형식에 따라 추출되는 세부 정보 수준이 다릅니다. 형식 간 diff는 실제 시스템 변경보다는 형식 차이(예: 필드 가용성)를 반영한 변경 사항으로 표시될 수 있습니다. 주요 발견 사항 시스템은 감지 시 스캔 컨텍스트 불일치에 대해 경고합니다.

## 구성 요소 ID 매칭

구성 요소는 우선순위 기반 ID 시스템을 사용하여 매칭됩니다.

| 우선순위 | 식별자 | 예시 | 설명 |
|----------|------------|---------|-------------|
| 1 | PURL | `pkg:npm/lodash` | 패키지 URL(버전 제거) |
| 2 | CPE | `cpe:vendor:product` | CPE vendor:product(버전 제거) |
| 3 | BOM-ref / SPDXID | `ref:component-123` | CycloneDX bom-ref 또는 SPDX 식별자 |
| 4 | 네임스페이스 + 이름 | `com.example/mypackage` | 이름이 포함된 그룹/네임스페이스 |
| 5 | 이름 | `simple-package` | 이름만 사용하는 폴백 |

## CI/CD 통합

### GitHub Actions

SBOMlyze는 종속성이 없는 JavaScript Action으로 제공됩니다. 체크인되었거나 별도로 생성된 head SBOM을 풀 리퀘스트의 git base에 있는 파일과 비교하고, Job Summary를 게시하며, 선택적으로 SARIF를 생성하거나 PR 댓글 하나를 업데이트합니다.```yaml
name: SBOM Check
on:
  pull_request:

permissions:
  contents: read

jobs:
  sbom-diff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          fetch-depth: 0

      - id: sbomlyze
        uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1
        with:
          sbom-path: build/sbom.cdx.json
          policy: .github/sbom-policy.json
          fail-on: policy

이 Action은 생성기 명령을 실행하지 않습니다. 헤드 SBOM을 별도의 검토된 단계에서 생성하거나 저장소에 커밋하세요. comment와 sarif는 둘 다 기본적으로 false입니다. comment 권한을 사용할 수 없는 경우에도 포크된 PR은 전체 Job Summary를 계속 받습니다. 모든 입출력, SHA 고정, SARIF 업로드, 권한 및 보안 동작은 Action 참조를 참조하세요.

GitLab CI```yaml

sbom-diff: stage: test script: - syft . -o json > current.json - sbomlyze baseline.json current.json --policy policy.json --json > sbom-report.json - sbomlyze baseline.json current.json --format junit > sbom-junit.xml artifacts: paths: - sbom-report.json reports: junit: sbom-junit.xml when: always

root@kitploit:~
### 무결성 드리프트 경고```bash
# Alert on any integrity drift (CI example)
if sbomlyze baseline.json current.json --json | jq -e '.diff.drift_summary.integrity_drift > 0' > /dev/null; then
  echo "⚠️  INTEGRITY DRIFT DETECTED - Investigate immediately!"
  exit 1
fi

깊은 의존성 경고```bash

Alert on new deep transitive dependencies

if sbomlyze baseline.json current.json --json | jq -e '.diff.dependencies.depth_summary.depth_3_plus > 0' > /dev/null; then echo "⚠️ New deep transitive dependencies detected - Review required!" fi

root@kitploit:~
### 규정 준수 게이트```bash
# Fail the build if the SBOM doesn't meet minimum-element requirements
sbomlyze current.json --policy compliance-policy.json
# where compliance-policy.json sets min_overall_compliance / min_ntia_score / etc.

종료 코드

코드의미
0성공, 차이점 또는 위반 사항 없음
1차이점 발견(추가/제거/변경된 구성 요소), 정책 위반 또는 오류

참고: diff 모드에서는 정책 파일 없이도 구성 요소 변경이 감지되면 항상 종료 코드 1이 반환됩니다. 이를 통해 CI에서 간단한 "변경 사항이 있는가?" 게이트로 사용할 수 있습니다.

예제

Docker 이미지 비교```bash

Generate SBOMs

syft nginx:1.25-alpine -o json > nginx-125.json syft nginx:1.26-alpine -o json > nginx-126.json

Compare

sbomlyze nginx-125.json nginx-126.json

root@kitploit:~
### 라이선스 감사```bash
# Check for GPL licenses in new dependencies
cat > audit-policy.json << EOF
{
  "deny_licenses": ["GPL-2.0", "GPL-3.0", "LGPL-2.1", "LGPL-3.0"],
  "require_licenses": true
}
EOF

sbomlyze old.json new.json --policy audit-policy.json

의존성 드리프트 탐지```bash

Detect any changes (strict mode for no drift)

cat > no-drift.json << EOF { "max_added": 0, "max_removed": 0, "max_changed": 0 } EOF

sbomlyze baseline.json current.json --policy no-drift.json

root@kitploit:~
### 규정 준수 점검```bash
# Score an SBOM and enforce a minimum
sbomlyze image.json --compliance

cat > compliance-policy.json << EOF
{
  "min_ntia_score": 90,
  "min_overall_compliance": 80
}
EOF

sbomlyze image.json --policy compliance-policy.json

SBOM 형식 변환```bash

Convert a Syft SBOM to CycloneDX for tools that require it

syft alpine:latest -o json > alpine-syft.json sbomlyze convert alpine-syft.json --to cyclonedx -o alpine-cdx.json

Convert CycloneDX to SPDX for compliance workflows

sbomlyze convert vendor-sbom.cdx.json --to spdx > vendor-sbom.spdx.json

Pipe conversion output directly

sbomlyze convert input.json --to spdx | jq '.packages | length'

root@kitploit:~
### 브라우저에서 SBOM 탐색```bash
# Generate SBOM and explore in web UI
syft alpine:latest -o json > alpine.json

# Start web server
sbomlyze -web

# Then open http://localhost:8080 and drag-drop alpine.json

대화형 터미널 탐색```bash

Explore with keyboard navigation

sbomlyze alpine.json -i

Navigate with arrow keys, search with '/', view details with Enter

root@kitploit:~
## 개발

### 테스트 실행```bash
make test
# or
go test -v ./...

Lint```bash

make lint # runs go vet + golangci-lint + staticcheck make vulncheck # runs govulncheck for known CVEs

root@kitploit:~
### 빌드```bash
make build-quick
# or
go build -o sbomlyze ./cmd/sbomlyze

Make 명령어```bash

make all # Run test, lint, and build make test # Run all tests with race detector make lint # Run go vet, golangci-lint, and staticcheck make vulncheck # Run govulncheck for known vulnerabilities make build # Build with goreleaser (snapshot) make build-quick # Quick build for development make snapshot-test # Run snapshot tests only make update-snapshot # Update snapshot golden files make clean # Remove build artifacts

root@kitploit:~
## 기여

기여를 환영합니다! 좋은 첫 이슈는 [`good first issue`](https://github.com/rezmoss/sbomlyze/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 라벨로 표시됩니다. 존재하는 경우 [CONTRIBUTING.md](https://github.com/rezmoss/sbomlyze/blob/HEAD/CONTRIBUTING.md)를 참조하고, 변경 사항을 제안하려면 이슈나 토론을 자유롭게 열어 주세요.



[ci]: https://github.com/rezmoss/sbomlyze/actions/workflows/ci.yml
[ci-img]: https://github.com/rezmoss/sbomlyze/actions/workflows/ci.yml/badge.svg
[marketplace]: https://github.com/marketplace/actions/sbomlyze-diff
[marketplace-img]: https://img.shields.io/badge/Marketplace-SBOMlyze%20Diff-blue?logo=github
[release]: https://github.com/rezmoss/sbomlyze/releases
[release-img]: https://img.shields.io/github/v/release/rezmoss/sbomlyze
[go-report]: https://goreportcard.com/report/github.com/rezmoss/sbomlyze
[go-report-img]: https://goreportcard.com/badge/github.com/rezmoss/sbomlyze
[license]: https://raw.githubusercontent.com/rezmoss/sbomlyze/main/LICENSE
[license-img]: https://img.shields.io/badge/License-Apache%202.0-blue.svg
[download]: https://github.com/rezmoss/sbomlyze/releases
[download-img]: https://img.shields.io/github/downloads/rezmoss/sbomlyze/total
[scorecard]: https://scorecard.dev/viewer/?uri=github.com/rezmoss/sbomlyze
[scorecard-img]: https://api.scorecard.dev/projects/github.com/rezmoss/sbomlyze/badge
도구 다운로드
형식--to 값출력
CycloneDX 1.5cyclonedx 또는 cdx메타데이터, 종속성 및 속성이 포함된 CycloneDX JSON
SPDX 2.3spdx패키지, 관계 및 외부 참조가 포함된 SPDX JSON
Syftsyft아티팩트, 관계, 소스 및 배포판 정보가 포함된 Syft JSON
FindingDescription
스캔 컨텍스트 불일치SBOM 간 스키마 버전 또는 스캔 범위가 변경되었는지 경고
공격 표면 델타패키지, 파일, 관계 수의 변화를 백분율로 표시
사라진/새로 추가된 생태계완전히 나타나거나 사라진 패키지 유형
OS/배포판 마이그레이션스캔 간 운영 체제 변경 감지
버전 변경 분석업그레이드 vs 다운그레이드 수를 집계하고 변경 사항을 major/minor/patch로 분류
버전 다운그레이드다운그레이드를 보안 신호로 표시하고 구성 요소 세부 정보 제공
무결성 드리프트 컨텍스트패키지 유형별 무결성 드리프트를 위험 가이드와 함께 분석
지배적 경로 패턴유형 및 파일시스템 경로별 집중 변경 사항
제거/추가 핫스팟변경 사항의 영향을 받은 주요 디렉터리
안정적 유형개수가 동일한 패키지 유형 (변경되지 않은 핵심)
라이선스 카테고리 이동카피레프트/퍼미시브 균형의 변화
카탈로거 공백Before에서 패키지를 찾았지만 After에서는 찾지 못한 스캐너
유형표시설명심각도
Version📦버전 번호 변경됨정상
Integrity⚠️해시가 버전 변경 없이 변경됨높음 - 조사 필요!
Metadata📝메타데이터(라이선스 등)만 변경됨낮음
기능설명
드래그 앤 드롭 업로드모든 SBOM 파일(Syft, CycloneDX, SPDX)을 페이지에 드롭하세요(최대 500MB)
의존성 트리확장/축소 탐색이 가능한 대화형 트리 뷰(5000개 이상 구성 요소는 페이지네이션)
구성 요소 세부 정보라이선스, 해시, 의존성, 공급업체 정보, 파일 수를 볼 수 있습니다
원시 JSON 보기각 구성 요소에 대한 구문 강조 JSON
심층 검색원시 JSON 데이터를 포함한 모든 필드 검색
통계 대시보드적용 범위 지표, 라이선스 범주, 언어 분포
파일시스템 브라우저디렉터리 탐색, 검색, 레이어 필터링으로 SBOM 내 파일 탐색