
Security Researcher
Heitor Gouvêa

A discussão sobre SBOM (Software Bill of Materials) deixou de ser um tema periférico em segurança para se tornar parte central da engenharia moderna de software. A crescente complexidade dos sistemas, compostos majoritariamente por dependências open source e artefatos de terceiros, tornou inviável manter a segurança sem visibilidade estrutural. SBOM surge justamente como essa camada de visibilidade formalizada.
O que é SBOM
SBOM não é apenas uma lista de dependências. Tecnicamente, trata-se de um documento estruturado que descreve a composição de um artefato de software, incluindo metadados suficientes para identificação inequívoca de cada componente. Isso envolve nome, versão, licença, fornecedor, hashes criptográficos, relações de dependência e, idealmente, identificadores padronizados como PURL (Package URL) ou CPE.
Os dois formatos predominantes são SPDX [1] e CycloneDX [2]. O primeiro nasceu no contexto de compliance de licenças, enquanto o segundo foi projetado com foco mais explícito em segurança de aplicações. Ambos evoluíram para suportar modelagem complexa de dependências, relações hierárquicas, assinaturas digitais e extensões para dados de vulnerabilidade. Em termos formais, um arquivo SBOM é um grafo direcionado de componentes, onde nós representam pacotes e arestas representam relações de dependência. Essa modelagem permite raciocínio automatizado sobre impacto, herança de risco e análise transitiva.
Porque SBOM é estrutural para segurança
A principal razão pela qual SBOM se tornou crítico está na assimetria entre consumo e controle. Organizações consomem milhares de dependências sem governança. Quando ocorre um incidente como Log4Shell, a pergunta relevante não é “temos um scanner?”, mas sim “sabemos exatamente onde essa biblioteca está sendo usada?”. Sem SBOM, a resposta depende de buscas e inspeções manuais ou reconstrução tardia do build. Com SBOM, a organização possui um inventário verificável que pode ser cruzado com bases de vulnerabilidade.
No contexto de gestão de vulnerabilidades baseada em componentes, SBOM é a camada de dados primária. O processo moderno não parte mais da varredura isolada, mas da correlação entre inventário estruturado e inteligência de vulnerabilidade (NVD, OSV, GHSA). Isso reduz ruído, melhora rastreabilidade e permite reprocessamento contínuo sem necessidade de novo scan completo do artefato.
Em ambientes maduros, SBOM é gerada no momento do build e armazenada como artefato versionado. A cada atualização em bases de vulnerabilidade, o inventário pode ser reavaliado sem recompilar o software. Esse modelo é significativamente mais eficiente e alinhado com práticas de DevSecOps.
SBOM como elemento de segurança da cadeia de suprimentos
No contexto de software supply chain security, SBOM cumpre papel semelhante ao de um manifesto criptográfico. Ela fornece rastreabilidade sobre o que foi efetivamente incluído no build. Quando combinada com assinatura digital (por exemplo, usando cosign) e frameworks como SLSA (em outras publicações futuras iremos escrever sobre o assunto), SBOM contribui para garantir integridade e proveniência. É importante compreender que SBOM não é scanner de vulnerabilidade. Ela não identifica falhas por si só. Ela fornece o inventário necessário para que scanners e motores de risco operem com precisão.
Ferramentas para geração de SBOM
Diversas ferramentas implementam geração de SBOM com diferentes estratégias de análise. Aqui no Quor, utilizamos majoritariamente o Syft, mas além dele, destacam-se:
Trivy, da Aqua Security, que combina geração de SBOM e scanning de vulnerabilidades;
CycloneDX CLI, mantido pela OWASP;
SPDX tools, associados à Linux Foundation;
tern, focado em análise de containers;
cdxgen, voltado para múltiplos ecossistemas de aplicação.
Cada ferramenta possui trade-offs em termos de profundidade de análise, suporte a ecossistemas, integração com CI/CD e modelo de dados. Para este artigo, o foco será o Syft por sua robustez técnica, arquitetura modular e ampla adoção em ambientes cloud-native.

Newsletter Quor
Syft
Desenvolvido pela Anchore, é uma ferramenta de geração de SBOM que opera por análise estática de artefatos. Seu funcionamento é baseado em “catalogers”, módulos responsáveis por identificar pacotes dentro de diferentes formatos de filesystem ou imagens de container. Arquiteturalmente, o Syft realiza:
Extração do sistema de arquivos da imagem (quando aplicável);
Identificação de manifestos de pacote (package-lock.json, pom.xml, go.mod, etc.);
Correlação com bancos internos de padrões para inferência de versão;
Normalização dos componentes para um modelo interno;
Serialização para formatos como SPDX ou CycloneDX;
Uma característica técnica relevante é o suporte nativo a PURL. Isso reduz ambiguidades na etapa posterior de correlação com vulnerabilidades.
Exemplo prático com Syft
A geração de SBOM de uma imagem é direta:
$ syft nginx:latest -o cyclonedx-json > sbom.json

Internamente, o Syft baixa a imagem (se necessário), desmonta suas camadas e analisa cada filesystem layer. Ele identifica tanto pacotes do sistema operacional (por exemplo, dpkg ou rpm) quanto dependências de aplicação. O resultado em CycloneDX inclui:
Componentes;
Hashes;
Relações de dependência;
Metadata do build;
Tipo do componente (library, application, framework).

Para análise posterior, a SBOM pode ser usada por ferramentas como Grype (também da Anchore) ou Trivy (da Aqua Security), para correlacionar com bancos de CVE. Para apenas visualização, opcões são Sunshine e SBOMPlay.
SBOM na gestão de vulnerabilidades
É tecnicamente mais eficiente escanear o SBOM da imagem do que a própria imagem OCI/Docker, sobretudo sob a ótica de custo computacional, latência e consumo de I/O. Ao analisar diretamente a imagem (por exemplo, com: $ grype image:1.0), o scanner precisa baixar ou acessar camadas, reconstruir o filesystem e indexar artefatos antes de correlacioná-los com bases de vulnerabilidades. Já no modelo baseado em SBOM, como em: $ grype sbom:path/to/sbom.json, essa etapa de extração é eliminada, pois a enumeração de pacotes e dependências já está previamente materializada em formato estruturado (CycloneDX ou SPDX), reduzindo drasticamente o overhead de processamento. Essa abordagem é aplicável a ferramentas como Grype e Trivy, que suportam ingestão direta de SBOM, e se alinha a estratégias modernas de DevSecOps. Assim, além de otimizar recursos, o escaneamento de SBOM favorece reprodutibilidade, desacoplamento entre build e análise de vulnerabilidades e melhor escalabilidade em ambientes com grande volume de imagens.
Um ponto mais técnico é a análise transitiva: uma vulnerabilidade pode existir em uma dependência indireta que não aparece explicitamente no arquivo principal do projeto. SBOM resolve isso ao modelar o grafo completo de dependências. Em ambientes corporativos, a arquitetura madura envolve:
Geração de SBOM no pipeline;
Assinatura digital da SBOM;
Armazenamento em repositório central;
Reavaliação contínua contra feeds atualizados;
Priorização baseada em risco contextual (criticidade do ativo, exposição, exploitabilidade);
Essa abordagem desloca a segurança de um modelo de varredura periódica para um modelo orientado a inventário permanente.
Limitações, escopo e evolução do conceito
Uma confusão recorrente é tratar SBOM como se fosse uma representação completa do software em si. Não é. SBOM descreve componentes incorporados ao artefato, especialmente dependências de terceiros, bibliotecas open source, pacotes do sistema operacional e frameworks. Ela não descreve o código proprietário desenvolvido internamente pela organização, tampouco modela lógica de negócio, fluxos de execução ou vulnerabilidades introduzidas no código autoral. Em termos formais, SBOM é um inventário de third-party composition. A ideia é responder à pergunta:
“Quais blocos externos compõem este software?”
Não responder:
“Este software possui falhas de lógica ou vulnerabilidades no código desenvolvido internamente?”
Esse ponto é crucial porque a gestão de vulnerabilidades baseada em SBOM está focada primariamente em risco herdado via dependências. Vulnerabilidades em código próprio exigem práticas distintas, como SAST, DAST, análise de código manual e threat modeling.
Outra limitação estrutural é que SBOM representa um estado do artefato no momento da geração. Ela não captura comportamento dinâmico, carregamento tardio de bibliotecas, plugins externos ou dependências resolvidas em runtime fora do ambiente analisado. Além disso, SBOM não é um mecanismo de avaliação criptográfica. Ela pode incluir hashes de integridade, mas não atesta por si só a autenticidade ou proveniência do build. Para isso, é necessário combinar com assinatura digital e mecanismos de verificação de supply chain.
Se SBOM representa a composição estática do artefato, a RBOM (Runtime Bill of Materials) descreve os componentes efetivamente carregados e utilizados em execução. Essa distinção é relevante porque nem todo componente presente no build é necessariamente carregado em runtime. Por outro lado, sistemas podem carregar módulos adicionais dinamicamente. Ela reduz o ruído ao identificar o que realmente está ativo em produção, permitindo priorização de vulnerabilidades com base em exposição real.
Criptografia e assinatura de SBOM
Para que SBOM seja confiável em cadeias de suprimento complexas, ela precisa ser protegida contra adulteração. Isso introduz o tema de:
Assinatura digital de SBOM;
Vinculação da SBOM ao artefato via hash;
Armazenamento imutável.
Sem assinatura, SBOM é apenas um documento declarativo. Com a assinatura, passa a integrar um modelo de atestação. Esse é um ponto frequentemente negligenciado: SBOM aumenta a visibilidade, mas somente combinada com garantias de integridade ela fortalece efetivamente a cadeia de confiança.
Conclusão
SBOM deve ser compreendida como um mecanismo estruturado de visibilidade de componentes, não como uma solução universal de segurança. Ela não substitui análise de código-fonte, não corrige falhas de arquitetura e tampouco elimina a necessidade de controles adicionais ao longo do ciclo de vida do software. Seu valor reside na capacidade de modelar a composição do software de forma padronizada, verificável e processável por máquinas, transformando dependências que frequentemente são invisíveis em dados explícitos e auditáveis.
Quando integrada a práticas complementares, como assinatura criptográfica para garantir integridade e proveniência, inventários específicos de criptografia (CBOM), análise de componentes efetivamente carregados em execução (RBOM) e motores de priorização baseados em risco contextual, a SBOM deixa de ser apenas documentação e passa a compor uma arquitetura mais ampla de segurança de software baseada em evidências.
Nesse sentido, SBOM representa uma mudança estrutural na forma como tratamos segurança. Em vez de concentrar esforços exclusivamente na inspeção do binário final, passamos a considerar a composição como dado primário de segurança. A visibilidade antecede a detecção. Ferramentas como Syft viabilizam essa prática em escala, integrando a geração de inventário ao próprio pipeline de build. Quando esse inventário é incorporado a um fluxo contínuo de gestão de vulnerabilidades, com reavaliação periódica contra bases atualizadas e critérios de priorização baseados em impacto real, a organização reduz significativamente o tempo de resposta a incidentes, aumenta a precisão na identificação de exposição e fortalece de maneira concreta a segurança da cadeia de suprimentos de software.
Referências
Com o Quor, segurança vira vantagem competitiva. Descubra como em uma demo personalizada.

