
Git diff para SBOMs—compare documentos CycloneDX, SPDX e Syft, detecte adulterações e sirva como gate de CI.
# sbomlyze
**`git diff` para o seu SBOM.** Compare dois Software Bills of Materials e veja o que mudou entre builds, versões e releases.
O sbomlyze compara hashes de componentes, não apenas strings de versão. Quando um atacante troca um pacote sem incrementar sua versão, o sbomlyze sinaliza. Geradores e scanners de vulnerabilidade não detectam isso.
[![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]
[![OpenSSF Best Practices][best-practices-img]][best-practices]
[![License: Apache-2.0][license-img]][license]
[![Downloads][download-img]][download]
[](https://github.com/rezmoss/sbomlyze-go-spdx-demo/pull/2)
Veja por que este sinal é diferente de um diff de manifesto ou de um diff comum de componentes em
[Manifest diff vs. SBOM diff vs. integrity drift](https://github.com/rezmoss/sbomlyze/blob/main/docs/manifest-vs-sbom-vs-integrity-drift.md).
> Geradores criam SBOMs e scanners encontram CVEs. O sbomlyze informa o que mudou entre dois SBOMs e se você deve confiar nisso.
> Execute-o após o seu gerador: `syft image:tag -o cyclonedx-json | sbomlyze - --compliance` analisa e pontua o SBOM gerado sem um arquivo temporário. Compare-o com uma baseline para classificar o drift e controlar seu pipeline.
## Início rápido com GitHub Action
Adicione o [SBOMlyze Diff do GitHub Marketplace][marketplace] para comparar um SBOM versionado
ou gerado separadamente com sua baseline do git. O SHA imutável abaixo é
a Action `v0.5.1` publicada:```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
```
A Action escreve um Job Summary por padrão e pode impor política, reportar
desvio de integridade, fazer upload de SARIF ou manter um único comentário de
pull-request. Consulte
[a referência completa da Action](https://github.com/rezmoss/sbomlyze/blob/main/ACTION.md) para entradas, saídas, permissões
e orientações de segurança. Consulte o
[repositório de demonstração ao vivo](https://github.com/rezmoss/sbomlyze-action-demo)
para uma atualização de dependência aprovada e uma alteração de hash na mesma
versão bloqueada, com execuções públicas de workflow e evidência SARIF.
Para dogfood específico de formato, use o exemplo público
[Go + SPDX](https://github.com/rezmoss/sbomlyze-go-spdx-demo),
[Node + CycloneDX](https://github.com/rezmoss/sbomlyze-node-cyclonedx-demo) ou
[container](https://github.com/rezmoss/sbomlyze-container-demo). Cada um
contém cinco cenários de revisão reproduzíveis. O
[guia beta de 10 minutos](https://github.com/rezmoss/sbomlyze/blob/main/BETA.md) reúne quatro perguntas focadas de ativação e
qualidade de sinal.
SBOMs gerados não precisam ser commitados: `baseline: workflow-artifact`
recupera o artefato correspondente mais recente de uma execução bem-sucedida do
branch padrão. Um [workflow companheiro do Syft fixado por versão](https://github.com/rezmoss/sbomlyze/blob/main/examples/workflows/syft-companion.yml)
mostra a geração e a publicação de baseline enquanto o SBOMlyze permanece
responsável pela revisão e política.
## Por que sbomlyze?
Muitas ferramentas geram SBOMs. Poucas os comparam, e menos ainda dizem se uma
mudança é rotineira ou um sinal de alerta na cadeia de suprimentos. O sbomlyze
preenche essa lacuna.
| Capacidade | **sbomlyze** | cyclonedx-cli | sbomqs | syft / trivy |
|---|:---:|:---:|:---:|:---:|
| **diff** SBOM-para-SBOM | ✅ | básico | ❌ | ❌ |
| Desvio de **integridade / adulteração** (hash alterado sem versão) | ✅ | ❌ | ❌ | ❌ |
| Diff do grafo de dependências + risco de profundidade transitiva | ✅ | ❌ | ❌ | ❌ |
| Pontuação de conformidade **NTIA / CISA / BSI** | ✅ | ❌ | ✅ | ❌ |
| Conversão de formato (Syft / CycloneDX / SPDX) | ✅ | ✅ | ❌ | parcial |
| Exploradores **TUI + Web UI** | ✅ | ❌ | ❌ | ❌ |
| Gate de política + SARIF / JUnit / Markdown / HTML / Patch | ✅ | parcial | parcial | parcial |
## Funcionalidades
- **Diff de SBOM**: Compare dois SBOMs e veja componentes adicionados, removidos e alterados rapidamente
- **Classificação de desvio**: Distinga desvio de versão de **desvio de integridade** (um hash alterado sem mudança de versão, sinalizando adulteração) e desvio de metadados
- **Pontuação de conformidade**: Pontue qualquer SBOM em relação aos elementos mínimos **NTIA**, **CISA 2025** e **BSI TR-03183**
- **Diff do grafo de dependências**: Acompanhe dependências transitivas e profundidade da cadeia de suprimentos
- **Suporte a múltiplos formatos**: Syft, CycloneDX, SPDX (JSON)
- **Conversão de formato**: Converta entre os formatos CycloneDX, SPDX e Syft
- **Correspondência de identidade robusta**: precedência PURL → CPE → BOM-ref → namespace/name
- **Modo de estatísticas**: Analise SBOMs individuais para métricas de licença, dependência e integridade
- **Modo TUI interativo**: Explore SBOMs com navegação por teclado e busca
- **Modo Web UI**: Explorador de SBOM baseado em navegador com upload por arrastar e soltar
- **Motor de políticas**: Imponha regras de desvio, licença e pontuação de conformidade em pipelines de CI
- **GitHub Marketplace Action**: Faça gate de pull requests com base em desvio de SBOM com Job Summary, SARIF e saída opcional de comentário
- **Detecção de duplicatas e colisões**: Encontre múltiplas versões do mesmo pacote e correspondências de identidade ambíguas
- **Múltiplos formatos de saída**: Texto, JSON, SARIF, JUnit XML, Markdown, HTML, JSON Patch
- **Parsing tolerante**: Continue em caso de erros com avisos estruturados
## Instalação
### Homebrew (macOS/Linux)```bash
brew install rezmoss/sbomlyze/sbomlyze
```
### Script de Instalação
O script de instalação baixa o binário correto para o seu SO/arquitetura:```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
```
**Opções do instalador:**
| Opção | Descrição |
|--------|-------------|
| `-b <dir>` | Diretório de instalação (padrão: `./bin`) |
| `-d` | Ativar saída de depuração |
| `-v <ver>` | Instalar versão específica (padrão: mais recente) |
O instalador sempre verifica o checksum da release. Quando um GitHub CLI compatível
está instalado, ele também verifica a proveniência de build da release e falha de forma segura se
essa verificação não for bem-sucedida.
### Go Install```bash
go install github.com/rezmoss/sbomlyze/cmd/sbomlyze@latest
```
### A partir de uma versão binária
Baixe o binário mais recente em [GitHub Releases](https://github.com/rezmoss/sbomlyze/releases).
A partir da v0.3.7, os arquivos de release são publicados com atestados de artefato do GitHub. Verifique um download de forma independente com:```bash
gh attestation verify ./sbomlyze_0.4.0_Linux_x86_64.tar.gz \
--repo rezmoss/sbomlyze \
--signer-workflow rezmoss/sbomlyze/.github/workflows/release.yml
```
Instruções para repositórios apt, rpm e apk não assinados foram removidas até que os repositórios suportem verificação de assinatura nativa do gerenciador de pacotes.
**Usuários de macOS:** Remova o sinalizador de quarentena após o download:```bash
xattr -d com.apple.quarantine ./sbomlyze
chmod +x ./sbomlyze
```
### Compilar a partir do código-fonte```bash
git clone https://github.com/rezmoss/sbomlyze.git
cd sbomlyze
go build -o sbomlyze ./cmd/sbomlyze
```
## Início Rápido```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
```
## Uso```
sbomlyze <sbom1|-> [sbom2|-] [options]
sbomlyze convert <sbom|-> --to <format> [-o output]
Modes:
Single file: sbomlyze <sbom> [--json] Show statistics
Interactive: sbomlyze <sbom> -i Interactive explorer
Convert: sbomlyze convert <sbom> --to <fmt> Convert SBOM format
Web server: sbomlyze -web [--port 8080] Web UI explorer
Two files: sbomlyze <sbom1> <sbom2> [...] 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 <port> Web server port (default 8080)
--json Output in JSON format (shortcut for --format json)
--format <format> Output format: text, json, sarif, junit, markdown, html, patch
--compliance Show NTIA/CISA/BSI compliance scoring
--policy <file> Policy file for CI checks
--strict Fail on parse warnings
--tolerant Continue on parse warnings (default)
--no-pager Disable automatic paging of output
--to <format> Target format for convert: cyclonedx (cdx), spdx, syft
-o, --output <file> Output file for convert (default: stdout)
--version, -v Show version information
--help, -h Show this help message
```
## Comandos
### Modo de Estatísticas (Arquivo Único)
Analise um SBOM para obter insights sobre componentes, licenças e dependências.```bash
sbomlyze image.json
```
A saída inclui contexto do scan, descobertas principais autodetectadas e estatísticas:```
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
```
#### Principais Descobertas
O sbomlyze gera automaticamente insights sobre o seu SBOM. Para análise de arquivo único, estes incluem:
| Descoberta | Descrição |
|---------|-------------|
| **Detecção de SO/distro** | Identifica o sistema operacional ou distro a partir dos metadados do SBOM |
| **Ecossistema dominante** | Informa quando um tipo de pacote domina (>60% de todos os pacotes) |
| **Pegada no sistema de arquivos** | Número de arquivos rastreados no sistema de arquivos |
| **Densidade de relacionamentos** | Contagem de relacionamentos de contenção e de dependência |
| **Pontos críticos de localização** | Principais diretórios onde os componentes são encontrados |
| **Perfil de risco de licenças** | Detalhamento das porcentagens de licenças permissivas/copyleft/desconhecidas |
| **Avisos de qualidade de dados** | Alertas quando a cobertura de licença (<50%), hash (<50%) ou PURL (<80%) é baixa |
| **Avisos de duplicatas** | Sinaliza grupos de componentes duplicados |
| **Detalhamento de catalogadores** | Principais scanners/catalogadores que detectaram componentes (SBOMs do Syft) |
#### Métricas de Cobertura
O modo de estatísticas calcula porcentagens de cobertura para avaliação da qualidade dos dados:
| Métrica | Descrição |
|--------|-------------|
| **Cobertura de PURL** | Porcentagem de componentes com Package URLs |
| **Cobertura de CPE** | Porcentagem de componentes com CPEs (prontidão para varredura de vulnerabilidades) |
| **Cobertura de licença** | Porcentagem de componentes com pelo menos uma licença |
| **Cobertura de hash** | Porcentagem de componentes com hashes de integridade |
#### Categorização de Licenças
As licenças são automaticamente categorizadas em:
| Categoria | Exemplos |
|----------|----------|
| **Copyleft** | GPL, LGPL, AGPL, MPL, EPL, CDDL |
| **Permissiva** | MIT, BSD, Apache, ISC, Zlib, Unlicense |
| **Domínio Público** | Dedicações ao Domínio Público |
| **Desconhecida** | Licenças não reconhecidas ou ausentes |
### Modo de Conversão
Converta SBOMs entre os formatos CycloneDX, SPDX e Syft JSON. O formato de entrada é detectado automaticamente.```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
```
#### Formatos de Destino Suportados
| Formato | valor de `--to` | Saída |
|--------|-------------|--------|
| CycloneDX 1.5 | `cyclonedx` ou `cdx` | CycloneDX JSON com metadados, dependências e propriedades |
| SPDX 2.3 | `spdx` | SPDX JSON com pacotes, relacionamentos e referências externas |
| Syft | `syft` | Syft JSON com artefatos, relacionamentos, origem e informações da distribuição |
#### O que é Preservado
A conversão preserva nomes de componentes, versões, PURLs, CPEs, licenças, hashes, informações do fornecedor e relacionamentos de dependência. Campos específicos do formato (por exemplo, idioma do Syft, foundBy, locations) são transportados através de propriedades do CycloneDX ao converter para CDX.
### Modo Diff (Dois Arquivos)
Compare dois SBOMs para ver o que mudou entre versões.```bash
sbomlyze v1.0.json v2.0.json
```
#### Visão Geral do Diff
O diff começa com uma comparação de metadados lado a lado (nomes de arquivos, tamanhos, informações do SO, informações da ferramenta, contagens de componentes) seguida por detalhes do contexto da varredura quando disponíveis.
#### Saída```
📊 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 ⚠️
```
#### Principais Descobertas do Diff
No modo diff, o sbomlyze gera automaticamente insights mais ricos comparando ambos os SBOMs:
| Descoberta | Descrição |
|---------|-------------|
| **Incompatibilidade de contexto de varredura** | Avisa se a versão do schema ou o escopo da varredura mudou entre os SBOMs |
| **Delta da superfície de ataque** | Alterações na contagem de pacotes, arquivos e relacionamentos com percentuais |
| **Ecossistemas desaparecidos/novos** | Tipos de pacotes que apareceram ou desapareceram completamente |
| **Migração de SO/distro** | Detecta mudanças no sistema operacional entre varreduras |
| **Análise de mudança de versão** | Conta upgrades vs downgrades, classifica mudanças como major/minor/patch |
| **Downgrades de versão** | Sinaliza downgrades como um sinal de segurança com detalhes dos componentes |
| **Contexto de desvio de integridade** | Detalha o desvio de integridade por tipo de pacote com orientação de risco |
| **Padrões de caminho dominantes** | Mudanças concentradas por tipo e caminho no sistema de arquivos |
| **Pontos críticos de remoção/adição** | Principais diretórios afetados por mudanças |
| **Tipos estáveis** | Tipos de pacotes com contagens idênticas (núcleo inalterado) |
| **Mudanças de categoria de licença** | Alterações no equilíbrio copyleft/permissiva |
| **Lacunas de catalogação** | Scanners que encontraram pacotes no Before mas nenhum no After |
#### Amostras de Pacotes por Tipo
Componentes adicionados e removidos são agrupados por tipo de pacote com listagens de amostra, facilitando a visualização do que mudou em cada ecossistema.
## Pontuação de Conformidade
Pontue qualquer SBOM em relação aos três principais frameworks de elementos mínimos para responder à pergunta que auditores e equipes de compras sempre fazem: **"Este SBOM está completo o suficiente?"**```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
```
### Frameworks Avaliados
| Framework | Verificações | Requisitos notáveis |
|-----------|--------|----------------------|
| **NTIA Minimum Elements** (2021) | 7 | nome, versão, fornecedor, IDs únicos (PURL/CPE), relações de dependência, autor do SBOM, timestamp |
| **CISA 2025 Minimum Elements** (rascunho de Ago 2025) | 10 | adiciona produtor de software, informações de licença, **hash do componente** e nome da ferramenta além do NTIA |
| **BSI TR-03183-2** (v2.1.0, 2025) | 9 | exige contato do criador do componente, **hash SHA-512**, licenças em formato SPDX e contato do criador do SBOM |
### Apresentação da Pontuação
Cada framework reporta uma porcentagem (verificações aprovadas / total de verificações) mais uma pontuação geral (média entre os frameworks), com indicadores de status:
| Indicador | Pontuação |
|-----------|-------|
| 🟢 | ≥ 90% |
| 🟡 | 70–89% |
| 🟠 | 50–69% |
| 🔴 | < 50% |
A saída JSON (`--compliance --json`) inclui o relatório completo com detalhes de aprovação/falha por verificação; o formato HTML incorpora o relatório de conformidade na página do relatório.
### Restringindo Conformidade em CI
Aplique limites de conformidade através do [policy engine](#policy-engine). Definir qualquer limite aciona a avaliação de conformidade sem a flag `--compliance`:```json
{
"min_ntia_score": 85,
"min_cisa_score": 70,
"min_bsi_score": 80,
"min_overall_compliance": 75
}
```
I'm ready to translate the Kitploit tool content from English to Portuguese. Please provide chunk 33 of 115.```bash
sbomlyze image.json --policy compliance-policy.json
```
## Diff de Grafo de Dependências
O sbomlyze vai além de simples diffs de listas de componentes para analisar o grafo de dependências completo, detetando riscos na cadeia de fornecimento introduzidos através de dependências transitivas.
### Funcionalidades
| Funcionalidade | Descrição |
|---------|-------------|
| **Diff de arestas** | Dependências diretas adicionadas/removidas (A depende de B) |
| **Alcançabilidade transitiva** | Novas dependências indiretas que aparecem através do grafo |
| **Rastreamento de perda transitiva** | Dependências transitivas que foram removidas |
| **Rastreamento de caminho** | Mostra exatamente como cada nova dependência transitiva é alcançada |
| **Rastreamento de profundidade** | Quantos saltos cada nova dependência está do seu código |
| **Resumo de risco** | Dependências de profundidade 3+ sinalizadas como de maior risco |
### Porque é que a Profundidade Importa
Dependências introduzidas mais profundamente no grafo são:
- Mais difíceis de auditar e rever
- Frequentemente incluídas sem aprovação explícita
- Vetores comuns para ataques à cadeia de fornecimento (ex.: incidente event-stream)
O resumo de profundidade ajuda a priorizar a revisão:
| Profundidade | Nível de Risco | Descrição |
|-------|------------|-------------|
| **1** | Baixo | Dependências diretas (você escolheu estas) |
| **2** | Médio | Dependências das suas dependências |
| **3+** | Alto ⚠️ | Dependências transitivas profundas - reveja cuidadosamente |
### Exemplo: Detetar Dependências Transitivas Profundas```bash
# Before: app -> express (simple, 1 dep)
# After: app -> express -> lodash -> underscore -> deep-lib (chain of 4)
sbomlyze before.json after.json
```
I'm ready to translate the Kitploit tool content from English to Portuguese. Please provide the source text chunk you'd like me to translate.```
🔗 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 ⚠️
```
### Saída JSON para Grafo de Dependências```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
}
}
}
```
## Detecção de Drift
O sbomlyze classifica as alterações de componentes em três tipos de drift, ajudando você a distinguir atualizações normais de alterações potencialmente suspeitas.
### Tipos de Drift
| Tipo | Indicador | Descrição | Severidade |
|------|-----------|-------------|----------|
| **Versão** | 📦 | Número da versão alterado | Normal |
| **Integridade** | ⚠️ | Hash alterado SEM alteração de versão | Alta - investigue! |
| **Metadados** | 📝 | Apenas metadados (licenças, etc.) alterados | Baixa |
### Drift de Integridade (Sinal de Segurança)
O drift de integridade ocorre quando o hash de um componente muda, mas sua versão permanece a mesma. Isso pode indicar:
- **Ataque à cadeia de suprimentos**: O pacote foi substituído por uma versão maliciosa
- **Recompilação sem incremento de versão**: Legítimo, mas má prática
- **Ambiente de compilação diferente**: Problemas de reprodutibilidade```bash
# Example output with integrity drift
~ suspicious-pkg ⚠️ [INTEGRITY]
hash[SHA256]: abc123 -> def456
```
**Recomendação**: Sempre investigue a deriva de integridade. Pode ser benigna, mas é um sinal fundamental para a segurança da cadeia de suprimentos.
### Saída JSON para Deriva
O resumo da deriva está dentro do objeto `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
}
}
}
```
**Extraindo resumo de drift:**```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'
```
## Detecção de Duplicatas e Colisões
### Detecção de Duplicatas
sbomlyze identifica componentes com a mesma identidade, mas versões diferentes dentro de um SBOM:```
⚠️ Duplicates Found: 2
lodash: [4.17.20, 4.17.21]
express: [4.18.0, 4.19.2]
```
No modo diff, a comparação de versões duplicadas rastreia:
- **Novas duplicatas**: Componentes que se tornaram duplicados no novo SBOM
- **Duplicatas resolvidas**: Grupos de duplicatas que foram consolidados
- **Adições/remoções de versões**: Alterações de versão dentro de grupos de duplicatas existentes
### Detecção de Colisões
Colisões são correspondências de identidade ambíguas onde componentes compartilham o mesmo ID mas têm características conflitantes:
| Tipo | Descrição |
|------|-------------|
| **Incompatibilidade de nome** | Nomes de componentes diferentes mapeados para o mesmo ID de identidade |
| **Incompatibilidade de hash** | A mesma versão de um componente tem hashes diferentes (potencial adulteração) |
## SBOMlyze SBOM Explorer (TUI)```bash
sbomlyze sbom.json -i
```

### Atalhos de Teclado da TUI
#### Navegação
| Tecla | Ação |
|-----|--------|
| `↑` / `k` | Mover para cima |
| `↓` / `j` | Mover para baixo |
| `PgUp` / `Ctrl+u` | Meia página para cima |
| `PgDn` / `Ctrl+d` | Meia página para baixo |
| `Home` / `g` | Ir para o topo |
| `End` / `G` | Ir para o fim |
| `Enter` | Ver detalhes do componente |
| `Esc` / `Backspace` | Voltar |
| `q` / `Ctrl+c` | Sair |
#### Pesquisa e Filtro
| Tecla | Ação |
|-----|--------|
| `/` | Pesquisa profunda em todos os campos (nome, PURL, licenças, JSON bruto) |
| `t` | Filtrar por tipo de pacote (npm, apk, golang, pypi, etc.) |
| `c` | Limpar todos os filtros ativos |
#### Vistas
| Tecla | Contexto | Ação |
|-----|---------|--------|
| `j` | Vista de detalhes | Ver JSON bruto do componente com realce de sintaxe |
| `d` | Vista JSON | Voltar à vista de detalhes |
| `Enter` | Vista JSON | Exportar JSON do componente para ficheiro |
| `?` | Qualquer vista | Mostrar ajuda com todos os atalhos de teclado |
### Vista de Detalhes do Componente
A vista de detalhes mostra informações abrangentes do componente:
- Informações do pacote (nome, versão, PURL, namespace, fornecedor)
- Licenças com indicadores visuais
- Hashes de integridade
- CPEs (Common Platform Enumeration)
- Lista de dependências
- Identificadores (ID, BOM-ref, SPDX-ID)
## Modo Web UI
Inicie um explorador de SBOM baseado em navegador com carregamento de ficheiros por arrastar e largar:```bash
# Start web server on default port 8080
sbomlyze -web
# Start on custom port
sbomlyze -web --port 3000
```
Em seguida, abra http://localhost:8080 no seu navegador.
<img width="1497" height="1266" alt="Screenshot 2026-02-06 at 17 08 13" src="https://assets.kitploit.com/production/public/readmes/12637/57bcd50bc9b9955714b9078d1de37fc8152be02845a5c25b74a8fd14ff587bf4.png" />
### Recursos da Interface Web
| Recurso | Descrição |
|---------|-------------|
| **Upload por Arrastar e Soltar** | Solte qualquer arquivo SBOM (Syft, CycloneDX, SPDX) na página (até 500MB) |
| **Árvore de Dependências** | Visualização em árvore interativa com navegação de expandir/recolher (paginada para >5000 componentes) |
| **Detalhes do Componente** | Visualize licenças, hashes, dependências, informações do fornecedor, contagem de arquivos |
| **Visualização de JSON Bruto** | JSON com destaque de sintaxe para cada componente |
| **Busca Profunda** | Pesquise em todos os campos, incluindo dados de JSON bruto |
| **Painel de Estatísticas** | Métricas de cobertura, categorias de licença, distribuição de linguagens |
| **Navegador de Sistema de Arquivos** | Navegue pelos arquivos dentro do SBOM com navegação por diretórios, busca e filtragem por camada |
### Estatísticas Exibidas
A interface web exibe estatísticas abrangentes, incluindo:
- **Contagens de componentes** por tipo de pacote (npm, apk, pypi, etc.)
- **Distribuição de licenças** com detalhamento por categoria (copyleft, permissiva, domínio público)
- **Métricas de cobertura** com barras de progresso visuais:
- Cobertura de PURL (presença de URL do pacote)
- Cobertura de CPE (prontidão para varredura de vulnerabilidades)
- Cobertura de licenças
- Cobertura de hash/integridade
- **Detalhamento de linguagens** (para SBOMs gerados pelo Syft)
- **Estatísticas de relacionamento** (contains, dependency-of, evident-by)
- **Avisos de detecção de duplicatas**
### Casos de Uso
**Revisão de Segurança**
- Faça upload de um SBOM e explore a árvore de dependências completa
- Verifique a cobertura de CPE para garantir que a varredura de vulnerabilidades funcione
- Revise componentes sem licenças ou hashes
**Auditoria de Conformidade**
- Pesquise por licenças específicas em todos os componentes
- Visualize a distribuição de categorias de licença (copyleft vs permissiva)
- Exporte o JSON bruto para documentação
**Depuração de Desenvolvimento**
- Explore quais pacotes estão incluídos na sua imagem
- Verifique dependências transitivas
- Confirme se os metadados do pacote estão corretos
### Navegador de Sistema de Arquivos
A interface web inclui um navegador de sistema de arquivos completo para explorar arquivos dentro de SBOMs (particularmente útil para SBOMs gerados pelo Syft com metadados de arquivos):
- **Navegação em árvore de diretórios** com trilha de navegação
- **Busca de arquivos** com suporte a substrings e padrões glob (ex.: `*.so`, `/usr/lib/**/*.conf`)
- **Filtragem por camada** para SBOMs de imagens de contêiner (navegue pelos arquivos por camada da imagem)
- **Relacionamentos componente-arquivo** (qual componente possui quais arquivos)
- **Estatísticas de arquivos** por tipo, tipo MIME, extensão e camada
- **Detecção de arquivos sem proprietário** (arquivos não associados a nenhum componente)
## Opções
### `-i` (Modo Interativo)
Inicie o explorador TUI baseado em terminal para navegar por SBOMs com controles de teclado.```bash
sbomlyze image.json -i
```
Recursos: navegação em árvore, detalhes de componentes, pesquisa, inspeção de licença/hash.
### `-web` (Modo Servidor Web)
Inicie um servidor web para exploração de SBOM baseada em navegador.```bash
# Default port 8080
sbomlyze -web
# Custom port
sbomlyze -web --port 3000
```
A interface web fornece upload por arrastar e soltar, visualização em árvore interativa, pesquisa profunda e painel de estatísticas.
### `--compliance`
Pontua o SBOM em relação aos frameworks de elementos mínimos NTIA, CISA 2025 e BSI TR-03183. Consulte [Pontuação de Conformidade](#compliance-scoring).```bash
sbomlyze image.json --compliance
sbomlyze image.json --compliance --json
```
### `--format` / `-f`
Selecione o formato de saída. Sete formatos estão disponíveis:
| Formato | Flag | Descrição | Melhor Para |
|--------|------|-------------|----------|
| **text** | `--format text` (padrão) | Saída de terminal legível por humanos | Inspeção local |
| **json** | `--json` ou `--format json` | JSON estruturado | Pipelines de CI, scripting |
| **sarif** | `--format sarif` | SARIF 2.1.0 para GitHub Code Scanning | Integração com GitHub |
| **junit** | `--format junit` | Resultados de testes em XML JUnit | Dashboards de testes de CI
```
---
[Read more](https://github.com/rezmoss/sbomlyze)