SPDX e CycloneDX: escolher um formato de SBOM

Sytance · Atualizado

Tanto o SPDX como o CycloneDX descrevem os componentes de software e as respetivas relações. A escolha depende das informações de que o destinatário necessita e das versões que as suas ferramentas conseguem processar. Por isso, acordar um formato também implica acordar a versão, a codificação e os campos obrigatórios.

Necessidades de informação do destinatário

Um fornecedor de firmware que envia uma SBOM a um fabricante pode ter requisitos diferentes dos de uma equipa que a carrega num serviço de gestão de vulnerabilidades. As versões e codificações suportadas pelo destinatário determinam que ficheiros pode processar. Um ficheiro representativo ajuda a confirmar esse suporte.

Registe as informações necessárias, incluindo a identidade do produto, os identificadores dos componentes, as relações, as licenças e quaisquer dados de vulnerabilidade ou proveniência. Se o recetor suportar apenas parte do formato, determine se os campos omitidos afetam a finalidade do intercâmbio.

Versões das especificações e suporte das ferramentas

SPDX 2.3 e SPDX 3.0.1 são especificações publicadas distintas. O SPDX 3.0.1 utiliza um modelo com perfis, incluindo uma classe de SBOM de software. Não se deve presumir que um consumidor que aceite JSON SPDX 2.3 também aceite um documento 3.x.

A descrição geral da especificação CycloneDX indica a versão 1.7. O seu modelo de objetos inclui componentes, serviços, relações de dependência e informações sobre vulnerabilidades. Um produtor pode suportar uma especificação recente, enquanto um importador a jusante suporta uma versão anterior.

Detalhe do intercâmbioExemplo de SPDXExemplo de CycloneDX
Versão2.3 ou 3.0.11.7
Identidade do documentoModelo de documento específico da versãoNúmero de série e versão da BOM
DependênciasRelações tipificadasGrafo de dependências
ValidaçãoRegras da versão selecionadaEsquema da versão selecionada

Relações e campos de licença

No SPDX 2.3, CONTAINS descreve uma relação de inclusão e DEPENDS_ON descreve uma dependência. Um pacote estar incluído num arquivo é diferente de outro pacote necessitar dele para compilar ou executar. Preserve o tipo e o sentido da relação durante a importação.

O SPDX 2.3 também distingue entre uma licença declarada e uma licença concluída. A declaração de um fornecedor e a conclusão de um analista não devem tornar-se silenciosamente o mesmo campo. A ferramenta recetora tem de manter essa distinção se for relevante para a revisão.

No CycloneDX, examine o grafo de dependências e as referências aos componentes da versão escolhida. Uma lista plana de componentes pode continuar legível após a conversão, mas perder os percursos necessários para investigar que produtos utilizam determinado componente.

Verificação das informações convertidas

Um pequeno ficheiro de teste pode revelar informações perdidas durante a conversão. Inclua um produto, uma dependência direta e uma indireta. Duas versões do mesmo componente, uma expressão de licença e um campo explicitamente marcado como desconhecido permitem verificar mais do que a simples aceitação do ficheiro.

  • Valide o original segundo a versão de especificação declarada.
  • Importe-o na ferramenta recetora e inspecione o produto de destino.
  • Compare as identidades e as versões dos componentes e o sentido das relações.
  • Verifique os campos de licença e a representação da informação desconhecida.
  • Se for suportada, exporte novamente e compare o significado, não a formatação do ficheiro.

Escolha de um formato para entrega

Se um cliente exigir SPDX 2.3, entregue essa versão com os campos acordados e mantenha o registo de origem mais completo se a conversão eliminar outros dados. Se o fluxo de receção já consumir CycloneDX e preservar o grafo necessário, utilize a versão de CycloneDX suportada.

Se os clientes precisarem dos dois formatos, mantenha e teste os mapeamentos dos campos entre eles. Documente as informações que se perdem ou passam para extensões durante a conversão. A conversão tem de transformar os dados segundo a especificação de destino.

Após a importação, verifique se o destinatário ainda consegue utilizar as informações conforme previsto. Na análise de vulnerabilidades, isso inclui partir de um componente e encontrar os produtos e versões que o utilizam.

Leituras adicionais