SBOM e Trivy: Segurança da Cadeia de Abastecimento para PME
Neste artigo:
1. Introdução — o que é SBOM
Um SBOM (Software Bill of Materials, ou Lista de Materiais de Software) é um inventário completo e detalhado de todos os componentes que constituem uma aplicação: bibliotecas directas, dependências transitivas, ferramentas de build e respectivas versões. Funciona como a “lista de ingredientes” do software — tal como os rótulos alimentares indicam o conteúdo de um produto, o SBOM revela tudo o que está dentro de uma aplicação.
A CISA (Cybersecurity and Infrastructure Security Agency) define SBOM como um registo formal e legível por máquina que descreve os componentes de software e as relações entre eles. Cada componente inclui nome, versão, fornecedor, hashes criptográficos e licença.
Para uma PME, o SBOM responde a três perguntas críticas:
- O que temos? — inventário exacto de todas as dependências, visíveis e transitivas.
- De onde vem? — origem, fornecedor e licença de cada componente.
- Tem vulnerabilidades? — correlação imediata com bases de dados como a NVD quando surge uma nova CVE.
Sem SBOM, quando é divulgada uma vulnerabilidade crítica (como Log4Shell em 2021), as equipas perdem dias a tentar descobrir onde estão os componentes afectados. Com SBOM, basta filtrar pelo nome e versão do componente vulnerável.
ℹ Exemplo prático: Uma aplicação Node.js simples pode ter 1.200+ dependências transitivas. Sem SBOM, nem o programador sabe que elas existem. Com SBOM gerado por Trivy, toda a cadeia fica documentada em segundos.
2. NIS2 e CRA — requisitos legais
Em 2026, o SBOM deixou de ser opcional. Duas directivas europeias tornam obrigatória a gestão da cadeia de abastecimento de software para um vasto conjunto de organizações, incluindo PME que desenvolvem ou integram produtos digitais.
Directiva NIS2 (Network and Information Security 2)
A NIS2 (Directiva (UE) 2022/2555) entrou em vigor em Outubro de 2024 e exige que entidades essenciais e importantes implementem medidas de gestão de riscos na cadeia de fornecimento digital. Embora não mencione “SBOM” explicitamente, o Artigo 21º exige que as organizações:
- Identifiquem e avaliem os riscos associados a fornecedores de TIC e prestadores de serviços.
- Garantam a segurança dos componentes directos ao longo de todo o ciclo de vida.
- Mantenham um inventário actualizado das dependências de software.
O SBOM é a ferramenta prática que permite cumprir estes requisitos. Sem ele, não é possível demonstrar auditoria da cadeia de fornecimento.
Cyber Resilience Act (CRA)
O CRA (Regulamento (UE) 2024/2847) é mais directo: exige explicitamente que os fabricantes de produtos com elementos digitais forneçam um SBOM. O Anexo I do regulamento estabelece que o SBOM deve ser:
- Gerado e mantido actualizado durante todo o ciclo de vida do produto.
- Fornecido às autoridades competentes mediante pedido.
- Legível por máquina, num formato normalizado (SPDX ou CycloneDX).
⚠ Atenção PME: O CRA aplica-se a qualquer empresa que coloque produtos com elementos digitais no mercado europeu, incluindo microempresas e startups. O não cumprimento pode resultar em coimas até 15 milhões de euros ou 2,5% do volume de negócios global anual.
O calendário de aplicação do CRA é faseado: a partir de Dezembro de 2027, todos os produtos com elementos digitais colocados no mercado UE devem cumprir os requisitos, incluindo o SBOM. As PME precisam de começar a preparar-se já em 2026.
3. Formatos SBOM (CycloneDX vs SPDX)
Existem dois formatos principais de SBOM, ambos aceites pelo CRA e pela CISA:
| Característica | CycloneDX | SPDX |
|---|---|---|
| Mantido por | OWASP Foundation | Linux Foundation |
| Foco principal | Segurança de aplicações | Licenças e conformidade |
| Formatos suportados | JSON, XML | JSON, XML, YAML, tag-value |
| Padrão ISO | ISO/IEC 62422:2026 | ISO/IEC 5962:2021 |
| Ideal para | Análise de vulnerabilidades | Conformidade legal de licenças |
| Vulnerabilidades (VEX) | Integrado nativamente | Via extensão externa |
Para a maioria das PME que se focam em segurança, o CycloneDX é a escolha recomendada: foi desenhado desde o início para análise de vulnerabilidades, suporta VEX (Vulnerability Exploitability eXchange) nativamente e integra-se bem com ferramentas de scan como Trivy. O SPDX é mais adequado quando o foco é conformidade de licenciamento open source.
Ambos os formatos são legíveis por máquina e incluem os campos mínimos exigidos pelo NTIA (National Telecommunications and Information Administration): nome do fornecedor, nome do componente, versão, dependências, hash criptográfico e identificador único.
4. Instalar Trivy
O Trivy é um scanner de segurança open source desenvolvido pela Aqua Security, escrito em Go, que combina geração de SBOM, detecção de vulnerabilidades e análise de configuração numa única ferramenta. É a opção mais completa e acessível para PME.
Instalação em Linux (Debian/Ubuntu)
# Descarregar e instalar o binário
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# Verificar instalação
trivy --version
Instalação em macOS (Homebrew)
brew install trivy
trivy --version
Instalação via Docker (sem instalar nada)
# Executar Trivy sem instalar — útil para CI/CD
docker run --rm -v $(pwd):/work aquasec/trivy:latest fs --scanners vuln /work
O Trivy não requer configuração inicial: na primeira execução descarrega automaticamente a base de dados de vulnerabilidades da NVD e dos advisories de GitHub. O processo demora 2-3 minutos e é repetido periodicamente.
5. Gerar SBOM com Trivy
O Trivy gera SBOMs em CycloneDX e SPDX a partir de imagens Docker, sistemas de ficheiros, repositórios Git ou ficheiros de lock (package-lock.json, requirements.txt, go.mod, pom.xml, etc.).
SBOM CycloneDX a partir de uma imagem Docker
# Gerar SBOM CycloneDX (JSON) de uma imagem
trivy image --format cyclonedx --output sbom.json nginx:latest
# Verificar o conteúdo
cat sbom.json | python3 -m json.tool | head -30
SBOM SPDX a partir de um directório de projecto
# Gerar SBOM SPDX (JSON) de um directório
trivy fs --format spdx-json --output sbom-spdx.json ./meu-projecto
# Para um repositório Git
trivy repo --format cyclonedx --output sbom.json https://github.com/utilizador/repo
Analisar um SBOM existente
Uma das vantagens do Trivy é a capacidade de analisar um SBOM já gerado, sem necessidade de aceder ao código-fonte ou à imagem original:
# Scan de vulnerabilidades a partir de um SBOM
trivy sbom --scanners vuln sbom.json
Este fluxo é especialmente útil quando a equipa de desenvolvimento gera o SBOM e a equipa de segurança executa o scan separadamente, permitindo separação de responsabilidades.
ℹ Dica: O Trivy detecta automaticamente o tipo de projecto (Node.js, Python, Go, Java, Rust, etc.) a partir dos ficheiros de lock presentes. Não é necessário especificar a linguagem manualmente.
6. Scan de Vulnerabilidades
Para além de gerar SBOMs, o Trivy funciona como scanner completo de vulnerabilidades. Identifica CVEs (Common Vulnerabilities and Exposures) em imagens Docker, sistemas de ficheiros, repositórios e até em ficheiros de configuração.
Scan de uma imagem Docker
# Scan completo de vulnerabilidades
trivy image nginx:latest
# Filtrar apenas vulnerabilidades CRÍTICAS e ALTAS
trivy image --severity CRITICAL,HIGH nginx:latest
# Formato JSON para integração com outras ferramentas
trivy image --format json --output resultado.json nginx:latest
Scan de sistema de ficheiros (projecto local)
# Scan de dependências num directório
trivy fs --scanners vuln ./meu-projecto
# Incluir análise de configuração (IaC)
trivy fs --scanners vuln,config ./meu-projecto
Interpretar os resultados
O Trivy apresenta os resultados organizados por severidade (CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN). Cada vulnerabilidade inclui:
- CVE ID — identificador único na base de dados NVD.
- Severidade — classificação CVSS.
- Componente afectado — nome e versão do pacote.
- Versão corrigida — versão onde a vulnerabilidade foi resolvida.
- Fonte — advisory de origem (NVD, GitHub Advisory, etc.).
| Severidade | CVSS | Acção recomendada |
|---|---|---|
| CRITICAL | 9.0 — 10.0 | Corrigir imediatamente |
| HIGH | 7.0 — 8.9 | Corrigir na sprint actual |
| MEDIUM | 4.0 — 6.9 | Planear correção a curto prazo |
| LOW | 0.1 — 3.9 | Avaliar e monitorizar |
⚠ Ignorar vulnerabilidades não é solução: O Trivy permite usar ficheiros .trivyignore para suprimir falsos positivos. No entanto, ignorar vulnerabilidades reais apenas porque a correção é difícil aumenta o risco. Documentar cada decisão de aceitação de risco.
7. Automação em CI/CD
A geração de SBOM e o scan de vulnerabilidades só são eficazes se forem automatizados no pipeline de CI/CD. Isto garante que cada build é analisado e que novas vulnerabilidades são detectadas assim que são divulgadas.
GitHub Actions
name: SBOM e Scan de Vulnerabilidades
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Instalar Trivy
run: curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
- name: Gerar SBOM CycloneDX
run: trivy fs --format cyclonedx --output sbom.json .
- name: Guardar SBOM como artefacto
uses: actions/upload-artifact@v4
with:
name: sbom-cyclonedx
path: sbom.json
- name: Scan de vulnerabilidades
run: trivy fs --scanners vuln --severity CRITICAL,HIGH --exit-code 1 .
O parâmetro --exit-code 1 faz o pipeline falhar se existirem vulnerabilidades CRITICAL ou HIGH, impedindo que código vulnerável chegue a produção.
GitLab CI
stages:
- security
trivy-sbom:
stage: security
image: aquasec/trivy:latest
script:
- trivy fs --format cyclonedx --output sbom.json .
- trivy fs --scanners vuln --severity CRITICAL,HIGH --exit-code 1 .
artifacts:
paths:
- sbom.json
expire_in: 30 days
Verificação periódica (cron)
Novas vulnerabilidades são divulgadas diariamente. Mesmo sem alterar o código, um componente pode tornar-se vulnerável. A verificação periódica via cron garante detecção contínua:
# Correr diariamente às 06:00 — scan de SBOM existente
0 6 * * * trivy sbom --scanners vuln --severity CRITICAL,HIGH \
--format json --output /var/log/trivy/scan-$(date +\%F).json \
/caminho/para/sbom.json
8. Boas Práticas
Para que o SBOM e o Trivy sejam efectivamente úteis, convém seguir um conjunto de boas práticas que vão além da mera execução da ferramenta:
Geração e armazenamento
- Gerar SBOM em cada build — não apenas em releases. As dependências mudam frequentemente entre commits.
- Armazenar SBOMs como artefactos — guardar cada versão do SBOM junto com o artefacto correspondente (imagem Docker, binário) durante todo o ciclo de vida do produto.
- Versionar SBOMs no Git — para projectos pequenos, guardar o SBOM no repositório permite histórico e auditoria.
Gestão de vulnerabilidades
- Estabelecer SLAs por severidade — CRITICAL: 48h; HIGH: 7 dias; MEDIUM: 30 dias; LOW: avaliar caso a caso.
- Corrigir, não ignorar — actualizar o componente para a versão corrigida sempre que possível. Usar
.trivyignoreapenas para falsos positivos documentados. - Monitorizar continuamente — executar scans diários sobre SBOMs existentes, porque novas CVEs surgem todos os dias.
- Correlacionar com VEX — usar CycloneDX VEX para indicar que uma vulnerabilidade não é explorável no contexto específico, reduzindo alarmes falsos.
Conformidade e auditoria
- Manter registo de scans — guardar resultados de scans com data e versão do SBOM para demonstrar conformidade com NIS2 e CRA.
- Separar responsabilidades — desenvolvimento gera o SBOM; segurança executa o scan. Isto garante independência na auditoria.
- Revisão trimestral — auditar SBOMs antigos para identificar componentes desactualizados ou obsoletos.
- Documentar aceitação de risco — cada vulnerabilidade não corrigida deve ter justificação documentada e aprovada.
✓ Resumo para PME: Começar com Trivy é gratuito e simples: instalar, gerar SBOM CycloneDX de cada build, automatizar scans no CI/CD com --exit-code 1 para CRITICAL/HIGH, e guardar SBOMs como artefactos. Esta base satisfaz os requisitos de NIS2 e CRA para a maioria das PME que desenvolvem software.
A segurança da cadeia de abastecimento de software deixou de ser uma preocupação apenas das grandes empresas. Com Trivy, uma PME pode implementar um programa robusto de SBOM e gestão de vulnerabilidades em horas, sem custos de licenciamento e com automação total via CI/CD. A janela de adaptação ao CRA fecha-se em Dezembro de 2027 — começar agora é a forma mais económica de garantir conformidade.
Para aprofundar, consultar as directrizes da CISA sobre SBOM, a documentação do CycloneDX e o repositório oficial do Trivy no GitHub.