Implementar alertas e atualizações de segurança do GitHub Dependabot
O GitHub Dependabot fornece gerenciamento automatizado de dependência integrado diretamente aos repositórios do GitHub. O Dependabot monitora dependências de vulnerabilidades de segurança e versões desatualizadas, alertando mantenedores de repositório e criando automaticamente solicitações de pull para atualizar dependências vulneráveis ou desatualizadas. Essa integração torna a segurança de dependência acessível a todos os usuários do GitHub sem a necessidade de ferramentas separadas.
Noções básicas sobre o GitHub Dependabot
O GitHub Dependabot consiste em três recursos principais que funcionam juntos para proteger dependências:
Alertas do Dependabot
Os alertas dependabot notificam os mantenedores do repositório quando dependências vulneráveis são detectadas. O GitHub monitora continuamente o Banco de Dados de Consultoria do GitHub e outras fontes de vulnerabilidade, comparando-as com as dependências usadas em repositórios.
Gatilhos de alerta:
- Novas divulgações de vulnerabilidade: Os alertas são criados quando novas vulnerabilidades são adicionadas ao Banco de Dados de Consultoria do GitHub.
- Atualizações de consultoria: Os alertas existentes são atualizados quando as informações de vulnerabilidade são alteradas (severidade, versões afetadas, patches).
- Alterações no grafo de dependência: Novos alertas são gerados quando alterações de código introduzem dependências vulneráveis.
- Corrigir dados de vulnerabilidade: Informações adicionais sobre vulnerabilidades do Mend (anteriormente WhiteSource) complementam o Banco de Dados de Avisos do GitHub.
As informações de alerta incluem:
- Descrição da vulnerabilidade: Explicação detalhada do problema de segurança.
- Nível de gravidade: Classificação de pontuação e gravidade do CVSS (crítico, alto, moderado, baixo).
- Versões afetadas: Quais versões de dependência contêm a vulnerabilidade.
- Versões corrigidas: Quais versões corrigem a vulnerabilidade.
- Identificador CVE: Identificador CVE (Vulnerabilidades e Exposições Comuns) quando disponível.
- Classificação de CWE: Tipo CWE (Common Weakness Enumeration) categorizando a vulnerabilidade.
- Link da Consultoria de Segurança do GitHub: Link para a consultoria completa com detalhes adicionais.
Atualizações de segurança do Dependabot
As atualizações de segurança do Dependabot criam automaticamente solicitações de pull para atualizar dependências vulneráveis para versões seguras. Quando os alertas do Dependabot detectam vulnerabilidades com patches disponíveis, as atualizações de segurança podem gerar automaticamente solicitações de pull corrigindo as vulnerabilidades.
Criação automática de solicitação de pull:
- Disparado por vulnerabilidade: as atualizações de segurança criam pull requests apenas quando são detectadas vulnerabilidades de segurança, e não para cada atualização de dependência.
- Aumentos mínimos de versão: as pull requests atualizam as dependências para a versão mínima que resolve a vulnerabilidade, mantendo a compatibilidade.
- Pontuações de compatibilidade: O GitHub calcula as pontuações de compatibilidade prevendo se as atualizações interromperão a funcionalidade existente.
- Notas sobre a versão: as pull requests incluem notas sobre a versão e informações do log de alterações das dependências atualizadas.
Funcionalidades de pull request:
- Teste automatizado: As solicitações de pull disparam pipelines de CI/CD existentes para validar que as atualizações não interrompem a funcionalidade.
- Resolução de vulnerabilidades: As descrições de solicitação de pull explicam quais vulnerabilidades são resolvidas pela atualização.
- Atualizar comandos: Comentários especiais permitem que os mantenedores controlem o tempo de mesclagem, baseiem novamente as solicitações de pull ou ignorem atualizações específicas.
- Atualizações agrupadas: Várias dependências vulneráveis podem ser atualizadas em uma única solicitação de pull quando apropriado.
Atualizações de versão do Dependabot
As atualizações de versão do Dependabot mantêm as dependências atualizadas mesmo quando nenhuma vulnerabilidade está presente. Ao contrário das atualizações de segurança que só atualizam dependências vulneráveis, as atualizações de versão atualizam proativamente as dependências para versões mais recentes com base em agendas configuradas.
Atualizações agendadas:
- Frequência configurável: As atualizações podem ser agendadas diariamente, semanalmente ou mensalmente.
- Atualizar estratégias: Configure se todas as dependências devem ser atualizadas, somente dependências diretas ou grupos de dependências específicos.
- Restrições de versão: Respeite as restrições de controle de versão semântica definidas em arquivos de manifesto.
- Limites de pull requests: Controle quantos pull requests abertos o Dependabot cria para evitar sobrecarregar os mantenedores.
Habilitando alertas do Dependabot
Os alertas Dependabot são habilitados por padrão para repositórios públicos, mas devem ser habilitados manualmente para repositórios privados.
Habilitar alertas para um repositório
Navegação:
- Navegue até o repositório no GitHub.
- Clique em Configurações no menu do repositório.
- Clique em Segurança & análise na barra lateral esquerda.
- Localize a seção Dependabot alerts.
- Clique em Habilitar para ativar alertas do Dependabot.
Requisito do grafo de dependência: Os alertas do Dependabot exigem que o grafo de dependência seja habilitado. O grafo de dependência é habilitado automaticamente para repositórios públicos, mas pode precisar de ativação manual para repositórios privados.
Habilitar grafo de dependência:
- Em Configurações → Segurança & análise, localize o grafo dependência.
- Clique em Habilitar se o grafo de dependência ainda não estiver ativo.
- O GitHub começará a analisar as dependências do repositório para criar o grafo de dependência.
Habilitação em toda a organização
Os administradores da organização podem habilitar Alertas Dependabot em todos os repositórios.
Configurações da organização:
- Navegue até as Configurações da organização.
- Clique em Segurança & análise na barra lateral esquerda.
- Clique em Habilitar todos ao lado dos alertas do Dependabot para ativar alertas para todos os repositórios atuais e futuros.
- Opcionalmente, selecione Habilitar automaticamente novos repositórios para habilitar alertas para repositórios recém-criados.
Ecossistemas de pacotes com suporte
Os alertas do Dependabot dão suporte a vários ecossistemas de pacotes, incluindo:
Ecossistemas com suporte:
- JavaScript: npm (package.json, package-lock.json), Yarn (yarn.lock).
- Python: pip (requirements.txt, Pipfile, Pipfile.lock), Poetry (poetry.lock).
- Rubi: Bundler (Gemfile, Gemfile.lock).
- Java: Maven (pom.xml), Gradle (build.gradle, build.gradle.kts).
- .NET: NuGet (*.csproj, packages.config, paket.dependencies).
- Go: Módulos Go (go.mod, go.sum).
- PHP: Composer (composer.json, composer.lock).
- Rust: Cargo (Cargo.toml, Cargo.lock).
- Elixir: Mix (mix.exs, mix.lock).
- Dart/Flutter: pub (pubspec.yaml, pubspec.lock).
- Docker: Dockerfiles (referências de imagem base).
- Ações do GitHub: Arquivos de fluxo de trabalho (versões de ação).
- Terraform: Configuração do Terraform (versões do módulo).
Configuração de atualizações de segurança do Dependabot
As atualizações de segurança do Dependabot exigem habilitação explícita mesmo quando os alertas estão habilitados.
Habilitar atualizações de segurança
Configuração do repositório:
- Navegue até Configurações → Segurança & Análise.
- Encontre atualizações de segurança do Dependabot.
- Clique em Habilitar para ativar solicitações de pull de atualização de segurança automática.
- O Dependabot começará a monitorar dependências vulneráveis e a criar solicitações de pull quando os patches estiverem disponíveis.
Configuração em toda a organização:
- Navegue até configurações da organização → Segurança & Análise.
- Clique em Habilitar tudo ao lado de atualizações de segurança do Dependabot.
- Selecione Habilitar automaticamente novos repositórios para habilitar para repositórios futuros.
Comportamento de atualização de segurança
Criação automática de solicitação de pull:
- Detecção de vulnerabilidades: Quando os alertas do Dependabot detectam uma dependência vulnerável com um patch disponível, as atualizações de segurança criam uma solicitação de pull.
- Atualizações mínimas: As solicitações de pull são atualizadas apenas para a versão mínima que resolve a vulnerabilidade.
- Controle de versão semântico: As atualizações respeitam o controle de versão semântico, preferindo atualizações de patch em vez de atualizações secundárias ou principais, quando possível.
- Testando a integração: Solicitações de pull acionam verificações de CI/CD existentes para validar atualizações.
Pontuações de compatibilidade: O GitHub calcula as pontuações de compatibilidade que indicam a probabilidade de que as atualizações interrompam a funcionalidade existente:
- Alta compatibilidade: A atualização provavelmente é segura com base na análise de repositórios semelhantes.
- Compatibilidade média: a atualização pode introduzir alterações interruptivas que exigem revisão.
- Baixa compatibilidade: A atualização provavelmente inclui alterações significativas que exigem modificações de código.
- Compatibilidade desconhecida: Dados insuficientes para avaliar a compatibilidade.
Gerenciamento de solicitações de pull:
- Rebase automático: o Dependabot efetua rebase automaticamente das pull requests quando a branch base é alterada.
- Resolução de conflitos: as pull requests serão fechadas se os conflitos impedirem o rebase automático.
- Atualizações substitutas: novas pull requests substituem pull requests mais antigas quando novas versões são lançadas.
- Atualizações agendadas: As solicitações de pull são criadas de acordo com os agendamentos configurados para evitar sobrecarregar os mantenedores.
Configuração de atualizações de versão do Dependabot
As atualizações de versão exigem um arquivo de configuração definindo os agendamentos e o comportamento da atualização.
Criar configuração de dependabot.yml
As atualizações de versão são configuradas usando um .github/dependabot.yml arquivo no repositório:
Configuração básica:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
Opções de configuração:
- Versão: Versão do esquema de arquivo de configuração (sempre 2).
- Atualizações: Matriz de configurações de atualização para diferentes ecossistemas de pacotes.
- package-ecosystem: Gerenciador de pacotes a ser monitorado (npm, pip, bundler, maven, nuget etc.).
- diretório: Localização dos arquivos de manifesto do pacote (/ para raiz ou caminho do subdiretório).
- schedule.interval: Frequência de atualização (diária, semanal, mensal).
- open-pull-requests-limit: Número máximo de solicitações de pull abertas que o Dependabot cria (padrão 5).
Exemplo de configuração avançada:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "08:00"
timezone: "America/New_York"
open-pull-requests-limit: 10
reviewers:
- "team/frontend-developers"
assignees:
- "dependency-manager"
labels:
- "dependencies"
- "npm"
commit-message:
prefix: "npm"
include: "scope"
ignore:
- dependency-name: "lodash"
versions: ["4.x"]
allow:
- dependency-type: "production"
Opções avançadas:
- schedule.day: dia da semana para atualizações semanais (segunda a domingo).
- schedule.time: Horário do dia para atualizações (formato de 24 horas).
- schedule.timezone: Fuso horário para agendamento (identificador de fuso horário IANA).
- Revisores: Usuários ou equipes do GitHub solicitavam automaticamente revisões de solicitação de pull.
- atribuições: usuários do GitHub automaticamente atribuídos às pull requests.
- Rótulos: Rótulos aplicados automaticamente a solicitações de pull.
- commit-message.prefix: Prefixo para mensagens de confirmação (útil para confirmações convencionais).
- ignorar: Dependências a serem ignoradas, opcionalmente com intervalos de versão específicos.
- permitir a atualização de: tipos de dependência (produção, desenvolvimento, todos).
Vários ecossistemas de pacotes
Repositórios que usam vários ecossistemas de linguagem exigem configurações de atualização separadas:
Configuração de vários ecossistemas:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/frontend"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
Essa configuração monitora as dependências do npm em /frontend, dependências do Python em /backend, imagens base do Docker em todo o repositório e versões do GitHub Actions em workflows.
Gerenciando solicitações de pull do Dependabot
As solicitações de pull do Dependabot dão suporte a comandos especiais para gerenciar atualizações.
Comandos de pull request
Comandos de comentário:
-
@dependabot rebase: Efetua rebase da pull request na branch base atual. -
@dependabot recreate: Recria a pull request, substituindo todas as edições manuais. -
@dependabot merge: Mescle a solicitação de pull assim que as verificações do CI passarem. -
@dependabot squash and merge: Faz squash dos commits e mesclagem quando as verificações forem aprovadas. -
@dependabot cancel merge: cancele uma mesclagem solicitada anteriormente. -
@dependabot reopen: reabra uma solicitação de pull fechada. -
@dependabot close: feche a solicitação de pull e impeça que Dependabot a recrie. -
@dependabot ignore this major version: feche a solicitação de pull e ignore as atualizações futuras para esta versão principal. -
@dependabot ignore this minor version: feche a solicitação de pull e ignore as atualizações futuras para esta versão secundária. -
@dependabot ignore this dependency: feche a solicitação de pull e ignore todas as atualizações futuras para essa dependência.
Revisão e mesclagem de atualizações
Processo de revisão:
- Examine a descrição da solicitação de pull: Entenda qual vulnerabilidade é resolvida ou qual versão é atualizada.
- Revisar pontuação de compatibilidade: avalia a probabilidade de alterações interruptivas.
- Verifique os resultados de CI/CD: Verifique se os testes automatizados são aprovados com êxito.
- Revisar notas sobre a versão: entende as alterações incluídas na atualização da dependência.
- Teste localmente, se necessário: Para atualizações importantes, teste a funcionalidade localmente antes de mesclar.
- Mesclar pull request: aprova e mescla a pull request para atualizar a dependência.
Mesclagem automática: Para atualizações de baixo risco com pontuações de alta compatibilidade e aprovação de testes, considere configurar a mesclagem automática:
Mesclagem automática do GitHub Actions:
name: Auto-merge Dependabot PRs
on: pull_request
jobs:
auto-merge:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Enable auto-merge
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Esse fluxo de trabalho habilita automaticamente a 'mesclagem automática' para solicitações de pull do Dependabot que passam por todas as verificações necessárias.
Alertas e notificações do Dependabot
O Dependabot fornece vários mecanismos de notificação para alertas de vulnerabilidade.
Canais de notificação
Notificações da Web:
- Notificações do GitHub: Os alertas aparecem na caixa de entrada de notificações do GitHub.
- Guia Segurança: Os alertas são visíveis na guia Segurança do repositório nos alertas do Dependabot.
- Insights do repositório: O gráfico de dependências na aba Insights mostra dependências vulneráveis.
Notificações por email:
- Resumo de emails: Emails de resumo semanal listando novos alertas.
- Emails em tempo real: Emails imediatos para vulnerabilidades críticas.
- Notificações da organização: Os administradores da organização recebem notificações para todos os repositórios.
Notificações personalizadas:
- Webhooks: Configure webhooks para receber notificações de alerta nos sistemas externos.
- API do GitHub: Consulte a API de alertas do Dependabot para recuperar informações de alerta programaticamente.
- Integrações de segurança: Plataformas de segurança de terceiros podem se integrar aos alertas do Dependabot por meio da API.
Configurando preferências de notificação
Configurações de notificação do usuário:
- Navegue até as Configurações do GitHub → Notificações.
- Localize a seção alertas de segurança.
- Configure as preferências de notificação.
- Participando: Receba notificações para repositórios que você esteja assistindo ou participando.
- Acompanhando: Receba notificações para todos os repositórios acompanhados.
- Email: Habilite notificações por email para alertas de segurança.
- Web: Habilitar notificações da Web na interface do usuário do GitHub.
Configurações de notificação da organização:
- Navegue até configurações da organização → Segurança & Análise.
- Configure quem recebe notificações de alerta de segurança:
- Proprietários da organização: Receba automaticamente todos os alertas de segurança.
- Gerentes de segurança: A equipe de segurança designada recebe alertas.
- Administradores de repositório: Cada administrador do repositório recebe alertas para seus repositórios.
Revisão de alertas do Dependabot
A guia Segurança fornece gerenciamento abrangente de alertas.
Detalhes do Alerta
Navegue até alertas:
- Abra o repositório no GitHub.
- Clique na guia Segurança .
- Clique em os alertas Dependabot na barra lateral esquerda.
- Revise a lista de alertas ativos.
Informações de alerta:
- Severidade: Classificação crítica, alta, moderada ou de baixa gravidade.
- Pacote: Nome e versão de dependência afetados.
- Vulnerabilidade: Identificador de CVE e descrição.
- Versões corrigidas: Versões que resolvem a vulnerabilidade.
- Caminhos de código vulneráveis: Se o código vulnerável é realmente usado (se a análise de acessibilidade estiver disponível).
- Correção automática disponível: Se o Dependabot pode criar automaticamente uma solicitação de pull para corrigir a vulnerabilidade.
Gerenciar alertas
Ações de alerta:
- Examine a solicitação de pull: Se houver uma atualização de segurança automática, examine e mescle a solicitação de pull.
- Ignorar alerta: ignora falsos positivos ou riscos aceitos com um motivo de ignorar.
- Alerta de soneca: Ignore temporariamente alertas que não podem ser resolvidos imediatamente.
- Reabra o alerta: Reabra alertas descartados anteriormente se as circunstâncias mudarem.
Motivos de demissão:
- Correção iniciada: A equipe está trabalhando ativamente na correção.
- Sem largura de banda: O problema é reconhecido, mas não pode ser resolvido no momento.
- Risco tolerável: A vulnerabilidade não representa um risco significativo nesse contexto.
- Impreciso: O alerta é um falso positivo.
Integração de Segurança Avançada do GitHub
O GitHub Dependabot é um componente principal do GitHub Advanced Security, plataforma de segurança abrangente do GitHub que fornece recursos de segurança de nível empresarial para proteger sua cadeia de fornecimento de software.
Recursos de Segurança Avançada
Funcionalidades de segurança integrada:
- Verificação de dependência: O Dependabot verifica automaticamente as dependências em busca de vulnerabilidades conhecidas usando o Banco de Dados de Consultoria do GitHub e os bancos de dados de vulnerabilidade do setor.
- Verificação de segredos: Detecta segredos, tokens e credenciais acidentalmente comprometidos no código do repositório e no histórico.
- Verificação de código: Usa o CodeQL e outros mecanismos de análise para encontrar vulnerabilidades de segurança e erros de codificação no código-fonte.
- Visão geral de segurança: Fornece visibilidade em toda a organização sobre alertas de segurança, vulnerabilidades e status de correção.
- Segurança da cadeia de suprimentos: Grafo de dependência, revisão de dependência e geração de SBOM para visibilidade abrangente da cadeia de suprimentos.
Licenciamento e disponibilidade
Acesso de Segurança Avançado:
- Repositórios públicos: Todos os recursos de Segurança Avançada do GitHub estão disponíveis gratuitamente em repositórios públicos.
- Repositórios privados: Requer a licença de Segurança Avançada do GitHub (incluída no GitHub Enterprise Cloud e no GitHub Enterprise Server).
- GitHub Free/Team: Os alertas do Dependabot e as atualizações de segurança estão disponíveis, mas a varredura de código e a varredura de segredos exigem o licenciamento de Segurança Avançada.
Painel de visão geral de segurança
A visão geral de segurança fornece visibilidade no nível da organização:
Métricas de segurança da organização:
- Tendências de alerta: Exiba tendências de alerta de segurança em todos os repositórios ao longo do tempo.
- Avaliação do risco: Identifique repositórios com o maior risco de segurança com base em alertas críticos e de alta gravidade.
- Cobertura da equipe: Monitore quais equipes têm recursos de segurança habilitados e acompanhe o progresso da correção.
- Relatórios de conformidade: Gere relatórios para conformidade de segurança e requisitos de auditoria.
Visão geral da segurança de acesso:
- Navegue até sua organização no GitHub.
- Clique na guia Segurança .
- Examine as métricas de segurança, as contagens de alertas e as tendências em toda a organização.
- Aprofunde-se em repositórios específicos ou tipos de alerta para uma análise detalhada.
Habilitando a segurança avançada
Para proprietários da organização:
- Navegue até as Configurações da organização.
- Clique em Segurança e análise de código.
- Habilite a Segurança Avançada do GitHub para repositórios privados.
- Defina as configurações padrão para:
- Grafo de dependência (habilitado automaticamente).
- Alertas Dependabot.
- Atualizações de segurança do Dependabot.
- Verificação de segredo.
- Verificação de código (requer configuração de fluxo de trabalho).
Habilitação no nível do repositório:
Repositórios individuais podem habilitar ou desabilitar recursos de Segurança Avançada:
- Navegue até as Configurações do repositório.
- Clique em Segurança e análise de código.
- Habilite os recursos de segurança desejados:
- Grafo de dependência: Necessário para a funcionalidade Dependabot.
- Alertas do Dependabot: Notificações de vulnerabilidade.
- Atualizações de segurança do Dependabot: Solicitações de pull automáticas para correção de vulnerabilidades.
- Verificação secreta: Detecção de vazamento de credenciais.
- Verificação de código: SAST (teste de segurança de aplicativo estático).
Integração com fluxos de trabalho de desenvolvimento
A Segurança Avançada do GitHub integra-se perfeitamente aos processos de desenvolvimento:
Integração de solicitação de pull:
- Revisão de dependência: Revisa automaticamente as alterações de dependência em solicitações de pull, realçando novas vulnerabilidades introduzidas por atualizações de dependência.
- Verificações de segurança: A verificação de código e a verificação secreta são executadas automaticamente em solicitações pull, bloqueando mesclagens se forem encontrados problemas críticos.
- Revisões obrigatórias: configura as regras de proteção de branch para exigir a aprovação da equipe de segurança em pull requests com alertas de segurança.
Políticas de segurança:
- SECURITY.md: Defina políticas de divulgação de vulnerabilidades e informações de contato de segurança.
- Proprietários de código: Atribuir membros da equipe de segurança como proprietários de código para arquivos de dependência (package.json, requirements.txt, pom.xml).
- Proteção de ramificação: Exija verificações de status para verificações de segurança antes de permitir mesclagens.
Auditoria e conformidade:
- Log de auditoria: Acompanhe todas as ações relacionadas à segurança, incluindo demissões de alerta, habilitação de recursos e alterações de acesso.
- Políticas de segurança: Impor padrões de segurança em toda a organização em todos os repositórios.
- Integração de conformidade: Exportar dados de segurança para SOC 2, ISO 27001 e outras estruturas de conformidade.
O GitHub Advanced Security fornece proteção de nível empresarial para sua cadeia de fornecimento de software, com o Dependabot servindo como base para o gerenciamento de segurança de dependência. A abordagem integrada da plataforma garante a detecção abrangente de vulnerabilidades, a correção automatizada e a visibilidade de segurança em toda a organização.
O GitHub Dependabot fornece gerenciamento abrangente e automatizado de segurança de dependência integrado diretamente aos fluxos de trabalho do GitHub. Ao habilitar alertas, atualizações de segurança e atualizações de versão, as equipes de desenvolvimento podem lidar de forma proativa com vulnerabilidades e manter dependências atualizadas com mínimo esforço manual. A próxima unidade explora como integrar verificações de Análise de Composição de Software em pipelines de CI/CD além dos recursos internos do GitHub.