Implementar alertas e atualizações de segurança do GitHub Dependabot
O GitHub Dependabot fornece gerenciamento automatizado de dependências integrado diretamente aos repositórios do GitHub. O Dependabot monitora dependências em busca de vulnerabilidades de segurança e versões desatualizadas, alertando os mantenedores do repositório e criando automaticamente solicitações 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.
Entendendo o GitHub Dependabot
O GitHub Dependabot consiste em três recursos principais que trabalham juntos para proteger dependências:
Alertas Dependabot
Os alertas do Dependabot notificam os mantenedores do repositório quando dependências vulneráveis são detetadas. O GitHub monitora continuamente o GitHub Advisory Database e outras fontes de vulnerabilidade, comparando-as com 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 aconselhamento: Os alertas existentes são atualizados quando as informações de vulnerabilidade são alteradas (gravidade, versões afetadas, patches).
- Alterações no gráfico de dependência: Novos alertas são gerados quando as 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 GitHub Advisory Database.
As informações de alerta incluem:
- Descrição da vulnerabilidade: Explicação detalhada do problema de segurança.
- Nível de gravidade: Pontuação CVSS e classificação de gravidade (crítica, alta, moderada, baixa).
- 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 (Common Vulnerabilities and Exposures), quando disponível.
- Classificação CWE: Tipo CWE (Common Weakness Enumeration) categorizando a vulnerabilidade.
- Link do Comunicado de Segurança do GitHub: Link para o comunicado completo com detalhes adicionais.
Atualizações de segurança do Dependabot
As atualizações de segurança do Dependabot criam automaticamente solicitações pull para atualizar dependências vulneráveis para versões seguras. Quando os alertas do Dependabot detetam vulnerabilidades com patches disponíveis, as atualizações de segurança podem gerar automaticamente solicitações pull corrigindo as vulnerabilidades.
Criação automática de pull request:
- Vulnerabilidade acionada: As atualizações de segurança criam solicitações pull somente quando vulnerabilidades de segurança são detetadas, não para todas as atualizações de dependência.
- Saltos de versão mínimos: Solicitações pull atualizam dependências para a versão mínima que resolve a vulnerabilidade, mantendo a compatibilidade.
- Pontuações de compatibilidade: O GitHub calcula pontuações de compatibilidade prevendo se as atualizações interromperão a funcionalidade existente.
- Notas de versão: As solicitações pull incluem notas de versão e informações do changelog de dependências atualizadas.
Funcionalidades de pull request:
- Testes automatizados: As solicitações pull acionam pipelines de CI/CD existentes para validar que as atualizações não interrompem a funcionalidade.
- Resolução da vulnerabilidade: As descrições de solicitação pull explicam quais vulnerabilidades são resolvidas pela atualização.
- Comandos de atualização: Comentários especiais permitem que os mantenedores controlem o tempo de mesclagem, rebaseiem solicitações pull ou ignorem atualizações específicas.
- Atualizações agrupadas: Várias dependências vulneráveis podem ser atualizadas em uma única solicitação 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 atualizam apenas dependências vulneráveis, as atualizações de versão atualizam proativamente as dependências para as versões mais recentes com base em agendamentos configurados.
Atualizações agendadas:
- Frequência configurável: As atualizações podem ser agendadas diariamente, semanalmente ou mensalmente.
- Estratégias de atualização: Configure se deseja atualizar todas as dependências, apenas dependências diretas ou grupos de dependência específicos.
- Restrições de versão: Respeite as restrições de controle de versão semânticas definidas em arquivos de manifesto.
- Limites de solicitação pull: Controle quantas solicitações pull abertas o Dependabot cria para evitar sobrecarregar os mantenedores.
Ativando 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.
Ativar 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 e análise na barra lateral esquerda.
- Localize a seção de alertas Dependabot .
- Clique em Ativar para ativar alertas Dependabot.
Requisito do gráfico de dependência: Os alertas Dependabot exigem que o gráfico de dependência seja ativado. O gráfico de dependência é ativado automaticamente para repositórios públicos, mas pode precisar de ativação manual para repositórios privados.
Ativar gráfico de dependência:
- Em Configurações → Segurança e Análise, localize Gráfico de dependências.
- Clique em Ativar se o gráfico de dependência ainda não estiver ativo.
- O GitHub começará a analisar as dependências do repositório para criar o gráfico de dependência.
Capacitação em toda a organização
Os administradores da organização podem ativar alertas Dependabot em todos os repositórios:
Configurações da organização:
- Navegue até Configurações da organização.
- Clique em Segurança e análise na barra lateral esquerda.
- Clique em Ativar todos ao lado de alertas Dependabot para ativar alertas para todos os repositórios atuais e futuros.
- Opcionalmente, selecione Ativar automaticamente para novos repositórios para habilitar alertas para repositórios recém-criados.
Ecossistemas de pacotes suportados
Os alertas Dependabot suportam vários ecossistemas de pacotes, incluindo:
Ecossistemas suportados:
- JavaScript: npm (package.json, package-lock.json), Yarn (yarn.lock).
- Python: pip (requirements.txt, Pipfile, Pipfile.lock), Poesia (poetry.lock).
- Ruby: Bundler (Gemfile, Gemfile.lock).
- Java: Maven (pom.xml), Gradle (build.gradle, build.gradle.kts).
- .NET: NuGet (*.csproj, packages.config, paket.dependencies).
- Vai: Módulos Go (go.mod, go.sum).
- PHP: Compositor (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 Terraform (versões do módulo).
Configurando atualizações de segurança do Dependabot
As atualizações de segurança do Dependabot exigem ativação explícita mesmo quando os alertas estão ativados.
Ativar atualizações de segurança
Configuração do repositório:
- Navegue até Configurações → Segurança & análise.
- Encontre as atualizações de segurança do Dependabot.
- Clique em Ativar para ativar solicitações pull de atualização de segurança automáticas.
- O Dependabot começará a monitorar dependências vulneráveis e a criar solicitações pull quando patches estiverem disponíveis.
Configuração em toda a organização:
- Navegue para as Configurações da organização → Segurança e análise.
- Clique em Ativar tudo ao lado de Atualizações de segurança do Dependabot.
- Selecione Ativar automaticamente para novos repositórios para habilitar para repositórios futuros.
Comportamento da atualização de segurança
Criação automática de pull request:
- Deteção de vulnerabilidade: Quando os alertas do Dependabot detetam uma dependência vulnerável com um patch disponível, as atualizações de segurança criam uma solicitação pull.
- Atualizações mínimas: As solicitações pull atualizam apenas para a versão mínima que resolve a vulnerabilidade.
- Versionamento semântico: As atualizações respeitam o controle de versão semântico, preferindo atualizações de patch a atualizações menores ou maiores quando possível.
- Integração de testes: As solicitações pull acionam verificações de CI/CD existentes para validar atualizações.
Pontuações de compatibilidade: O GitHub calcula pontuações de compatibilidade indicando 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 significativas que exijam revisão.
- Baixa compatibilidade: A atualização provavelmente inclui alterações disruptivas que exigem modificações de código.
- Compatibilidade desconhecida: Dados insuficientes para avaliar a compatibilidade.
Gerenciamento de solicitação pull:
- Rebasing automático: O Dependabot rebaseia automaticamente as solicitações pull quando a ramificação base muda.
- Resolução de conflitos: As solicitações pull são fechadas se os conflitos impedirem a rebase automática.
- Substituindo atualizações: Novas solicitações pull substituem solicitações pull mais antigas quando versões mais recentes são lançadas.
- Atualizações agendadas: As solicitações pull são criadas de acordo com cronogramas configurados para evitar sobrecarregar os mantenedores.
Configurando atualizações de versão do Dependabot
As atualizações de versão exigem um arquivo de configuração que defina agendas e comportamentos de atualização.
Criar configuração 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 do arquivo de configuração (sempre 2).
- Atualizações: Matriz de configurações de atualização para diferentes ecossistemas de pacotes.
- pacote-ecossistema: Gestor de pacotes para monitorizar (npm, pip, bundler, maven, nuget, etc.).
- diretório: Localização dos arquivos de manifesto do pacote (/ para root, ou caminho de subdiretório).
- programação.intervalo: Frequência para atualização (diária, semanal, mensal).
- open-pull-requests-limit: Número máximo de solicitações 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:
- agendamento.dia: Dia da semana para atualizações semanais (de segunda a domingo).
- agendar.hora: Hora do dia para as 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 solicitaram automaticamente revisões de pull request.
- cessionários: Usuários do GitHub atribuídos automaticamente para solicitações pull.
- rótulos: Etiquetas aplicadas automaticamente a solicitações 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ões específicos.
- Permite: Atualizar tipos de dependência (produção, desenvolvimento, todos).
Vários ecossistemas de pacotes
Os repositórios que usam ecossistemas de vários idiomas exigem configurações de atualização separadas:
Configuração multi-ecossistema:
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, as dependências do Python em /backend, as imagens de base do Docker em todo o repositório e as versões do GitHub Actions nos fluxos de trabalho.
Gerenciando solicitações pull do Dependabot
As solicitações pull do Dependabot suportam comandos especiais para gerenciar atualizações.
Comandos de solicitação pull
Comandos de comentário:
-
@dependabot rebase: Rebaseie a solicitação pull na ramificação base atual. -
@dependabot recreate: Recrie a solicitação pull, substituindo todas as edições manuais. -
@dependabot merge: Mescle a solicitação pull assim que as verificações de CI passarem. -
@dependabot squash and merge: Squash confirma e mescla assim que os cheques passam. -
@dependabot cancel merge: Cancelar uma mesclagem solicitada anteriormente. -
@dependabot reopen: Reabra uma solicitação pull fechada. -
@dependabot close: Feche a solicitação pull e impeça que o Dependabot a recrie. -
@dependabot ignore this major version: Feche o pull request e ignore futuras atualizações para esta versão principal. -
@dependabot ignore this minor version: Feche o pull request e ignore futuras atualizações para esta versão secundária. -
@dependabot ignore this dependency: Feche a solicitação 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 pull: Entenda qual vulnerabilidade foi resolvida ou qual versão foi atualizada.
- Rever a pontuação de compatibilidade: Avalie a probabilidade de alterações de rutura.
- Confira os resultados do CI/CD: Verifique se os testes automatizados são aprovados com êxito.
- Rever as notas de versão: Compreender as alterações incluídas na atualização de dependência.
- Teste localmente, se necessário: Para atualizações importantes, teste a funcionalidade localmente antes de mesclar.
- Solicitação pull de mesclagem: Aprove e mescle a solicitação pull para atualizar a dependência.
Fusão automática: Para atualizações de baixo risco com altas pontuações de compatibilidade e aprovação em testes, considere configurar a mesclagem automática:
Mesclagem automática de ações do GitHub:
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 pull do Dependabot que passam em 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 em Alertas Dependabot.
- Informações sobre o repositório: O gráfico de dependência na guia Insights mostra dependências vulneráveis.
Notificações por e-mail:
- E-mails resumidos: E-mails resumidos semanais listando novos alertas.
- E-mails em tempo real: E-mails 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 em 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 com alertas Dependabot via API.
Configurando preferências de notificação
Configurações de notificação do usuário:
- Navegue até Configurações → Notificações do GitHub.
- Localize a seção Alertas de segurança .
- Configure as preferências de notificação:
- Participando: Recebe notificações de repositórios que estás a seguir ou em que estás a participar.
- Assistindo: Receba notificações para todos os repositórios assistidos.
- Email: Habilite notificações por e-mail para alertas de segurança.
- Sítio Web: Habilite notificações da Web na interface do usuário do GitHub.
Configurações de notificação da organização:
- Navegue para as Configurações da organização → Segurança e 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.
- Gestores de segurança: A equipa de segurança designada recebe alertas.
- Administradores do repositório: Cada administrador de repositório recebe alertas para seus repositórios.
Revisão de alertas do Dependabot
A guia Segurança fornece gerenciamento de alertas abrangente.
Detalhes do alerta
Navegue até os alertas:
- Abra o repositório no GitHub.
- Clique no separador Segurança.
- Clique em Alertas Dependabot na barra lateral esquerda.
- Reveja a lista de alertas ativos.
Informações de alerta:
- Gravidade: Classificação de gravidade crítica, alta, moderada ou baixa.
- Pacote: Nome e versão da dependência afetados.
- Vulnerabilidade: Identificador 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).
- Auto-fix disponível: Se o Dependabot pode criar automaticamente uma solicitação pull para corrigir a vulnerabilidade.
Gerir alertas
Ações de alerta:
- Revisar o pull request: Se existir uma atualização de segurança automática, revisar e fazer o merge do pull request.
- Dispensar alerta: Dispensar falsos positivos ou riscos aceites com um motivo de dispensa.
- Alerta de soneca: Dispense temporariamente alertas que não possam ser resolvidos imediatamente.
- Reabrir alerta: Reabra alertas anteriormente descartados se as circunstâncias mudarem.
Motivos do despedimento:
- Correção iniciada: A equipe está trabalhando ativamente na remediação.
- Sem largura de banda: O problema é reconhecido, mas não pode ser resolvido atualmente.
- Risco tolerável: A vulnerabilidade não representa um risco significativo neste contexto.
- Impreciso: O alerta é um falso positivo.
Integração com o GitHub Advanced Security
O GitHub Dependabot é um componente central do GitHub Advanced Security, a plataforma de segurança abrangente do GitHub que fornece recursos de segurança de nível empresarial para proteger sua cadeia de suprimentos de software.
Funcionalidades avançadas de segurança
Capacidades de segurança integradas:
- Varredura 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 bancos de dados de vulnerabilidades do setor.
- Verificação de segredos: Detecta segredos, tokens e credenciais que foram confirmados acidentalmente no código e no histórico do repositório.
- Verificação de código: Usa 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 abastecimento: Gráfico 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çada:
- 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 licença do GitHub Advanced Security (incluída no GitHub Enterprise Cloud e no GitHub Enterprise Server).
- GitHub Grátis/Equipe: Alertas Dependabot e atualizações de segurança estão disponíveis, mas a verificação de código e a verificação secreta exigem 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: Veja as tendências de alertas de segurança em todos os repositórios ao longo do tempo.
- Avaliação dos riscos: Identifique repositórios com o maior risco de segurança com base em alertas críticos e de alta gravidade.
- Cobertura da equipa: 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 no separador Segurança.
- Analise as métricas de segurança em toda a organização, contagens de alertas e tendências.
- Analise detalhadamente repositórios ou tipos de alerta específicos para uma investigação detalhada.
Ativando a Segurança Avançada
Para proprietários de organizações:
- Navegue até 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:
- Gráfico de dependência (ativado automaticamente).
- Alertas Dependabot.
- Atualizações de segurança Dependabot.
- Análise secreta.
- Verificação de código (requer configuração de fluxo de trabalho).
Habilitação no nível do repositório:
Os repositórios individuais podem ativar ou desativar as funcionalidades de Segurança Avançada:
- Navegue até Configurações do repositório.
- Clique em Segurança e análise de código.
- Habilite os recursos de segurança desejados:
- Gráfico de dependência: Necessário para a funcionalidade Dependabot.
- Alertas Dependabot: Notificações de vulnerabilidade.
- Atualizações de segurança do Dependabot: Solicitações de pull de correção automática de vulnerabilidade.
- Verificação secreta: Deteção de fuga de credenciais.
- Verificação de código: Testes estáticos de segurança de aplicações (SAST).
Integração com fluxos de trabalho de desenvolvimento
O GitHub Advanced Security integra-se perfeitamente com os processos de desenvolvimento:
Integração de pull request:
- Revisão de dependência: Analisa automaticamente as alterações de dependência em solicitações pull, destacando novas vulnerabilidades introduzidas por atualizações de dependência.
- Controlos de segurança: A varredura de código e a varredura secreta são executadas automaticamente em solicitações pull, bloqueando mesclagens se forem encontrados problemas críticos.
- Revisões obrigatórias: Configurar regras de proteção de branch para requerer aprovação da equipa de segurança para pedidos de pull 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 do código: Atribua 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 ramos: Exija verificações de status para verificações de segurança antes de permitir mesclagens.
Auditoria e conformidade:
- Registo de auditoria: Rastreie todas as ações relacionadas à segurança, incluindo demissões de alertas, ativação de recursos e alterações de acesso.
- Políticas de segurança: Aplique padrões de segurança em toda a organização em todos os repositórios.
- Integração de conformidade: Exporte 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 suprimentos de software, com o Dependabot servindo como base para o gerenciamento de segurança de dependência. A abordagem integrada da plataforma garante deteção abrangente de vulnerabilidades, correção automatizada e visibilidade de segurança em toda a organização.
O GitHub Dependabot fornece gerenciamento de segurança de dependência abrangente e automatizado 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 abordar vulnerabilidades de forma proativa e manter dependências atualizadas com o mínimo de 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 integrados do GitHub.