Pular para o conteúdo principal

🧬 SBOM de Containers e Rastreabilidade de Runtime

🌟 Objetivo

Garantir que todas as imagens de container utilizadas em pipelines ou produção possuem um SBOM (Software Bill of Materials) gerado a partir do artefacto real, versionado e rastreável, permitindo:

  • Visibilidade objetiva sobre componentes, bibliotecas e camadas;
  • Análise de vulnerabilidades com base no conteúdo efetivo da imagem;
  • Comparação entre versões e deteção de alterações inesperadas;
  • Suporte a requisitos normativos (ex.: SLSA, SSDF, EO 14028).

No modelo SbD-ToE, o SBOM é tratado como evidência de composição, não como garantia de segurança nem como substituto de análise de risco.


🧬 O que é um SBOM de container

Um SBOM de container representa o estado efetivo da imagem após o build, incluindo:

  • Pacotes instalados (ex.: apk, apt, npm, pip);
  • Dependências transitivas;
  • Informação de origem e licenciamento;
  • Hashes, localizações e metadados;
  • Ligações conhecidas a CVEs.

🧱 Um SBOM não é equivalente a um Dockerfile, lockfile ou manifesto declarativo.
Ele descreve o que está realmente presente, incluindo efeitos colaterais do processo de build.


⚠️ SBOM completo ≠ ausência de risco

Em ambientes automatizados, é essencial evitar interpretações incorretas:

  • ✔️ SBOM existente → composição visível
  • ❌ SBOM existente ≠ imagem segura
  • ❌ SBOM sem CVEs ≠ risco inexistente

Limitações típicas incluem:

  • dependências não detetadas;
  • binários estáticos;
  • componentes incorporados manualmente;
  • diferenças entre ambientes de build.

Por isso, o SBOM deve ser usado como input técnico para análise, não como conclusão.


📘 Formatos e ferramentas recomendadas

FormatoFerramentas suportadasObservações técnicas
CycloneDXSyft, Trivy, Docker SBOM, GitHubLeve, extensível, adequado a pipelines
SPDXSPDX tools, FOSSologyFrequente em auditorias formais
Syft JSONSyft (syft image:tag -o json)Útil para validações customizadas

🌟 Recomendação SbD-ToE: CycloneDX JSON como formato base para SBOMs de imagens de container.


🛠️ Como gerar SBOMs de containers

EtapaExemplo técnicoNotas operacionais
Geração pós-buildsyft docker:app:tag -o cyclonedx-jsonDeve refletir a imagem final
Geração alternativatrivy image --format cyclonedx image:tagPode enriquecer com CVEs
Integração CI/CDStep obrigatório após buildExecução automática
VersionamentoArtefacto associado ao digest da imagemCorrelação inequívoca

A geração automática não elimina a necessidade de interpretação humana dos resultados.


📂 Armazenamento, versionamento e correlação

Para garantir rastreabilidade real:

  • Armazenar SBOM como artefacto versionado;
  • Associar explicitamente:
    • imagem (digest),
    • build,
    • pipeline;
  • Referenciar SBOM via labels ou metadados OCI;
  • Opcionalmente assinar SBOM ou ligá-lo à assinatura da imagem.

A ausência desta correlação reduz o SBOM a um ficheiro informativo sem valor auditável.


🔍 Utilização correta do SBOM

No SbD-ToE, o SBOM deve ser usado para:

  • Alimentar scanners SCA e processos de análise;
  • Detetar alterações inesperadas entre builds;
  • Apoiar resposta a incidentes;
  • Justificar decisões de aceitação ou mitigação.

Não deve ser usado como:

  • selo de aprovação;
  • substituto de análise contextual;
  • prova de ausência de vulnerabilidades.

✅ Boas práticas

  • Gerar SBOM automaticamente após cada build;
  • Tratar SBOM como artefacto versionado;
  • Rever SBOM após alterações de base image;
  • Correlacionar SBOM com assinatura e proveniência;
  • Usar SBOM como input para decisão humana documentada;
  • Rever critérios de análise após incidentes relevantes.

📎 Referências cruzadas

DocumentoRelação com SBOM de containers
01-imagens-base.mdImagens aprovadas devem ter SBOM associado
03-assinatura-cadeia-trust.mdLigação entre integridade e composição
07-vulnerabilidades-imagens.mdAnálise SCA baseada no SBOM
09-riscos-processo-imagens.mdSBOM como evidência, não decisão
15-aplicacao-lifecycle.mdIntegração operacional no ciclo de vida

🔍 O SBOM responde à pergunta “o que está aqui?”.
A pergunta “isto é aceitável?” continua a exigir análise e decisão humana.