Compartilhar via


Varredura de código

A digitalização de código no GitHub Advanced Security para Azure DevOps permite que você analise o código em um repositório do Azure DevOps para encontrar vulnerabilidades de segurança e erros de codificação. Todos os problemas identificados pela análise são gerados como um alerta. A verificação de código usa 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 CodeQL e exibir os resultados como alertas de varredura de código. Para obter uma documentação mais específica sobre o CodeQL, consulte a documentação do CodeQL.

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.

Outras configurações de varredura de código

Suporte a consulta e linguagem

Os especialistas do GitHub, pesquisadores de segurança e colaboradores da comunidade escrevem e fazem a manutenção de consultas padrão do CodeQL usando uma verificação de código. As consultas são regularmente atualizadas para melhorar a análise e reduzir quaisquer resultados falso-positivos. As consultas são de software livre, portanto, você pode exibir e contribuir para as consultas no repositório github/codeql .

O CodeQL oferece suporte e usa os seguintes identificadores de linguagem:

Idioma Identificador Identificadores alternativos opcionais (se houver)
C/C++ c-cpp c ou cpp
C# csharp
Ir go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Dica

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

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

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

Captura de tela da tarefa de resultados de publicação de varredura de código.

Personalização do modo de compilação da varredura de código

A varredura de código é compatível com dois modos de compilação ao configurar um pipeline para varredura:

  • none - o banco de dados do CodeQL é criado diretamente da base de código sem compilar a base de código (compatível com todas as linguagens interpretadas, além de C# e Java).
  • manual - você define as etapas de compilação a serem usadas para a base de código no fluxo de trabalho (com suporte para todas as linguagens compiladas).

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

Para executar a análise de varredura de código por meio do GitHub Advanced Security para Azure DevOps, o modo de compilação autobuild é, na verdade, uma tarefa de compilação separada, AdvancedSecurity-CodeQL-Autobuild@1.

Dica

O modo de compilação none pode ser usado em conjunto com outras linguagens interpretadas (por exemplo, JavaScript, Python, Ruby). Se o modo de compilação none for especificado para C# ou Java em conjunto com outras linguagens compiladas que não dão suporte ao modo de compilação none, a tarefa do pipeline falhará.

Veja um exemplo de uma configuração válida com várias linguagens e o modo de compilação none:

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

Veja um exemplo de uma configuração inválida com várias linguagens e o modo de compilação none:

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 varredura de código

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

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

A guia Segurança Avançada em Repos no Azure DevOps é o hub para exibir seus alertas de verificação de código. Selecione a guia Verificação de código para exibir alertas de verificação. Você pode filtrar por branch, estado, pipeline, tipo de regra e severidade. No momento, o hub de alertas não exibe alertas para varredura concluída em ramificações de PR.

Não haverá efeito nos resultados se pipelines ou branches forem renomeados – pode levar até 24 horas até que o novo nome seja exibido.

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

Captura de tela dos 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 build não falha, mas todos os resultados de builds executados com a tarefa enquanto a Segurança Avançada está desabilitada ficam ocultos e não são mantidos.

Detalhes do Alerta

Selecione um alerta para obter mais detalhes, incluindo diretrizes de correção. Cada alerta inclui um local, uma descrição, um exemplo e uma gravidade.

Captura de tela dos detalhes do alerta de varredura de código.

Seção Explicação
Localidade A seção Locais detalha uma instância específica em que o CodeQL detectou uma vulnerabilidade. Se houver várias instâncias do 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 snippet de código afetado para que você possa selecionar o snippet a ser direcionado para a 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 verificação de código.
Exemplo A seção de exemplo mostra um exemplo simplificado da fraqueza identificada em seu código.
Severity Os níveis de gravidade podem ser baixos, médios, altos ou críticos. A pontuação de severidade baseia-se na pontuação de Common Vulnerability Score System (CVSS) fornecida para a Common Weakness Enumeration (CWE). Saiba mais sobre como a gravidade é pontuada nesta postagem no blog do GitHub.

Visualizando alertas de um repositório

Qualquer pessoa com permissões de colaborador para um repositório pode exibir um resumo de todos os alertas de um repositório na guia Segurança Avançada em Repositório. Selecione a guia Verificação de código para exibir todos os alertas de verificação ocultos.

Para exibir resultados, as tarefas de verificação de código precisam ser executadas primeiro. Depois que a primeira verificação for concluída, todas as vulnerabilidades detectadas serão exibidas na guia Segurança Avançada.

Por padrão, a página de alertas mostra os resultados da verificação de dependência para o branch padrão do repositório.

O status de um determinado alerta reflete o estado do branch padrão e do pipeline de execução mais recente, mesmo que o alerta exista em outros branches e pipelines.

Descartando alertas de verificação de código

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

Para ignorar um alerta:

  1. Navegue até o alerta que você deseja fechar e selecione no alerta.
  2. Selecione a lista suspensa 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 à caixa de texto Comentário .
  5. Selecione Fechar para enviar e fechar o alerta.
  6. O estado de alerta muda de Abrir para Fechado e seu motivo de demissão é exibido.

Captura de tela de como ignorar um alerta de varredura de código.

Essa ação descarta apenas o alerta para o branch selecionado. Outros branches que contêm a mesma vulnerabilidade permanecem ativos até serem ignorados. Qualquer alerta que tenha sido descartado anteriormente pode ser reaberto manualmente.

Gerenciamento alertas de verificação de código em solicitações de pull

Se forem criados alertas para novas alterações de código em uma solicitação de pull, o alerta será relatado como uma anotação na seção de comentários da guia Visão geral da solicitação de pull e como um alerta na guia Repositório de Segurança Avançada. Há uma nova entrada do seletor de branch para o branch de solicitação de pull.

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 de pull de código ativa.

Para ignorar alertas de solicitação de pull, navegue 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 ou corrige o alerta subjacente.

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

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

Dica

As anotações só serão criadas quando as linhas de código afetadas forem totalmente exclusivas para a diferença da solicitação de pull em comparação com o branch de destino da solicitação de pull.