Partilhar via


Configurar a análise de código

A análise de código no GitHub Advanced Security for Azure DevOps permite-lhe analisar o código num repositório Azure DevOps para encontrar vulnerabilidades de segurança e erros de programação. Vai precisar ou do GitHub Advanced Security para Azure DevOps ou, se estiver a usar a experiência autónoma, do GitHub Code Security for Azure DevOps ativado. Quaisquer problemas identificados pela análise são gerados como um alerta. A análise de códigos utiliza o CodeQL para identificar vulnerabilidades.

O CodeQL é o motor de análise de código desenvolvido pelo GitHub para automatizar verificações de segurança. Você pode analisar seu código usando o CodeQL e exibir os resultados como alertas de varredura de código. Para obter documentação mais específica sobre o CodeQL, consulte a documentação do CodeQL.

GitHub Advanced Security for Azure DevOps funciona com Repositórios do Azure. Para usar GitHub Segurança Avançada com repositórios GitHub, consulte GitHub Segurança Avançada.

Pré-requisitos

Categoria Requerimentos
Permissões - Para visualizar um resumo de todos os alertas para um repositório: Colaborador permissões para o repositório.
- Para dispensar alertas em Segurança Avançada: permissões de administrador de projeto.
- Para gerir permissões em Advanced Security: Membro do grupo Administradores de Coleções do Projeto ou com a permissão Segurança Avançada: gerir definições definida para Permitir.

Para obter mais informações sobre permissões de Segurança Avançada, consulte Gerenciar permissões de Segurança Avançada.

Sobre os tipos de configuração de varredura de código

Existem duas formas principais de configurar a digitalização de código para o seu repositório: configuração padrão e configuração avançada.

Configuração padrão Configuração avançada
Configuração Automático, sem necessidade de configuração de oleoduto Manual, requer adicionar tarefas do CodeQL a um pipeline
Deteção de linguagem Detete e analisa automaticamente linguagens suportadas por CodeQL Especificas as línguas na tarefa do pipeline
Cobertura de agências Apenas verifica o ramo principal por defeito Analisa qualquer ramo que desencadeie o pipeline
Personalização de builds Sem passos personalizados de construção — usa none o modo de construção Controlo total sobre os passos de compilação para linguagens compiladas
Melhor para Ativação rápida, exigências padrão para digitalização Verificação multi-ramo, grupo de agentes personalizado ou frequência de verificação

A configuração padrão é a forma mais rápida de ativar a digitalização de código. Cria uma configuração de varrimento gerida nos bastidores e não requer alterações no pipeline. Recomendamos começar com a configuração padrão para a maioria dos repositórios.

Advanced setup dá-lhe controlo total ao adicionar tarefas do CodeQL diretamente ao seu Azure Pipelines. Use a configuração avançada quando precisar:

  • Gerir pools específicos de agentes para diferentes linguagens ou necessidades de computação
  • Personalizar os passos de compilação para linguagens compiladas
  • Varrer ramos para além do ramo padrão
  • Integrar a verificação de código num pipeline CI/CD existente
  • Use um conjunto específico de consultas CodeQL ou consultas personalizadas

Gorjeta

Podes começar com a configuração padrão e mudar para a configuração avançada mais tarde se precisares de mais controlo, ou usar ambos. Para informações sobre a configuração predefinida, consulte Configure GitHub Funcionalidades Avançadas de Segurança.

Configurar opções de configuração padrão

Depois de ativares a configuração padrão do CodeQL, podes configurar o pool de agentes e o cronograma de análise a partir das definições da tua organização. Estas opções aplicam-se a todos os repositórios da organização que usem a configuração padrão.

Para aceder às opções configuráveis, vá a Definições da Organização>Repositórios e expanda o menu dropdown de opções configuráveis da configuração padrão do CodeQL.

Captura de ecrã da configuração padrão expandida do CodeQL, opções configuráveis que mostram o pool de agentes e as definições de agendamento de varredura.

Pool de agentes

Selecione o pool de agentes usado para executar as varreduras de configuração padrão do CodeQL em todos os repositórios da organização. Pode escolher entre:

  • Azure Pipelines — utiliza agentes alojados Microsoft. Usar o pool de agentes do Azure Pipelines consome a capacidade de simultaneidade do pipeline.
  • Pools de agentes auto-hospedados — utiliza os seus próprios agentes. Selecione um pool auto-hospedado se os seus repositórios precisarem de acesso a redes privadas, ferramentas específicas de build ou outros recursos não disponíveis nos agentes alojados.
  • Managed DevOps Pools — utiliza pools geridos por Azure com imagens de VM personalizadas.

Calendário de análise

Selecione quando as análises padrão do CodeQL são executadas para todos os repositórios da organização. Pode escolher um dia específico da semana para as ecografias semanais. A próxima data de execução agendada é exibida abaixo do menu suspenso.

Cancelar digitalizações em execução ou em fila

Se precisar de parar quaisquer análises de configuração padrão em execução ou em fila, pode cancelá-las manualmente através das definições da organização>repositórios. Os utilizadores com a permissão Segurança Avançada: gerir definições no repositório podem cancelar execuções de configuração padrão em execução ou em fila.

Configuração avançada para digitalização de código

O CodeQL é uma ferramenta baseada em pipeline, onde os resultados são agregados por repositório.

Gorjeta

A verificação de código pode ser uma tarefa de compilação mais demorada, portanto, recomendamos que você adicione a tarefa de verificação de código a um pipeline clonado separado do pipeline de produção principal ou crie um novo pipeline.

Adicione as tarefas na seguinte ordem:

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

Captura de tela da configuração do pipeline de varredura de código para YAML.

Além disso, especifique qual idioma você está analisando na Initialize CodeQL tarefa. Você pode usar uma lista separada por vírgulas para analisar vários idiomas ao mesmo tempo. Os idiomas suportados são csharp, cpp, go, java, javascript, python, ruby, swift. Se você estiver utilizando agentes auto-hospedados, você também pode adicionar a enableAutomaticCodeQLInstall: true variável para instalar automaticamente os bits CodeQL mais recentes para seu agente.

Aqui está um exemplo de fluxo de trabalho 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
      # If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
      enableAutomaticCodeQLInstall: true

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're 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.
# - For dependency scanning, ensure you have a package restore step for more accurate results.

# 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

Além disso, especifique qual idioma você está analisando na Initialize CodeQL tarefa. Se a linguagem especificada for swift, são necessários passos de construção personalizados.

Gorjeta

  • Use java para analisar código escrito em Java, Kotlin ou ambos.
  • Use javascript para analisar código escrito em JavaScript, TypeScript ou ambos.

Se você estiver executando em um agente auto-hospedado, selecione a Enable automatic CodeQL detection and installation opção para usar automaticamente os bits CodeQL mais recentes em seu agente se você não tiver instalado manualmente o pacote CodeQL mais recente no cache de ferramentas do agente.

Para gerar alertas, execute a sua primeira análise num pipeline que inclua as tarefas de varredura de código inclusas.

Mais configurações para verificação de código

Suporte a idiomas e consultas

Especialistas do GitHub, investigadores de segurança e colaboradores da comunidade escrevem e mantêm as consultas CodeQL padrão usadas para a digitalização de código. As consultas são atualizadas regularmente para melhorar a análise e reduzir quaisquer resultados falsos positivos. As consultas são open source, por isso podes visualizar e contribuir para as consultas no repositório github/codeql.

CodeQL suporta e usa os seguintes identificadores de idioma:

Linguagem Identificador
C/C++ cpp
C# csharp
Go go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Ruby ruby
Rápido swift

Gorjeta

  • Use cpp para analisar código escrito em C, C++ ou ambos.
  • Use java para analisar código escrito em Java, Kotlin ou ambos.
  • Use javascript para analisar código escrito em JavaScript, TypeScript ou ambos.

Para obter mais informações, consulte Linguagens e estruturas suportadas.

Você pode visualizar as consultas específicas e os detalhes da tarefa executados pelo CodeQL no log de compilação.

Captura de ecrã da tarefa de publicação de resultados da análise de código.

Personalização do modo de compilação e análise de código

A análise de código suporta dois modos de build ao configurar um pipeline para análise:

  • none - o banco de dados CodeQL é criado diretamente da base de código sem construir a base de código (suportado para todas as linguagens interpretadas e, adicionalmente, suportado para cpp, javae csharp).
  • manual - você define as etapas de compilação a serem usadas para a base de código no fluxo de trabalho (suportado para todas as linguagens compiladas).

Para obter mais informações sobre os diferentes modos de compilação, incluindo uma comparação sobre os benefícios de cada modo de compilação, consulte Verificação de código CodeQL para linguagens compiladas.

Gorjeta

O modo de compilação none é utilizável com outras linguagens interpretadas, por exemplo, JavaScript, Python, Ruby. Se o modo de compilação none for especificado para C# ou Java com outras linguagens compiladas que não suportam o modo de compilação none, a tarefa do pipeline falha.

O código a seguir mostra um exemplo de uma configuração válida com vários idiomas e none modo de compilação:

trigger: none
 
pool:
  vmImage: windows-latest

steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
    languages: 'csharp, java, javascript' 
    buildtype: 'none'

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

O código a seguir mostra um exemplo de uma configuração inválida com vários idiomas e none modo de compilação:

trigger: none
 
pool:
  vmImage: windows-latest

steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
    languages: 'csharp, swift'
    buildtype: 'none'

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

Alertas de verificação de código

GitHub Segurança Avançada para Azure DevOps alertas de varredura de código incluem flags de leitura de código pelo repositório que alertam para vulnerabilidades ao nível do código das aplicações.

Para usar a digitalização de código, é necessário primeiro configurar GitHub Advanced Security para Azure DevOps.

O separador Advanced Security em Repos no Azure DevOps é o hub para visualizar os seus alertas de análise de código. Selecione o separador Análise de Código para exibir alertas de análise. Você pode filtrar por ramificação, estado, pipeline, tipo de regra e gravidade. No momento, o hub de alertas não exibe alertas para verificação concluída em ramificações de RP.

Não há efeito nos resultados se as cadeias de processamento ou ramificações forem renomeadas - pode demorar até 24 horas para que o novo nome seja exibido.

Se você optar por executar consultas CodeQL personalizadas, não há, por padrão, um filtro separado para alertas gerados a partir de diferentes pacotes de consulta. Você pode filtrar por regra, que é distinta para cada consulta.

Captura de tela de alertas de varredura de código para um repositório.

Se você desativar a Segurança Avançada para seu repositório, perderá o acesso aos resultados na guia Segurança Avançada e na tarefa de compilação. A tarefa de compilação não falha, mas todos os resultados das compilações executadas com a tarefa enquanto a Segurança Avançada está desativada ficam ocultos e não são mantidos.

Detalhes do alerta

Selecione um alerta para obter mais detalhes, incluindo orientações de correção. Cada alerta inclui uma localização, descrição, exemplo e gravidade.

Captura de ecrã do detalhe do alerta de análise de código.

Seção Explicação
Localização A seção Locais detalha uma instância específica em que o CodeQL detetou uma vulnerabilidade. Se houver várias instâncias do seu código violando a mesma regra, um novo alerta será gerado para cada local distinto. O cartão de Localizações contém um link direto para o excerto de código afetado para que possa selecionar o excerto a ser direcionado para a interface web do Azure DevOps para edição.
Descrição A descrição é fornecida pela ferramenta CodeQL com base no problema.
Recomendação A recomendação é a correção sugerida para um determinado alerta de varredura de código.
Exemplo A seção de exemplo mostra um exemplo simplificado da fraqueza identificada em seu código.
Gravidade Os níveis de gravidade podem ser baixos, médios, altos ou críticos. A pontuação de gravidade é baseada na pontuação do Common Vulnerability Scoring System (CVSS) para a Enumeração de Fraqueza Comum (CWE) identificada. Saiba mais sobre como a gravidade é avaliada neste artigo do blog GitHub.

Visualizando alertas para um repositório

Qualquer pessoa com permissões de contribuidor para um repositório pode visualizar um resumo de todos os alertas para um repositório no separador Segurança Avançada em Repositórios. Selecione o separador Análise de Código para visualizar todos os alertas de análise de segredos.

Para exibir resultados, as tarefas de verificação de código precisam ser executadas primeiro. Quando a primeira verificação terminar, todas as vulnerabilidades detetadas serão exibidas na guia Segurança Avançada.

Por padrão, a página de alertas mostra os resultados da verificação de código para a ramificação padrão do repositório.

O status de um determinado alerta reflete o estado da ramificação padrão e do pipeline de execução mais recente, mesmo que o alerta exista em outras ramificações e pipelines.

Descartando alertas de análise de código

Para descartar alertas, você precisa de permissões apropriadas. Por padrão, apenas os administradores de projeto podem descartar alertas de Segurança Avançada.

Para descartar um alerta:

  1. Navegue até o alerta que deseja fechar e selecione o mesmo.
  2. Selecione o menu pendente Fechar alerta.
  3. Se ainda não estiver selecionado, selecione Risco aceito ou Falso positivo como o motivo do fechamento.
  4. Adicione um comentário opcional na caixa de texto Comentário.
  5. Selecione Fechar para enviar e feche o alerta.
  6. O estado de alerta muda de Aberto para Fechado e o motivo de encerramento é exibido.

Captura de ecrã de como descartar um alerta de análise de código.

Esta ação elimina o alerta em todas as filiais. Outras ramificações que contenham a mesma vulnerabilidade também serão descartadas. Qualquer notificação de alerta anteriormente descartada pode ser reaberta manualmente.

Gerir alertas de análise de código em pull requests

Se forem criados alertas para novas alterações de código num pull request, o alerta será relatado como uma anotação na secção de comentários do separador Visão Geral do pull request e como um alerta no separador do repositório de Segurança Avançada. Há uma nova entrada no seletor de ramo para o ramo do pull request.

Você pode revisar as linhas de código afetadas, ver um resumo da descoberta e resolver a anotação na seção Visão geral.

Captura de tela da anotação de solicitação pull de código ativo.

Para descartar alertas de solicitação pull, você deve navegar até a exibição de detalhes do alerta para fechar o alerta e resolver a anotação. Caso contrário, simplesmente alterar o status do comentário (1) resolve a anotação, mas não fecha nem corrige o alerta subjacente.

Captura de tela da anotação de solicitação pull de código fechado.

Para ver o conjunto completo de resultados do seu ramo de 'pull request', navegue até Repos>Advanced Security e selecione o seu ramo de 'pull request'. Selecionar Mostrar mais detalhes (2) na anotação direciona você para a exibição de detalhes do alerta na guia Segurança Avançada.

Gorjeta

As anotações só são criadas quando as linhas de código afetadas são inteiramente únicas para a diferença presente na solicitação pull em comparação com o branch de destino da solicitação pull.