Partilhar via


Configurar a análise de código

A verificação de código no GitHub Advanced Security for Azure DevOps permite analisar o código em um repositório do Azure DevOps para encontrar vulnerabilidades de segurança e erros de codificação. Você precisará do GitHub Advanced Security for Azure DevOps ou, se estiver usando a experiência autônoma, do GitHub Code Security for Azure DevOps habilitado. Quaisquer problemas identificados pela análise são gerados como um alerta. A análise de códigos utiliza o CodeQL para identificar vulnerabilidades.

CodeQL é o mecanismo 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.

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

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 descartar alertas em Segurança Avançada: permissões de administrador do projeto.
- Para gerir permissões em Segurança Avançada: Membro do grupo Administradores de Coleção de Projetos ou Segurança Avançada: gerir configurações permissões definidas como Permitir.

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

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

Suporte a idiomas e consultas

Especialistas do GitHub, pesquisadores de segurança e colaboradores da comunidade escrevem e mantêm as consultas CodeQL padrão usadas para verificaçã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 de código aberto, para que você possa visualizar e contribuir com 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 construçã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 de pipeline falhará.

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

Os alertas de verificação de código do GitHub Advanced Security for Azure DevOps incluem sinalizadores de verificação de código por repositório que alertam sobre vulnerabilidades de aplicativos no nível de código.

Para usar a verificação de código, você precisa primeiro configurar o GitHub Advanced Security for Azure DevOps.

A guia Segurança Avançada em Repos no Azure DevOps é o hub para exibir os seus alertas de verificação 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 Locais contém um link direto para o trecho de código afetado para que você possa selecionar o trecho a ser direcionado à interface do usuário da 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 é pontuada nesta postagem do blog do GitHub.

Visualizando alertas para um repositório

Qualquer pessoa com permissões de colaborador para um repositório pode visualizar um resumo de todos os alertas para um repositório na guia Segurança Avançada em Repos. 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 todo o conjunto de resultados para o seu ramo do pull request, navegue até Repos>Advanced Security e selecione o seu ramo do 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.