Skip to main content

Como usar consultas personalizadas com a CLI do CodeQL

Você pode escrever as próprias consultas do CodeQL para encontrar vulnerabilidades e erros específicos.

Quem pode usar esse recurso?

O CodeQL do GitHub é licenciado por usuário após a instalação. Você pode usar o CodeQL somente para determinadas tarefas sob as restrições de licença. Para obter mais informações, confira "Sobre a CLI do CodeQL".

Se você tiver uma licença do GitHub Advanced Security, poderá usar o CodeQL para análise automatizada, integração contínua e entrega contínua. Para obter mais informações, confira "Sobre a Segurança Avançada do GitHub".

Sobre consultas personalizadas e a CodeQL CLI

Você pode personalizar as análises do CodeQL escrevendo as próprias consultas para realçar vulnerabilidades ou erros específicos.

Este tópico trata especificamente da criação de consultas a serem usadas com o comando database analyze para produzir os resultados interpretados.

Observação: as consultas executadas com database analyze têm requisitos estritos de metadados. Você também pode executar consultas usando os seguintes subcomandos no nível do plumbing:

  • database run-queries, que gera resultados não interpretados em um formato binário intermediário chamado BQRS.
  • query run, que produzirá arquivos BQRS ou imprimirá tabelas de resultados diretamente na linha de comando. Pode ser útil ver os resultados diretamente na linha de comando no caso de desenvolvimento de consultas iterativas usando a CLI.

As consultas executadas com esses comandos não têm os mesmos requisitos de metadados. No entanto, para salvar dados legíveis por humanos, você precisa processar cada arquivo de resultados BQRS usando o subcomando de conexão de bqrs decode. Portanto, para a maioria dos casos de uso, é mais fácil usar a análise de banco de dados para gerar diretamente resultados interpretados.

Como gravar uma consulta válida

Antes de executar uma análise personalizada, você precisa escrever uma consulta válida e salvá-la em um arquivo com uma extensão .ql. Há uma documentação abrangente disponível para ajudar você a escrever consultas. Para obter mais informações, confira "Consultas do CodeQL".

Como incluir metadados de consulta

Os metadados de consulta são incluídos na parte superior de cada arquivo de consulta. Ele fornece aos usuários informações sobre a consulta e informa à CodeQL CLI como processar os resultados da consulta.

Ao executar consultas com o comando database analyze, você precisa incluir estas duas propriedades para garantir que os resultados sejam interpretados corretamente:

  • Identificador de consulta (@id): uma sequência de palavras composta por letras minúsculas ou dígitos, delimitadas por / ou -, identificando e classificando a consulta.

  • Tipo de consulta (@kind): identifica a consulta como um alerta simples (@kind problem), um alerta documentado por uma sequência de locais de código (@kind path-problem), para solução de problemas do extrator (@kind diagnostic) ou uma métrica de resumo (@kind metric e @tags summary).

Para obter mais informações sobre essas propriedades de metadados, confira "Metadados para consultas do CodeQL" e o Guia de estilo de metadados de consulta.

Observação: os requisitos de metadados poderão ser diferentes se você quiser usar a consulta com outros aplicativos. Para obter mais informações, confira "Metadados para consultas do CodeQL".

Como empacotar consultas QL personalizadas

Observação: a funcionalidade de gerenciamento de pacote do CodeQL, incluindo pacotes do CodeQL, está em versão beta no momento e sujeita a alterações. Durante a versão beta, os pacotes CodeQL estão disponíveis apenas usando pacotes GitHub – o Container registry. Para usar essa funcionalidade beta, instale a versão mais recente do pacote da CodeQL CLI de: https://github.com/github/codeql-action/releases.

Ao escrever as próprias consultas com a intenção de compartilhá-las com outras pessoas, você deve salvá-las em um pacote personalizado do CodeQL. Você pode publicar o pacote como um pacote do CodeQL no GitHub Packages – O Container registry do GitHub. Para obter mais informações, confira "Como personalizar a análise com pacotes CodeQL".

Os pacotes do CodeQL organizam os arquivos usados na análise do CodeQL e podem armazenar consultas, arquivos de biblioteca, conjuntos de consultas e metadados importantes. O diretório raiz precisa conter um arquivo chamado qlpack.yml. As consultas personalizadas devem ser salvas na raiz do pacote do CodeQL ou nos respectivos subdiretórios.

Para cada pacote do CodeQL, o arquivo qlpack.yml inclui informações que dizem à CodeQL CLI como compilar as consultas, de quais outros pacotes e bibliotecas do CodeQL o pacote depende e onde encontrar as definições do conjunto de consultas. Para obter mais informações sobre o que incluir neste arquivo, confira "Como personalizar a análise com pacotes CodeQL".

Como incluir a ajuda de consulta para consultas personalizadas do CodeQL em arquivos SARIF

Se você usar a CodeQL CLI para executar análises de verificação de código em sistemas de CI/CD de terceiros, poderá incluir a ajuda de consulta nas consultas personalizadas nos arquivos SARIF gerados durante uma análise. Depois de carregar o arquivo SARIF no GitHub, a ajuda de consulta será mostrada na interface do usuário de verificação de código para os alertas gerados pelas consultas personalizadas.

Da CodeQL CLI v2.7.1 em diante, você pode incluir a ajuda de consulta renderizada por markdown em arquivos SARIF fornecendo a opção --sarif-add-query-help ao executar codeql database analyze.

Você pode escrever uma ajuda de consulta para consultas personalizadas diretamente em um arquivo markdown e salvá-la junto com a consulta correspondente. Como alternativa, para consistência com as consultas padrão do CodeQL, você pode escrever a ajuda de consulta no formato .qhelp. A ajuda de consulta escrita em arquivos .qhelp não pode ser incluída em arquivos SARIF e não pode ser processada pela verificação de código, portanto, precisa ser convertida em markdown antes da execução da análise. Para obter mais informações, confira "Arquivos de ajuda de consulta" e "Como testar arquivos de ajuda de consulta".

Como contribuir para o repositório do CodeQL

Se você quiser compartilhar a consulta com outros usuários do CodeQL, abra uma solicitação de pull no repositório do CodeQL. Para obter mais informações, confira Como contribuir para o CodeQL.

Leitura adicional