Configurar o GitHub Advanced Security para Azure DevOps

O GitHub Advanced Security para Azure DevOps adiciona o pacote de recursos de segurança do GitHub Advanced Security ao Azure Repos.

O GitHub Advanced Security para Azure inclui:

  • Proteção por push de verificação secreta: verifique se os pushes de código incluem confirmações que expõem segredos como credenciais
  • Verificação de repositório de verificação secreta: examine seu repositório e procure segredos expostos que foram confirmados acidentalmente
  • Verificação de dependência – procure vulnerabilidades conhecidas em dependências de software livre (diretas e transitivas)
  • Verificação de código – use o mecanismo de análise estática codeQL para identificar vulnerabilidades de aplicativo no nível do código, como injeção de SQL e bypass de autenticação

No momento, GitHub Advanced Security para Azure DevOps só está disponível para o Azure DevOps Services e não existem planos para levar esse produto ao Azure DevOps Server.

O GitHub Advanced Security para Azure DevOps funciona com o Azure Repos. Se você quiser usar o GitHub Advanced Security com repositórios do GitHub, consulte o GitHub Advanced Security.

Pré-requisitos

Você precisa ter permissões alocadas como membro do grupo Administradores da Coleção de Projetos. Para adicionar membros ao grupo Administradores de Coleção de Projetos ou alterar uma permissão no nível da coleção do projeto, consulte Alterar permissões no nível da coleção do projeto.

Pré-requisitos extras para agentes auto-hospedados

Se sua organização usa agentes auto-hospedados, há mais requisitos:

  • Adicione essas URLs à lista de permissões para permitir que a tarefa de verificação de dependência busque dados de consultoria de vulnerabilidade. Saiba mais sobre endereços IP permitidos e URLs de domínio.
URL do domínio Descrição
https://governance.dev.azure.com/{organization_name} Para organizações que usam o domínio dev.azure.com para acessar a instância do DevOps
https://dev.azure.com/{organization_name} Para organizações que usam o domínio dev.azure.com para acessar a instância do DevOps
https://advsec.dev.azure.com/{organization_name} Para organizações que usam o domínio dev.azure.com para acessar a instância do DevOps
https://{organization_name}.governance.visualstudio.com/ Para organizações que usam o domínio {organization_name}.visualstudio.com para acessar a instância do DevOps
https://{organization_name}.visualstudio.com  Para organizações que usam o domínio {organization_name}.visualstudio.com para acessar a instância do DevOps
https://{organization_name}.advsec.visualstudio.com/ Para organizações que usam o domínio {organization_name}.visualstudio.com para acessar a instância do DevOps
  • Execute uma versão compatível do runtime do .NET (atualmente .NET 6.0.x). Se uma versão compatível não estiver presente no agente, a tarefa de build de verificação de dependência baixará o .NET.

  • Instale o pacote CodeQL no cache da ferramenta do agente utilizando o script de configuração para sua arquitetura, disponível no GitHub. Esses scripts exigem que a $AGENT_TOOLSDIRECTORY variável de ambiente seja definida como o local do diretório de ferramentas do agente no agente, por exemplo C:/agent/_work/_tool, . Como alternativa, você pode implementar manualmente as seguintes etapas:

    1. Escolha o pacote de versão mais recente do CodeQL no GitHub.
    2. Faça download e descompacte o pacote no seguinte diretório dentro do diretório de ferramentas do agente, normalmente localizado em _work/_tool: ./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/. Com a versão atual do v2.16.0, o nome da pasta será ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/. Saiba mais sobre o diretório de ferramentas do agente.
    3. Crie um arquivo vazio intitulado x64.complete dentro da pasta ./CodeQL/0.0.0-[codeql-release-bundle-tag]. Usando o exemplo anterior, o caminho do arquivo final até o arquivo x64.complete deve ser ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete.

Habilitar a Segurança Avançada do GitHub

Você pode habilitar a Segurança Avançada no nível da organização, do projeto ou do repositório. Para acessar cada uma das ferramentas e resultados de verificação, você precisa primeiro habilitar a Segurança Avançada. Depois de habilitar a Segurança Avançada, quaisquer envios futuros contendo segredos para um repositório com essa política habilitada serão bloqueados e a verificação de segredo do repositório ocorrerá em segundo plano.

Integração em nível de repositório

  1. Vá para as configurações do Projeto para seu projeto do Azure DevOps.
  2. Selecione Repos>Repositories.
  3. Selecione o repositório para o qual você deseja habilitar a Segurança Avançada.
  4. Selecione Habilitar e Iniciar cobrança para ativar a Segurança Avançada. Um ícone de escudo agora aparece no modo de exibição do repositório para qualquer repositório com a Segurança Avançada habilitada.

Screenshot of enabling GitHub Advanced Security.

Integração em nível de projeto

  1. Vá para as configurações do Projeto para seu projeto do Azure DevOps.
  2. Selecione Repositório.
  3. Selecione a guia Settings (Configurações).
  4. Selecione Habilitar tudo e aparecerá uma estimativa do número de confirmadores ativos do seu projeto.
  5. Selecione Iniciar cobrança para ativar a Segurança Avançada para cada repositório existente em seu projeto.
  6. Opcionalmente, selecione Habilitar automaticamente a Segurança Avançada para novos repositórios para que todos os repositórios recém-criados tenham a Segurança Avançada habilitada no momento da criação.

Screenshot of project-level enablement for Advanced Security.

Integração em nível de organização

  1. Acesse Configurações da organização para sua organização do Azure DevOps.
  2. Selecione Repositórios.
  3. Selecione Habilitar tudo e aparecerá uma estimativa do número de confirmadores ativos da sua organização.
  4. Selecione Iniciar cobrança para ativar a Segurança Avançada para todos os repositórios existentes em cada projeto da sua organização.
  5. Opcionalmente, selecione Habilitar automaticamente a Segurança Avançada para novos repositórios para que todos os projetos recém-criados tenham a Segurança Avançada habilitada no momento da criação.

Screenshot of org-level enablement for Advanced Security.

Configurar a verificação secreta

A proteção por push de verificação secreta e a verificação de repositório são habilitadas automaticamente quando você ativa a Segurança Avançada. Você pode habilitar ou desabilitar a proteção por push secreta da página de configurações do repositório.

Screenshot of enabling push protection.

Conforme mencionado, a verificação do repositório de verificação secreta é iniciada automaticamente ao habilitar a Segurança Avançada para um repositório selecionado.

Configurar a verificação de dependência

A verificação de dependência é uma ferramenta de verificação baseada em pipeline. Os resultados são agregados por repositório. É recomendável que você adicione a tarefa de verificação de dependência a todos os pipelines que deseja que sejam verificados.

Dica

Para obter os resultados de verificação mais precisos, adicione a tarefa de verificação de dependência seguindo as etapas de build de um pipeline que compila o código que você deseja examinar.

Adicione a tarefa Advanced Security Dependency Scanning (AdvancedSecurity-Dependency-Scanning@1) diretamente ao seu arquivo de pipeline YAML ou selecione a tarefa Advanced Security Dependency Scanning a partir do assistente de tarefas.

Screenshot of dependency scanning pipeline setup for YAML.

Configurar a verificação de código

A verificação de código também é uma ferramenta de verificação baseada em pipeline em que os resultados são agregados por repositório.

Dica

É recomendável adicionar a tarefa de verificação de código a um pipeline separado e clonado do pipeline de produção principal ou criar um novo pipeline. Isso ocorre porque a verificação de código pode ser uma tarefa de build mais demorada.

Adicione as tarefas na seguinte ordem:

  1. Inicialização do CodeQL com Segurança Avançada (AdvancedSecurity-Codeql-Init@1)
  2. Suas etapas de compilação personalizada
  3. Executar Segurança Avançada de Análise do CodeQL (AdvancedSecurity-Codeql-Analyze@1)

Screenshot of code scanning pipeline setup for YAML.

Além disso, você precisará especificar o(s) idioma(s) que está analisando na tarefa Inicializar o CodeQL. Uma lista separada por vírgulas pode ser usada para analisar várias linguagens ao mesmo tempo. As linguagens com suporte são csharp, cpp, go, java, javascript, python, ruby, swift.

Aqui está um exemplo de pipeline inicial:

trigger:
  - main

pool:
  # Additional hosted image options are available: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted#software
  vmImage: ubuntu-latest

steps:

  - task: AdvancedSecurity-Codeql-Init@1
    inputs:
      languages: "java"
      # Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
      # You can customize the initialize task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you are building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application. 

# If you had a Maven app:
#   - task: Maven@4
#     inputs:
#       mavenPomFile: 'pom.xml'
#       goals: 'clean package'
#       publishJUnitResults: true
#       testResultsFiles: '**/TEST-*.xml'
#       javaHomeOption: 'JDKVersion'
#       jdkVersionOption: '1.17'
#       mavenVersionOption: 'Default'

# Or a general script:
#   - script: |
#       echo "Run, Build Application using script"
#       ./location_of_script_within_repo/buildscript.sh

  - task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines

  - task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

Dica

A análise do CodeQL para Kotlin/Swift está atualmente na versão beta. Durante a versão beta, a análise dessa linguagem será menos abrangente do que a análise do CodeQL de outras linguagens. Use java para analisar o código escrito em Java, Kotlin ou ambos.{% endif %} Use javascript para analisar o código gravado em JavaScript, TypeScript ou ambos.

Se a linguagem especificada for cpp, java, csharp ou swift as etapas personalizadas ou AutoBuild de build forem necessárias. Para outras linguagens, se o AutoBuild for incluído, a etapa será concluída com êxito sem executar nenhuma ação.

Se, por qualquer motivo, você precisar desabilitar a Segurança Avançada, todos os alertas e o estado dos alertas serão mantidos pela próxima vez que você reabilitar a Segurança Avançada para seu repositório.

Próximas etapas