Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A verificação de código no GitHub Advanced Security for Azure DevOps permite que você analise o código em um repositório Azure DevOps para encontrar vulnerabilidades de segurança e erros de codificação. Você precisará do GitHub Advanced Security para Azure DevOps ou, se estiver usando a experiência autônoma, do GitHub Code Security para Azure DevOps habilitado. 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.
GitHub Advanced Security for Azure DevOps funciona com Azure Repos. Para usar GitHub Segurança Avançada com repositórios GitHub, consulte GitHub Advanced Security.
Pré-requisitos
| Categoria | Requisitos |
|---|---|
| Permissões | – Para exibir um resumo de todos os alertas de um repositório: permissões de colaborador para o repositório. – Para ignorar alertas na Segurança Avançada: permissões de administrador do projeto. – Para gerenciar permissões em Segurança Avançada: Membro do grupo Project Collection Administrators ou Advanced Security: gerenciar configurações permissão definida como Allow. |
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 instalação de verificação de código
Há duas maneiras principais de configurar a verificação de código para 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 pipeline. | Manual, requer a adição de tarefas CodeQL a um pipeline |
| Detecção de linguagem | Detecta e verifica automaticamente idiomas compatíveis com CodeQL | Você especifica idiomas na tarefa de Pipeline |
| Cobertura de ramificação | Verifica somente o branch padrão | Verifica qualquer branch que dispare o pipeline |
| Personalização de build | Nenhuma etapa de build personalizada – usa o none modo de build |
Controle total sobre as etapas de build para idiomas compilados |
| Mais adequado para | Habilitação rápida, necessidades de escaneamento padrão | Escaneamento de múltiplas filiais, pool de agentes personalizados ou frequência de escaneamento |
A configuração padrão é a maneira mais rápida de habilitar a verificação de código. Ele cria uma configuração gerenciada de verificação nos bastidores e não requer alterações no pipeline. É recomendável começar com a configuração padrão para a maioria dos repositórios.
A configuração avançada oferece controle total ao adicionar tarefas do CodeQL diretamente às suas Azure Pipelines. Use a configuração avançada quando precisar:
- Gerenciar pools de agentes específicos para diferentes idiomas ou necessidades de computação
- Personalizar as etapas de build para idiomas compilados
- Verificar branches além do branch padrão
- Integrar a verificação de código em um pipeline de CI/CD existente
- Usar um conjunto de consultas específicas do CodeQL ou consultas personalizadas
Dica
Você pode começar com a configuração padrão e mudar para a configuração avançada mais tarde se precisar de mais controle ou usar ambos. Para obter informações sobre como configurar a configuração padrão, consulte Configure GitHub Recursos de Segurança Avançada.
Configurar opções de configuração padrão
Depois de habilitar a configuração padrão do CodeQL, você pode definir o pool de agentes e o agendamento de verificação das configurações da sua organização. Essas opções se aplicam a todos os repositórios na organização que usam a configuração padrão.
Para acessar as opções configuráveis, vá para Configurações da organização>Repositórios e expanda a lista suspensa de opções configuráveis de configuração padrão do CodeQL.
Pool de agentes
Selecione o pool de agentes usado para executar verificações de configuração padrão do CodeQL em todos os repositórios da organização. Você pode escolher entre:
- Azure Pipelines — usa agentes hospedados Microsoft. O uso do pool de agentes do Azure Pipelines consome a capacidade de execução simultânea do pipeline.
- Pools de agentes autogerenciados – usa seus próprios agentes. Selecione um pool auto-hospedado se seus repositórios exigirem acesso a redes privadas, ferramentas de build específicas ou outros recursos não disponíveis em agentes hospedados.
- Managed DevOps Pools — usa pools gerenciados por Azure com imagens de VM personalizadas.
Agendamento de verificação
Selecione quando as verificações de instalação padrão do CodeQL forem executadas para todos os repositórios na organização. Você pode escolher um dia específico da semana para verificações semanais. A próxima data de execução agendada é exibida abaixo da lista suspensa.
Cancelar verificações em execução ou enfileiradas
Se você precisar parar qualquer verificação de configuração padrão em execução ou enfileirada ativamente, poderá cancelá-las manualmente por meio de Configurações da Organização>Repositórios. Usuários com a permissão Segurança Avançada: gerenciar configurações no repositório podem cancelar execuções padrão de configuração em execução ou em fila.
Configuração avançada para verificação de código
CodeQL é uma ferramenta baseada em pipeline, em que os resultados são agregados por repositório.
Dica
A verificação de código pode ser uma tarefa de build que pode consumir mais tempo, portanto, recomendamos que você adicione a tarefa de verificação de código a um pipeline clonado e separado do pipeline de produção principal ou crie um novo pipeline.
Adicione as tarefas na seguinte ordem:
- Inicialização do CodeQL com Segurança Avançada (AdvancedSecurity-Codeql-Init@1)
- Suas etapas de compilação personalizada
- Executar Segurança Avançada de Análise do CodeQL (AdvancedSecurity-Codeql-Analyze@1)
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. As linguagens com suporte são csharp, cpp, go, java, javascript, python, ruby, swift. Se você estiver utilizando agentes auto-hospedados, também poderá adicionar a enableAutomaticCodeQLInstall: true variável para instalar automaticamente os bits CodeQL mais recentes para o agente.
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
# 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 o idioma especificado for swift, serão necessárias etapas de build personalizadas.
Dica
- Use
javapara analisar o código escrito em Java, Kotlin ou ambos. - Use
javascriptpara analisar o código escrito em JavaScript, TypeScript ou ambos.
Se você estiver executando em um agente auto-hospedado, selecione Enable automatic CodeQL detection and installation para usar automaticamente os bits CodeQL mais recentes em seu agente se você não instalou manualmente o pacote CodeQL mais recente no cache de ferramentas do agente.
Para gerar alertas, execute sua primeira análise utilizando um pipeline com as tarefas de análise de código incluídas.
Mais configurações para verificação de código
Suporte a consulta e linguagem
GitHub especialistas, 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 regularmente atualizadas para melhorar a análise e reduzir quaisquer resultados falso-positivos. As consultas são código aberto, para que você possa exibir e contribuir com as consultas no repositório github/codeql.
O CodeQL oferece suporte e usa os seguintes identificadores de linguagem:
| Linguagem | Identificador |
|---|---|
| C/C++ | cpp |
| C# | csharp |
| Go | go |
| Java/Kotlin | java |
| JavaScript/TypeScript | javascript |
| Python | python |
| Ruby | ruby |
| Swift | swift |
Dica
- Use
cpppara analisar o código escrito em C, C++ ou ambos. - Use
javapara analisar o código escrito em Java, Kotlin ou ambos. - Use
javascriptpara 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.
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 CodeQL é criado diretamente da base de código sem criar a base de código (com suporte para todos os idiomas interpretados e, além disso, tem suporte paracpp,javaecsharp). -
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.
Dica
O modo de build none é utilizável com outras linguagens interpretadas, por exemplo, JavaScript, Python, Ruby.
Se o modo de build none for especificado para C# ou Java com outros idiomas compilados que não dão suporte ao modo de build 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 build:
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 build:
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
Alertas de varredura de código do GitHub Advanced Security para Azure DevOps incluem sinalizações de varredura de código por repositório que alertam sobre vulnerabilidades em nível de código da aplicação.
Para usar a verificação de código, primeiro você precisa configurar GitHub Advanced Security para Azure DevOps.
A guia Segurança Avançada em Repos em 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.
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 falhará, mas os resultados de builds executados com a tarefa enquanto a Segurança Avançada estiver desabilitada estão ocultos e não foram armazenados.
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.
| Seção | Explicação |
|---|---|
| Localização | 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 de Localizações contém um link direto para o snippet de código afetado, permitindo que você selecione o snippet para ser redirecionado à 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 verificação de código. |
| Exemplo | A seção de exemplo mostra um exemplo simplificado da fraqueza identificada em seu código. |
| Severidade | 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 Repos. 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 análise de código para o branch 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 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:
- Navegue até o alerta que você deseja fechar e selecione no alerta.
- Selecione a lista suspensa Fechar alerta .
- Se ainda não estiver selecionado, selecione Risco aceito ou Falso positivo como o motivo do fechamento.
- Adicione um comentário opcional à caixa de texto Comentário .
- Selecione Fechar para enviar e fechar o alerta.
- O estado de alerta muda de Abrir para Fechado e seu motivo de demissão é exibido.
Essa ação descarta o alerta em todas as ramificações. Outras ramificações que contêm a mesma vulnerabilidade também serão descartadas. 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 alertas forem criados 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 solicitação de pull da guia Visão geral e como um alerta na guia Repositório de segurança avançada. Há uma nova entrada de seletor de ramificação para a ramificação da solicitação de pull.
É possível analisar as linhas de código afetadas, ver um resumo da descoberta e resolver a anotação na seção Visão geral.
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 nem corrige o alerta subjacente.
Para ver todo o conjunto de resultados da ramificação de solicitação de pull, navegue até Repos>Advanced Security e selecione seu branch de solicitação de pull. Ao selecionar Mostrar mais detalhes (2) na anotação, será aberta a exibição de detalhes do alerta na guia Segurança Avançada.
Dica
As anotações só são criadas quando as linhas de código afetadas são totalmente exclusivas para a diferença de solicitação de pull em comparação com a ramificação de destino da solicitação de pull.