Sobre a segurança da cadeia de suprimentos no GitHub
Ao desenvolver um projeto de software, você provavelmente utiliza outros softwares para construir e executar sua aplicação, como bibliotecas de código aberto, frameworks ou outras ferramentas. Esses recursos são chamados coletivamente de "dependências", pois seu projeto depende deles para funcionar corretamente. Seu projeto pode depender de centenas dessas dependências, formando o que é conhecido como sua "cadeia de suprimentos".
Sua cadeia de fornecedores pode representar um problema de segurança. Se uma das suas dependências tiver uma vulnerabilidade de segurança conhecida ou um bug, agentes maliciosos podem explorar essa vulnerabilidade para, por exemplo, inserir código malicioso ("malware"), roubar dados confidenciais ou causar algum outro tipo de interrupção no seu projeto. Esse tipo de ameaça é chamado de "ataque à cadeia de fornecedores". Ter dependências vulneráveis em sua cadeia de fornecedores compromete a segurança do seu próprio projeto e coloca seus usuários em risco também.
Uma das coisas mais importantes que você pode fazer para proteger sua cadeia de fornecedores é corrigir suas dependências vulneráveis e substituir qualquer malware.
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.
GitHub oferece uma variedade de recursos para ajudá-lo a entender as dependências em seu ambiente, saber sobre vulnerabilidades nessas dependências e corrigi-las.
As funcionalidades da cadeia de suprimentos em GitHub : * Gráfico 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. O grafo de dependência do seu repositório rastreia e exibe suas dependências e algumas de suas propriedades, como informações de vulnerabilidade.
As funcionalidades da cadeia de suprimentos a seguir dependem em GitHub das informações fornecidas pelo grafo de dependência.
- 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.
-
Dependabot correlaciona os dados de dependência fornecidos pelo grafo de dependências com a lista de avisos publicados no GitHub Advisory Database, verifica suas dependências e cria Dependabot alerts quando uma vulnerabilidade potencial é detectada. -
Dependabot security updates use o grafo de dependências e Dependabot alerts para ajudá-lo a atualizar as dependências com vulnerabilidades conhecidas em seu repositório. Dependabot version updates não use o grafo de dependência e confie no controle de versão semântico das dependências. Dependabot version updates ajude você a manter suas dependências atualizadas, mesmo quando elas não tiverem nenhuma vulnerabilidade.
Para obter guias de práticas recomendadas sobre segurança de ponta a ponta na cadeia de fornecedores, incluindo a proteção de contas pessoais, código e processos de compilação, consulte Protegendo sua cadeia de suprimentos de ponta a ponta.
Visão geral do recurso
O que é o grafo de dependência?
Para gerar o grafo de dependência, GitHub analise as dependências explícitas de um repositório declaradas no manifesto e nos arquivos 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 grafo de dependências é atualizado automaticamente quando você faz um commit para GitHub que altera ou adiciona um manifesto ou arquivo de lock com suporte ao branch padrão e quando alguém faz um push de uma alteração para o repositório de uma de suas dependências.
- O grafo de dependência também pode incluir informações que você fornece à medida que seu projeto está sendo criado usando GitHub Actions. Alguns ecossistemas de pacotes efetuam pull da maioria de suas dependências temporários em tempo de build, portanto, enviar informações de dependência à medida que o build está acontecendo fornece uma visão mais completa da cadeia de suprimentos.
- Você pode ver o grafo de dependência abrindo a página GitHubprincipal do repositório e navegando até 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 saber mais, confira Como exportar uma lista de materiais de software para seu repositório.
Você pode usar API de envio de dependência para enviar dependências do gerenciador de pacotes ou do ecossistema de sua escolha, mesmo que o ecossistema não seja compatível com o gráfico de dependências para a análise de arquivos de manifesto ou de bloqueio. Dependências enviadas para um projeto usando a API de envio de dependência mostrarão qual detector foi usado para seu envio e quando elas foram enviadas. Para saber mais sobre o 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 é a 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?
Dependabot mantém suas dependências atualizadas, informando você sobre eventuais vulnerabilidades de segurança nas suas dependências e abrindo pull requests automaticamente para atualizá-las.
Dependabot As solicitações de pull serão direcionadas à próxima versão segura disponível quando um Dependabot alerta for disparado ou à versão mais recente quando uma versão for publicada.
O termo "Dependabot" abrange os seguintes recursos: * Dependabot alerts: Notificação exibida na aba Security 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 as suas dependências para uma versão segura quando um alerta for acionado. * Dependabot version updates: atualizações agendadas para manter suas dependências atualizadas com a versão mais recente.
Dependabot security updates e Dependabot version updates exigem GitHub Actions para serem executados em GitHub Enterprise Server.
Dependabot alerts não requer GitHub Actions. Para saber mais, confira [AUTOTITLE](/admin/configuration/configuring-github-connect/enabling-dependabot-for-your-enterprise).
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, consulte [AUTOTITLE](/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates).
O que são os alertas do Dependabot?
Dependabot alerts realçar repositórios afetados por uma vulnerabilidade recém-descoberta com base no grafo de dependência e no GitHub Advisory Database, que contém avisos para vulnerabilidades conhecidas.
* Dependabot executa uma verificação para detectar dependências inseguras e envia Dependabot alerts quando:
- Novos dados de aconselhamento são sincronizados com sua instância a cada hora a partir de GitHub.com. Para saber mais, confira Como procurar avisos de segurança no GitHub Advisory Database.
- O grafo de dependência das mudanças no repositório
-
Dependabot alerts são exibidos na guia **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security** do repositório e no gráfico de dependências do repositório. O alerta inclui um link para o arquivo afetado no projeto, e informações sobre uma versão corrigida.
Para saber mais, confira Sobre alertas do Dependabot.
O que são as atualizações do Dependabot?
Há dois tipos de Dependabot updates: atualizações de Dependabot_segurança_ e atualizações de versão. Dependabot gera solicitações de pull automáticas para atualizar suas dependências em ambos os casos, mas há várias diferenças.
Dependabot security updates:
-
Disparado por um Dependabot alerta
-
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 Dependabot updates, consulte Sobre as atualizações de segurança do Dependabot e Sobre as atualizações da versão do Dependabot.
O que são versões imutáveis?
Os repositórios podem habilitar versões imutáveis para impedir que os ativos e a marca Git associada de uma versão sejam alterados após a publicação. Isso reduz o risco de ataques da cadeia de suprimentos, impedindo que os invasores insiram vulnerabilidades em versões que você consome. Isso também significa que projetos que dependem de versões específicas têm menos chances de quebrar.
A criação de uma versão imutável gera automaticamente um atestado para a versão. Você pode usar esse atestado para garantir que o lançamento e seus artefatos correspondam às informações publicadas.
O que são atestados de artefato?
Os provedores de software podem gerar atestados para software criado com GitHub Actions. Atestados são declarações assinadas criptograficamente que estabelecem a procedência do build (o código-fonte e a execução do fluxo de trabalho usados para compilar) ou a Lista de Materiais de Software (SBOM) associada.
Você pode aumentar a segurança da cadeia de suprimentos verificando atestados para suas dependências. Embora os atestados não garantam a segurança, eles fornecem informações sobre onde e como o software foi criado, para que você possa ter mais certeza de que suas dependências não foram adulteradas. Você pode condicionar implantações usando uma ferramenta como o controlador de admissões do Kubernetes para impedir que builds não atestados sejam implantados.
Quando você usa GitHub Actions para gerar atestados para os builds da sua organização, os artefatos gerados são carregados automaticamente no linked artifacts page. Essa plataforma permite exibir os registros de armazenamento e implantação de todos os artefatos vinculados, para que você possa encontrar o código-fonte e a execução do fluxo de trabalho usados para criar um artefato ou filtrar alertas de segurança com base no contexto de implantação.
Disponibilidade de funcionalidades
-
**Grafo de dependência e Dependabot alerts:** não habilitado por padrão. Ambas as funcionalidades são configuradas a nível empresarial pelo proprietário da empresa. Para saber mais, confira [AUTOTITLE](/admin/code-security/managing-supply-chain-security-for-your-enterprise/enabling-the-dependency-graph-for-your-enterprise) e [AUTOTITLE](/admin/configuration/configuring-github-connect/enabling-dependabot-for-your-enterprise). -
**Revisão de dependência:** Disponível quando o grafo de dependência está habilitado para sua instância e GitHub Code Security or GitHub Advanced Security está habilitado para a organização ou repositório. Para saber mais, confira [AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security). -
** Dependabot security updates:** não habilitado por padrão. Você pode habilitar Dependabot security updates para qualquer repositório que use Dependabot alerts e o grafo de dependência. Para obter informações sobre como habilitar as atualizações de segurança, consulte [AUTOTITLE](/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates). -
** Dependabot version updates:** não habilitado por padrão. 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, consulte [AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates).