Header Image

Compreensão da cadeia de suprimentos de software de ponta a ponta

Nicholas Liffen
Nicholas Liffen // Director, GitHub Advanced Security // GitHub

Ter uma compreensão abrangente de sua cadeia de suprimentos de software é fundamental para entender sua postura de segurança e a superfície de ameaças. Um dos motivos pelos quais a segurança da cadeia de suprimentos de software é tão complicada é que você não só precisa conhecer e garantir a segurança de suas dependências, mas também precisa conhecer e proteger suas dependências transitórias, ou seja, as dependências de suas dependências, as dependências dessas dependências e assim por diante. Algumas plataformas de programação, como Ruby e Node.js, incluem arquivos de bloqueio que especificam dependências transitórias. Mas nem todas as plataformas fazem isso.

Neste guia, usaremos o GitHub Actions para usar a API GitHub Dependency Submission para criar um mapa de dependências temporárias e fornecê-lo ao gráfico de dependências para que o Dependabot possa verificar e alertar sobre todas as suas dependências. Em seguida, demonstraremos como gerar uma lista de materiais de software (SBOMs) para que você possa relatar todas as suas dependências e compartilhar o estado da segurança da sua Segurança da cadeia de suprimentos de software com as partes interessadas relevantes em um formato consistente e repetível. Teremos a companhia novamente do principal especialista em segurança de campo do GitHub, Keith Hoodlet, para alguns insights.


Neste guia, você aprenderá:

  • Como usar o GitHub Actions para criar e fazer upload de um snapshot de dependência com a API GitHub Dependency Submission

  • Como visualizar os resultados com gráfico de dependência

  • Como exportar automaticamente uma lista de materiais de software (SBOM) com o GitHub Actions


1. Verifique seu gráfico de dependência atual.

Selecione a guia Insights no repositório Web Goat e selecione Dependency Graph na barra lateral. Deveríamos ter quatro páginas de dependências listadas para o Web Goat neste momento. 

2. Use o GitHub Actions para criar e fazer upload de um snapshot de dependência.

É possível gerar mapas de dependência manualmente, mas faremos isso automaticamente com o GitHub Actions.

Para segurança ideal, você precisa manter seu gráfico de dependência o mais atualizado possível. Isso significa que você deve atualizá-lo com constância e frequência. Você não pode depender de uma compilação para determinar se há uma vulnerabilidade crítica. A automação é a melhor maneira de garantir que tudo esteja atualizado.

Keith Hoodlet
Keith Hoodlet // Principal Field Security Specialist, CodeQL // GitHub

No repositório do Web Goat, selecione a guia Actions.

Selecione New workflow. Nomeie-o upload-dependencies-of-dependenices.yml.

Cole o seguinte fluxo de trabalho no arquivo upload-dependencies-of-dependenices.yml :

name: "Dependency Submission API Upload"

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  schedule:
    - cron: '26 18 * * 1'

jobs:
  depSubmissionAPIUpload:
    name: Analyze
    runs-on: 'ubuntu-latest'
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
    - name: Submit Dependency Snapshot
      uses: advanced-security/maven-dependency-submission-action@v3

Isso usará uma ação criada pelo GitHub chamada maven-dependency-submission-action para usar o Maven para capturar um snapshot de todas as suas dependências, incluindo dependências temporárias, e carregá-las no GitHub por meio da API de envio de dependências.

É possível encontrar ações semelhantes para outros sistemas e plataformas de construção, como Go, Gradle, Mill e Scala.

3. Revise os resultados.

Mais uma vez, selecione a guia Insights no repositório Web Goat e selecione Dependency Graph na barra lateral.

Devemos agora ter cerca de 16 páginas de dependências, proporcionando uma nova visibilidade sobre essas dependências e sua postura de segurança.

Gerar uma SBOM

A ideia de uma lista de materiais de software (SBOMs) tornou-se cada vez mais importante com o aumento das preocupações com a segurança da cadeia de suprimentos de software e das recomendações e requisitos de reguladores e agências governamentais em todo o mundo para trazer mais transparência à cadeia de suprimentos de software. As SBOMs podem ser úteis para compartilhar um snapshot da sua cadeia de suprimentos de software e sua postura de segurança em um formato exportável e padrão.  Felizmente, o gráfico de dependência que o GitHub pode criar para cada um dos seus repositórios é uma SBOM e pode ser exportado no formato SPDX padrão da indústria.

1. Exportação rápida e fácil.

Selecione a guia Insights no repositório Web Goat e selecione Dependency Graph na barra lateral.

Selecione o botão Export SBOM.

Pronto!

Dependency Graph settings with Export SBOM button highlighted

2. Automatização de exportações e uploads SBOM com o GitHub Actions.

Agora vamos automatizar esse processo, como fizemos com os envios de dependências temporárias acima. 

No repositório do Web Goat, selecione a guia Actions.

Selecione New workflow. Nomeie-o SBOM.yml.

name: SBOM Generator



on:
  push:
    branches: [ "main" ]



  workflow_dispatch:



permissions: read-all



jobs:
  build:
    runs-on: ubuntu-latest



    steps:
      - uses: actions/checkout@v3



      - uses: advanced-security/sbom-generator-action@v0.0.1
        id: sbom
        env: 
          GITHUB_TOKEN: ${{ github.token }}
      - uses: actions/upload-artifact@v3.1.0
        with: 
          path: ${{steps.sbom.outputs.fileName }}
          name: "SBOM"

Esse processo usará uma ação primária criada pelo GitHub, sbom-generator-action, para gerar seu arquivo JSON SBOM e carregá-lo como um artefato sempre que você enviar uma alteração para o branch principal do repositório, garantindo que você tenha sempre uma SBOM atualizado disponível.

A seguir: Resumo do módulo avançado sobre GitHub Advanced Security

Agora vamos revisar o que aprendemos até o momento e ver o que mais podemos fazer com o GitHub Advanced Security.