Todos nós já ouvimos muito sobre SBOMs recentemente. Ouvimos falar da sua utilidade, da sua composição e dos seus requisitos de segurança e regulamentação. Desta vez quero falar sobre um segmento um pouco menos conhecido do CyclonDX SBOM – o Gráfico de Dependência.
Ao contrário do que o nome indica, o Gráfico de Dependência não é um aspecto visual do SBOM. Seu objetivo é ajudar a descrever a dependência dos componentes de outros componentes. Isso depende de um componente bom-ref – um identificador exclusivo para cada componente SBOM. A ideia é mostrar quais elementos são dependentes ou conectados entre si. Parece bastante simples, certo?
Scribe usa muito o Gráfico de Dependência no processo de decidir o que elementos do SBOM são importantes e ao que devemos prestar atenção. Neste artigo, veremos o caminho Escriba usa o Gráfico de Dependência SBOM e os benefícios práticos que podemos colher dele. Veremos alguns exemplos JSON de um gráfico de dependência SBOM e concluiremos com uma olhada no que mais podemos fazer com ele no futuro.
Qual é o gráfico de dependência?
O Gráfico de Dependência foi adicionado ao formato CyclonDX em 2019. Seu objetivo declarado era unir componentes usando um identificador exclusivo que mais tarde veio a ser conhecido como bom-ref. No Exemplo de casos de uso do CycloneDX, podemos ver como as dependências usam o ID de referência dos componentes para mostrar o que depende de quê:
Mesmo sem entrar em exemplos, tenho certeza que você pode perceber que a capacidade de conectar um elemento a outros pode ser útil. Por um lado, como o caso de uso mais comum, permite ver imediatamente todas as dependências de uma biblioteca em um único lugar.
Um gráfico de dependência pode representar relacionamentos diretos e transitivos e normalmente tem um nó de profundidade.
Embora uma árvore de dependência completa possa ser representada, ela não é recomendada porque pode resultar em loops infinitos devido a dependências circulares ou outros relacionamentos complexos. É aconselhável manter seus gráficos simples, representando um único nó.
Como o Scribe está usando o gráfico de dependência?
Scribe faz uso extensivo de metadados coletados junto com o SBOM para fornecer contexto às evidências. O contexto da evidência inclui onde e quando foi coletada, qual é o seu assunto e assim por diante. Como a Scribe se esforça para oferecer informações confiáveis e reutilizáveis, utilizamos o gráfico de dependência para criar conexões que podem ser usadas em diferentes clientes e projetos.
Aqui estão os links do gráfico de dependência que o Scribe suporta:
- Arquivo de pacote: Esta conexão nos permite ver quais arquivos pertencem a cada pacote. Obviamente, se encontrarmos um arquivo em um pacote ao qual ele não pertence, é uma indicação clara de um problema.
- Indicação de camada e camada de pacote: Saber quais pacotes estão localizados em qual camada de imagem é útil, pois assim podemos ordenar as vulnerabilidades por camadas. Os problemas que você herdou de sua imagem base ou de sua imagem pai não teriam a mesma urgência e capacidade direta de influenciá-los como aqueles encontrados nas camadas que você mesmo criou.
- Arquivo de camada: Semelhante à conexão pacote-arquivo, esta conexão nos permite ver quais arquivos estão associados a cada camada. Junto com as outras conexões, podemos verificar se os arquivos estão associados ao pacote e camada corretos e que não há arquivos em locais onde não deveriam estar.
- Confirmar e Arquivo de Confirmação: Ao identificar quais arquivos vieram de qual commit podemos ter certeza de que não houve alterações indevidas nos arquivos de commit antes de serem usados para construir a imagem final.
Usando todas essas informações juntas, podemos desenhar uma imagem bastante abrangente do SBOM sobre quais arquivos devem ser encontrados e onde. Como resultado, temos uma chance melhor de detectar valores discrepantes ou aberrações que possam indicar um problema na sua imagem – seja um problema de integridade ou um possível ataque.
Gráfico de dependência e aplicação de políticas
O Scribe aproveita esse gráfico de dependência abrangente para aplicar políticas complexas de maneira eficaz. Por exemplo, o Arquivo de confirmação a dependência é aproveitada para manter as políticas do proprietário do código. Isso nos permite verificar quem enviou qual arquivo e quando. O Arquivo de pacote dependência é empregada para garantir políticas de integridade do pacote. Ele nos permite verificar quais arquivos devem estar vinculados a cada pacote e verificar se esse é realmente o caso. Além disso, o Camada de pacote dependência é usada para adaptar políticas de pacote aos requisitos específicos de cada camada. Como cada imagem de software pode construir suas camadas de maneira diferente, é inestimável saber definitivamente quais pacotes estão vinculados a qual camada da imagem.
Personalizando as informações do seu gráfico de dependência
Sabemos que nem todos têm interesse em partilhar toda esta informação ou que não se importam em vê-la ou utilizá-la de alguma forma.
Como forma de resolver isso, o Scribe permite que você crie versões mais específicas do seu SBOM. Aqui estão as opções de personalização que você pode usar com nosso Valint ferramenta ao criar SBOMs que oferecemos suporte atualmente. Opções adicionais estarão disponíveis no futuro:
- Para incluir apenas grupos de componentes específicos, use –componentes para selecionar entre os tipos de grupo.
- Para incluir ou excluir tipos de pacotes específicos, use –tipo de pacote or –tipo de exclusão de pacote para selecionar um tipo de pacote específico.
- Para incluir os pacotes instalados encontrados (grupo de pacotes instalar) ou os pacotes referenciados pelas fontes (grupo de pacotes índice), usar –grupo de pacotes para selecionar entre as opções.
- Para excluir componentes, use –filtro-regex, –escopo do filtro, e –filtro-purl para excluir qualquer componente que você deseja excluir.
- Para anexar qualquer conteúdo de arquivo, use –attach-regex para incluir o conteúdo de arquivos externos.
- Para incluir ambientes e rótulos personalizados, use –env e -rótulo para anexar seus campos personalizados. Isso permite adicionar metadados personalizados ao SBOM que você está criando.
Olhando para o futuro
A Scribe considera de extrema importância o contexto e as conexões que fazemos entre os diferentes componentes do seu SBOM. Com a capacidade do nosso Valint de assinar, verificar e gerenciar políticas consideramos totalmente possível ver um futuro onde será possível fazer mais do que apenas gerir políticas de segurança. Podemos imaginar um futuro onde as informações do gráfico de dependência possam ser usadas no controle de qualidade, em necessidades específicas de conformidade e até mesmo em campos não relacionados, como fintech e agricultura.
A plataforma do Scribe tem um nível gratuito onde você pode começar a experimentá-la agora com todos os recursos ao seu alcance para brincar. Eu encorajo você a De uma chance, veja a utilidade dessas informações acumuladas ao longo do tempo e veja para que você pode usar as informações. Espero que você se junte a nós enquanto damos as boas-vindas a um futuro mais seguro para todos nós.
Este conteúdo é oferecido a você pela Scribe Security, um fornecedor líder de soluções de segurança de cadeia de suprimentos de software ponta a ponta – fornecendo segurança de última geração para artefatos de código e processos de desenvolvimento e entrega de código em todas as cadeias de suprimentos de software. Saiba mais.