Introdução ao SBOM (Software Bill of Materials) para rastreabilidade de dependências
1. O que é um SBOM e por que ele é essencial?
Um SBOM (Software Bill of Materials) é uma lista detalhada e estruturada de todos os componentes, bibliotecas, módulos e dependências que compõem um software. Assim como uma lista de ingredientes em um produto alimentício permite rastrear a origem de cada componente, o SBOM oferece transparência total sobre o que está dentro de uma aplicação.
No contexto atual de segurança de software, onde ataques à cadeia de suprimentos (supply chain attacks) se tornaram cada vez mais frequentes — como os incidentes envolvendo SolarWinds e Log4j — o SBOM deixou de ser uma boa prática opcional para se tornar uma necessidade estratégica. Ele permite:
- Transparência: conhecer exatamente quais componentes estão em uso
- Gestão de riscos: identificar vulnerabilidades conhecidas em dependências
- Compliance: atender a regulamentações como a Ordem Executiva 14028 dos EUA e requisitos setoriais
Sem um SBOM, uma organização pode estar executando software com centenas de dependências desconhecidas, cada uma representando um ponto potencial de falha ou ataque.
2. Formatos e padrões de SBOM
Existem dois principais formatos padronizados para SBOM, ambos mantidos por comunidades abertas:
SPDX (Software Package Data Exchange): Desenvolvido pela Linux Foundation, é o formato mais maduro e abrangente. Suporta descrição detalhada de licenças, relacionamentos entre componentes e informações de segurança. É amplamente utilizado em projetos de código aberto e governamentais.
CycloneDX: Criado pela OWASP, é um formato mais leve e orientado a segurança. Oferece suporte nativo a vulnerabilidades, avaliação de risco e metadados de componentes. Tornou-se o formato preferido para integração com ferramentas de segurança modernas.
Ambos os formatos podem ser representados em JSON ou XML, e há ferramentas que convertem entre eles, garantindo interoperabilidade.
3. Componentes essenciais de um SBOM
Um SBOM bem estruturado deve conter:
- Identificação de dependências diretas e transitivas: dependências diretas são aquelas explicitamente incluídas pelo desenvolvedor; transitivas são dependências das dependências
- Metadados: versão exata de cada componente, licença de uso, fornecedor ou mantenedor, e hashes criptográficos (SHA-256) para verificação de integridade
- Relacionamentos: hierarquia entre componentes (ex: "contém", "depende de", "compila a partir de")
- Ciclo de vida: informações sobre quando o SBOM foi gerado e sua validade
Exemplo de um SBOM simplificado em formato CycloneDX:
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"version": 1,
"metadata": {
"timestamp": "2025-01-15T10:30:00Z",
"tools": [
{
"vendor": "anchore",
"name": "syft",
"version": "1.18.0"
}
]
},
"components": [
{
"type": "library",
"name": "log4j-core",
"version": "2.17.1",
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.17.1",
"licenses": [
{
"license": {
"id": "Apache-2.0"
}
}
],
"hashes": [
{
"alg": "SHA-256",
"content": "a1b2c3d4e5f6..."
}
]
},
{
"type": "library",
"name": "jackson-databind",
"version": "2.15.3",
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.15.3"
}
]
}
4. Como gerar um SBOM na prática
Diversas ferramentas open source permitem gerar SBOMs automaticamente a partir do código-fonte ou de imagens de contêiner:
- Syft: ferramenta da Anchore que gera SBOMs a partir de sistemas de arquivos, imagens Docker e repositórios
- Trivy: scanner de vulnerabilidades que também gera SBOMs em formato CycloneDX
- CycloneDX CLI: utilitário oficial da OWASP para geração e validação de SBOMs
Exemplo de comando para gerar um SBOM com Syft a partir de uma imagem Docker:
syft packages docker:nginx:latest -o cyclonedx-json > sbom-nginx.json
Para integrar em um pipeline CI/CD (ex: GitHub Actions):
- name: Generate SBOM
run: |
syft packages . -o cyclonedx-json > sbom.json
- name: Upload SBOM artifact
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.json
5. Uso do SBOM para rastreabilidade e gestão de vulnerabilidades
O verdadeiro valor de um SBOM emerge quando ele é correlacionado com bancos de vulnerabilidades conhecidas, como:
- NVD (National Vulnerability Database): mantido pelo NIST, contém CVEs catalogadas
- OSV (Open Source Vulnerabilities): banco de dados aberto mantido pelo Google
- GitHub Advisory Database: base de avisos de segurança do GitHub
Com um SBOM em mãos, é possível identificar rapidamente se uma biblioteca específica é afetada por uma CVE recém-descoberta:
trivy sbom sbom.json --severity HIGH,CRITICAL
Isso permite ações de remediação direcionadas: atualizar a dependência para uma versão corrigida, aplicar um patch ou substituir o componente problemático. Em vez de vasculhar manualmente todo o código, a equipe de segurança sabe exatamente onde agir.
6. SBOM no ciclo de vida do software e compliance
O SBOM não é um artefato único — ele deve ser gerado em múltiplos pontos do ciclo de vida:
- Durante o desenvolvimento: a cada build, gerar um SBOM atualizado
- No momento da liberação: incluir o SBOM como parte do pacote de entrega
- Em produção: manter histórico de SBOMs para auditoria retrospectiva
Regulamentações como a Ordem Executiva 14028 (EUA) e requisitos da FDA para software médico exigem que fornecedores de software forneçam SBOMs aos seus clientes. O compartilhamento seguro pode ser feito via assinatura digital e armazenamento em repositórios confiáveis.
7. Desafios e boas práticas na adoção de SBOM
Desafios comuns:
- Dependências transitivas podem gerar SBOMs com milhares de entradas
- Falsos positivos em scanners de vulnerabilidades
- Manter SBOMs atualizados em ambientes de microsserviços dinâmicos
Boas práticas:
- Automatizar a geração de SBOMs em cada build
- Armazenar SBOMs em repositórios versionados (ex: junto com o código-fonte)
- Integrar com ferramentas como Snyk, OWASP Dependency-Check ou Grype para análise contínua
- Validar periodicamente a acurácia dos SBOMs gerados
8. Futuro do SBOM e tendências em segurança de software
O ecossistema de SBOM está evoluindo rapidamente:
- SBOMs assinados: uso de assinaturas criptográficas (ex: com Sigstore/Cosign) para garantir autenticidade e integridade
- VEX (Vulnerability Exploitability eXchange): complemento ao SBOM que indica se uma vulnerabilidade específica é realmente explorável no contexto da aplicação
- SLSA (Supply-chain Levels for Software Artifacts): framework de níveis de maturidade para segurança da cadeia de suprimentos
- IA para análise: ferramentas baseadas em inteligência artificial começam a automatizar a análise de dependências e sugerir correções
A combinação de SBOM com VEX e SLSA promete criar um ecossistema onde cada artefato de software tenha rastreabilidade completa, desde a origem até a implantação.
Referências
- CycloneDX Specification (OWASP) — Documentação oficial do formato CycloneDX, com exemplos e guias de implementação
- SPDX Specification (Linux Foundation) — Especificação completa do formato SPDX, incluindo campos obrigatórios e opcionais
- Syft - Generate SBOMs (Anchore) — Repositório oficial da ferramenta Syft para geração de SBOMs a partir de imagens e sistemas de arquivos
- Trivy - Vulnerability Scanner (Aqua Security) — Ferramenta que combina scanning de vulnerabilidades com geração de SBOM em formato CycloneDX
- NVD - National Vulnerability Database (NIST) — Base oficial de CVEs, utilizada para correlação com SBOMs na identificação de vulnerabilidades
- Executive Order 14028 - Improving the Nation's Cybersecurity — Ordem executiva dos EUA que estabelece requisitos de SBOM para fornecedores de software governamental
- SLSA Framework (Google) — Framework de níveis de maturidade para segurança da cadeia de suprimentos de software, complementar ao SBOM