Compreensão da cadeia de suprimentos de software de ponta a ponta
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.
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!
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.