Sobre a segurança da cadeia de suprimentos no GitHub
Ao desenvolver um projeto de software, você provavelmente usa outro software para criar e executar seu aplicativo, como bibliotecas de software livre, estruturas ou outras ferramentas. Esses recursos são coletivamente chamados de "dependências", porque seu projeto depende deles para funcionar corretamente. Seu projeto pode contar com centenas dessas dependências, formando o que é conhecido como sua "cadeia de suprimentos".
Sua cadeia de suprimentos pode representar um problema de segurança. Se uma de suas dependências tiver uma falha de segurança conhecida ou um bug, agentes mal-intencionados poderão explorar essa vulnerabilidade para, por exemplo, inserir código mal-intencionado ("malware"), roubar dados confidenciais ou causar algum outro tipo de interrupção em seu projeto. Esse tipo de ameaça é chamado de "ataque à cadeia de suprimentos". Ter dependências vulneráveis em sua cadeia de suprimentos compromete a segurança de seu próprio projeto e você também coloca seus usuários em risco.
Uma das coisas mais importantes que você pode fazer para proteger a cadeia de fornecedores é corrigir as dependências vulneráveis e substituir os malwares.
Você adiciona dependências diretamente à sua cadeia de suprimentos ao especificá-las em um arquivo de manifesto ou um arquivo de bloqueio. As dependências também podem ser incluídas transitoriamente, ou seja, até mesmo se você não especificar uma dependência em particular, mas a sua dependência a usa, portanto, você também depende dessa dependência.
O GitHub Enterprise Cloud oferece uma variedade de recursos para ajudar você a entender as dependências no seu ambiente, conhecer vulnerabilidades nessas dependências e corrigi-las.
As funcionalidades da cadeia de suprimentos em GitHub Enterprise Cloud são:
- Grafo de dependência
- Revisão de dependência
- Dependabot alerts
- Dependabot updates
- Dependabot security updates
- Dependabot version updates
O gráfico de dependências é fundamental para fornecer segurança da cadeia de suprimentos. O gráfico de dependências identifica todas as dependências a montante e as dependências públicas a jusante de um repositório ou pacote. É possível ver as dependências e algumas de suas propriedades, como informações de vulnerabilidade, no gráfico de dependências do repositório.
As outras funcionalidades da cadeia de suprimentos em GitHub dependem das informações fornecidas pelo gráfico de dependências.
- A revisão de dependências usa o gráfico de dependências para identificar mudanças de dependências e ajuda você a entender o impacto de segurança dessas alterações ao revisar pull requests.
- O Dependabot faz referência cruzada aos dados de dependência fornecidos pelo grafo de dependentes com a lista de avisos publicados no GitHub Advisory Database, verifica suas dependências e gera Dependabot alerts quando uma vulnerabilidade potencial é detectada.
- Dependabot security updates usam o grafo de dependência e os Dependabot alerts para ajudar você a atualizar as dependências com vulnerabilidades conhecidas no repositório.
Dependabot version updates não usa o gráfico de dependências e confia na versão semântica das dependências. Dependabot version updates ajuda você a manter suas dependências atualizadas, mesmo quando elas não têm nenhuma vulnerabilidade.
Para ver guias de melhores práticas sobre a segurança da cadeia de fornecedores de ponta a ponta, incluindo a proteção de contas pessoais, códigos e processos de build, confira "Protegendo sua cadeia de suprimentos de ponta a ponta".
Visão geral do recurso
Qual é o gráfico de dependências
Para gerar o gráfico de dependência, GitHub analisa as dependências explícitas de um repositório declaradas no manifesto e no arquivo de bloqueio. Quando habilitado, o gráfico de dependências analisa automaticamente todos os arquivos de manifesto de pacote conhecidos no repositório, e usa isto para construir um gráfico com nomes e versões conhecidas das dependências.
- O grafo de dependência inclui informações sobre as dependências diretas e as dependências transitivas.
- O gráfico de dependência é atualizado automaticamente quando você faz push de um commit para GitHub que altera ou adiciona um manifesto compatível ou um arquivo de bloqueio para o branch padrão, e quando alguém fizer uma alteração no repositório de uma de suas dependências.
- Veja o grafo de dependência abrindo a página principal do repositório no GitHub Enterprise Cloud e acessando a guia Insights.
- Se você tiver pelo menos acesso de leitura ao repositório, poderá exportar o grafo de dependência para o repositório como uma SBOM (conta de materiais de software) compatível com SPDX, por meio da GitHub interface do usuário ou da API REST do GitHub. Para obter mais informações, confira "Como exportar uma lista de materiais de software para seu repositório".
Além disso, você pode usar a API de envio de dependência para enviar dependências do gerenciador de pacotes ou ecossistema de sua escolha, mesmo que o ecossistema não tenha suporte pelo grafo de dependência para análise de arquivos de manifesto ou de bloqueio. As dependências enviadas para um projeto ao usar a API de envio de dependência mostrarão qual detector foi utilizado para o envio e quando elas foram enviadas. Para obter mais informações sobre a API de envio de dependência, confira “Usar a API de envio de dependências”.
Para obter mais informações sobre o grafo de dependência, confira "Sobre o gráfico de dependências".
O que é revisão de dependências
A revisão de dependências ajuda os revisores e colaboradores a entenderem as mudanças de dependência e seu impacto de segurança em cada pull request.
- A revisão de dependências informa quais dependências foram adicionadas, removidas ou atualizadas em um pull request. Você pode usar as datas de versão, a popularidade das dependências e informações de vulnerabilidade para ajudar você a decidir se deseja aceitar a alteração.
- Veja a revisão de dependência para uma solicitação de pull mostrando a comparação avançada na guia Arquivos Alterados.
Para obter mais informações sobre a revisão de dependência, confira "Sobre a análise de dependência".
O que é o Dependabot
O Dependabot mantém as dependências atualizadas informando sobre as vulnerabilidades de segurança nas dependências e abre pull requests automaticamente a fim de atualizar as dependências para a próxima versão segura disponível quando um alerta do Dependabot é disparado ou para a última versão quando um lançamento é publicado.
O termo "Dependabot" engloba os seguintes recursos:
- Dependabot alerts – Notificação exibida na guia Segurança do repositório e no grafo de dependência do repositório. O alerta inclui um link para o arquivo afetado no projeto, e informações sobre uma versão corrigida.
- Dependabot updates:
- Dependabot security updates—Atualizações acionadas para atualizar suas dependências para uma versão segura quando um alerta é acionado.
- Dependabot version updates— Atualizações agendadas para manter suas dependências atualizadas com a versão mais recente.
As pull requests abertas pelo Dependabot podem disparar fluxos de trabalho que executam ações. Para obter mais informações, confira "Automatizando o Dependabot com GitHub Actions".
Por padrão:
-
Se GitHub Actions estiver habilitado para o repositório, o GitHub exeuta Dependabot updates em GitHub Actions.
-
Se GitHub Actions não estiver habilitado para o repositório, o GitHub gera Dependabot alerts usando o aplicativo Dependabot integrado no GitHub Enterprise Cloud.
Para obter mais informações, confira "Sobre o Dependabot em executores do GitHub Actions".
Dependabot security updates pode corrigir dependências vulneráveis no GitHub Actions. Quando as atualizações de segurança estiverem habilitadas, o Dependabot gerará automaticamente um pull request para atualizar GitHub Actions vulneráveis usadas nos fluxos de trabalho para a versão mínima corrigida. Para obter mais informações, confira "Sobre as atualizações de segurança do Dependabot".
Quais são os alertas do Dependabot
Os Dependabot alerts apontam os repositórios afetados por uma vulnerabilidade descoberta recentemente com base no grafo de dependentes e no GitHub Advisory Database, que contém avisos de vulnerabilidades conhecidas.
- O Dependabot faz a verificação para detectar dependências não seguras e envia Dependabot alerts quando:
- Um novo aviso é adicionado ao GitHub Advisory Database.
- O gráfico de dependências para as alterações no repositório.
- Dependabot alerts são exibidos na guia Segurança do repositório e no grafo de dependência do repositório. O alerta inclui um link para o arquivo afetado no projeto, e informações sobre uma versão corrigida.
Para obter mais informações, confira "Sobre alertas do Dependabot".
Quais são as atualizações do Dependabot
Há dois tipos de Dependabot updates: atualizações de segurança e atualizações de versão do Dependabot. Dependabot gera pull requests automáticos para atualizar suas dependências em ambos os casos, mas existem várias diferenças.
Dependabot security updates:
- Acionado por um alerta de Dependabot
- Atualizar dependências para a versão mínima que resolve uma vulnerabilidade conhecida
- Compatível para os ecossistemas que o gráfico de dependências suporta
- Não requer um arquivo de configuração, mas você pode usar um para substituir o comportamento padrão
Dependabot version updates:
- Requer um arquivo de configuração
- Executar em um calendário que você configura
- Atualizar dependências para a última versão que corresponde à configuração
- Compatível para um grupo diferente de ecossistemas
Para obter mais informações sobre as Dependabot updates, confira "Sobre as atualizações de segurança do Dependabot" e "Sobre as atualizações da versão do Dependabot".
Disponibilidade de recursos
Repositórios públicos:
- Grafo de dependência – habilitado por padrão, não podendo ser desabilitado.
- Revisão de dependência – habilitada por padrão, não podendo ser desabilitada.
- Dependabot alerts : não habilitado por padrão. O GitHub detecta dependências não seguras e exibe informações no grafo de dependência, mas não gera Dependabot alerts por padrão. Os proprietários do repositório ou pessoas com acesso de administrador podem habilitar Dependabot alerts. Você também pode habilitar ou desabilitar alertas do Dependabot para todos os repositórios pertencentes à sua conta de usuário ou organização. Para obter mais informações, confira "Gerenciar as configurações de segurança e análise para a sua conta pessoal" ou "Gerenciando as configurações de segurança e de análise da sua organização".
Repositórios privados:
-
Grafo de dependência – não habilitado por padrão. O recurso pode ser habilitado pelos administradores do repositório. Para obter mais informações, confira "Explorar as dependências de um repositório".
-
Revisão de dependência – disponível em repositórios privados pertencentes a organizações, desde que você tenha uma licença do GitHub Advanced Security e o grafo de dependência habilitado. Para obter mais informações, confira "Sobre a Segurança Avançada do GitHub" e "Explorar as dependências de um repositório."
-
Dependabot alerts : não habilitado por padrão. Os proprietários de repositórios privados ou pessoas com acesso de administrador, podem habilitar o Dependabot alerts ativando o gráfico de dependências e Dependabot alerts para seus repositórios. Você também pode habilitar ou desabilitar alertas do Dependabot para todos os repositórios pertencentes à sua conta de usuário ou organização. Para obter mais informações, confira "Gerenciar as configurações de segurança e análise para a sua conta pessoal" ou "Gerenciando as configurações de segurança e de análise da sua organização".
Qualquer tipo de repositório:
- Dependabot security updates : não habilitado por padrão. É possível habilitar o Dependabot security updates para qualquer repositório que use Dependabot alerts e o gráfico de dependências. Para obter informações sobre como habilitar as atualizações de segurança, confira "Configurando as atualizações de segurança do Dependabot".
- Dependabot version updates : não habilitado por padrão. As pessoas com permissões de gravação em um repositório podem habilitar Dependabot version updates. Para obter informações sobre como habilitar as atualizações de versão, confira "Configurando a versão das atualizações do Dependabot".