Compartilhar via


Solucionar problemas de varredura de código

Geralmente, se você estiver encontrando erros com a execução do CodeQL, a CLI do CodeQL relatará o status de cada comando executado como um código de saída. O código de saída fornece informações para comandos subsequentes ou para outras ferramentas que dependem da CLI do CodeQL. Para obter mais informações sobre os detalhes do código de saída, confira Códigos de saída.

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 Administradores de Coleção de Projetos ou Segurança Avançada: gerenciar a permissão de configurações definida como Permitir.

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

Erro: comando 'database finalize' do CodeQL (32)

Esse erro indica um problema com a finalização da criação do banco de dados CodeQL, possivelmente devido a erros de extração ou a etapas de compilação ausentes.

Etapas de solução de problemas:

  1. Verificar se o código existe e se foi compilado
    • Para linguagens compiladas, verifique se o processo de compilação está compilando código e está acontecendo entre as tarefas AdvancedSecurity-Codeql-Init e AdvancedSecurity-Codeql-Analyze. Comandos de compilação comuns e sinalizadores obrigatórios (como limpar no-cache/no-daemon) podem ser encontrados aqui em Especificando comandos de compilação.
    • Para idiomas interpretados, confirme se há algum código-fonte para o idioma especificado no projeto.
  2. Verificar erros de extração
    • Verifique se os erros de extração afetam a integridade do banco de dados CodeQL.
    • Examine o arquivo de log em busca de erros de extração e avisos a fim de avaliar a integridade geral do banco de dados.
  3. Investigar erros avassaladores
    • Se a maioria dos arquivos encontrar erros de extrator, investigue minuciosamente para entender a causa raiz da extração inadequada.

Erro: script de compilação automática (1)

Esse erro descreve uma falha de compilação automática, sugerindo um problema com a instalação ou configuração da verificação de código.

Etapas de solução de problemas:

Erro: Diretórios CodeQL não encontrados no cache da ferramenta do agente

Esse erro indica um problema com a instalação do CodeQL para agentes auto-hospedados.

Etapas de solução de problemas:

Erro: variável do pipeline de linguagem não definida

Esse erro ocorre ao tentar executar o CodeQL sem definir a variável do pipeline especificando quais linguagens serão verificadas.

Etapas de solução de problemas:

  • Definir variável do pipeline de linguagem
    • Verifique se a variável do pipeline de linguagem está configurada corretamente. Consulte as diretrizes de instalação fornecidas em Configurar o GitHub Advanced Security para Azure DevOps.
    • As linguagens permitidas são csharp, cpp, go, java, javascript, python, ruby e swift.

CodeQL não retorna resultados

Esta seção fornece orientação para situações em que a análise do CodeQL não produz resultados.

Etapas de solução de problemas:

  1. Verificar vulnerabilidades detectadas
    • Considere a possibilidade de seu código não ter nenhuma vulnerabilidade. Se vulnerabilidades forem esperadas, mas não detectadas, prossiga para fazer outras verificações.
  2. Revisar a configuração do pacote de consultas
    • Confirme o conjunto de consultas que está sendo usado e considere mudar para um pacote mais abrangente, se necessário.
    • Como alternativa, pacotes de consultas personalizados podem ser criados para análise personalizada.
  3. Ajustar permissões para exibir resultados
    • Certifique-se de que permissões adequadas, pelo menos no nível do colaborador, sejam concedidas para acessar os resultados da análise. Para obter mais informações, consulte: Permissões de segurança avançada.

CodeQL expirando

Se a AdvancedSecurity-Codeql-Analyze@1 tarefa estiver sendo This job was abandoned ... we lost contact with the agent exibida e você estiver usando um agente da Microsoft hospedado, a tarefa atingirá o tempo limite interno de seis horas para agentes hospedados pagos. Em vez disso, você pode tentar executar a análise em um agente auto-hospedado.

Permissões de tarefa de verificação de código

A tarefa de build de verificação de código usa a identidade do pipeline para chamar as APIs REST de Segurança Avançada. Por padrão, os pipelines no mesmo projeto têm acesso para carregar o arquivo SARIF gerado executando a análise do CodeQL. Se essas permissões forem removidas da conta de serviço de build ou se você tiver uma configuração personalizada, por exemplo, um pipeline hospedado em um projeto diferente do repositório, conceda essas permissões manualmente.

Etapas de solução de problemas:

  • Conceda as permissões Advanced Security: View alerts e Advanced Security: Manage and dismiss alerts à conta de serviço de build usada em seu pipeline, que para pipelines com escopo de projeto é [Project Name] Build Service ([Organization Name]), e para pipelines com escopo de coleção é Project Collection Build Service ([Organization Name]).

Publicação dos resultados da análise de código no repositório não desejado

Se você tiver uma definição de pipeline alojada em um repositório e o código-fonte a ser verificado pelo GitHub Advanced Security estiver em outro, os resultados poderão ser processados e enviados para o repositório incorreto, publicando no repositório que contém a definição do pipeline em vez do repositório de código-fonte.

Para habilitar o roteamento dos resultados esperados, defina a variável de ambiente do pipeline advancedsecurity.publish.repository.infer: true para inferir o repositório a ser publicado a partir do repositório no diretório de trabalho.

trigger:
  - main

resources:
  repositories:
    # PipelineRepo: The repository containing the pipeline definition.
    # This is optional and only needed if you plan to reference files or scripts from this repo.
    - repository: PipelineRepo
      type: git
      name: DevOpsPipelineRepo
      ref: refs/heads/main
      trigger:
        - main
    # SourceRepo: The repository where scanning and publishing will occur.
    - repository: SourceRepo
      type: git
      name: code-to-analyze-repo
      ref: refs/heads/main
      trigger:
        - main

jobs:
  - job: "CodeQLScan"
    displayName: "CodeQL Scanning with Inferred Publishing"
    variables:
      # Enable repository inference
      advancedsecurity.publish.repository.infer: true
    steps:
      # Checkout the SourceRepo
      - checkout: SourceRepo

      # Initialize CodeQL
      - task: AdvancedSecurity-Codeql-Init@1
        displayName: "Initialize CodeQL"
        inputs:
          languages: "python,javascript" # Adjust based on repository languages

      # Perform CodeQL analysis
      - task: AdvancedSecurity-Codeql-Analyze@1
        displayName: "Analyze Code with CodeQL"

Instalação manual do pacote CodeQL no agente auto-hospedado

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.23.5, o nome da pasta será ./CodeQL/0.0.0-v2.23.5/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-v2.23.5/x64.complete.

Como posso definir explicitamente o repositório para o qual publicar alertas de verificação de código?

  • Use a variável advancedsecurity.publish.repository.infer: true de ambiente de pipeline para inferir o repositório a ser publicado do repositório no diretório de trabalho.
  • Como outra opção, se você não fizer check-out explicitamente de um repositório ou usar um alias para fazer check-out do repositório, utilize a variável advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['YourRepositoryAlias']) ]

Para obter mais informações, verifique as notas de versão.