Como o CodeQL analisa o código?

Concluído

A implementação da varredura de código com o CodeQL requer uma compreensão de como a ferramenta analisa o código.

Uma análise do CodeQL consiste em três etapas:

  1. Preparando o código criando um banco de dados CodeQL.
  2. Executar consultas CodeQL no banco de dados.
  3. Interpretar os resultados da consulta.

Nesta unidade, você aprenderá sobre as três fases da análise do CodeQL.

Criação do banco de dados

Para criar um banco de dados, o CodeQL primeiro extrai uma única representação relacional de cada arquivo de origem na base de código.

Para linguagens compiladas, a extração funciona monitorando o processo normal de compilação. Cada vez que um compilador é chamado para processar um arquivo fonte, uma cópia desse arquivo é feita e todas as informações relevantes sobre o código fonte são coletadas. Isso inclui dados sintáticos sobre a árvore de sintaxe abstrata e dados semânticos sobre a associação de nome e informações de tipo.

Para linguagens interpretadas, o extrator é executado diretamente no código-fonte, resolvendo dependências para dar uma representação precisa da base de código.

Há um extrator para cada idioma compatível com o CodeQL para garantir que o processo de extração seja o mais preciso possível. Para bases de código de várias linguagens, os bancos de dados são gerados em uma linguagem de cada vez.

Após a extração, todos os dados necessários para análise (dados relacionais, arquivos de origem copiados e um esquema de banco de dados específico da linguagem, que especifica as relações mútuas nos dados) são importados para um só diretório, conhecido como banco de dados do CodeQL.

Execução da Consulta

Depois de criar um banco de dados CodeQL, uma ou mais consultas serão executadas nele. As consultas CodeQL são escritas em uma linguagem de consulta orientada a objeto especialmente projetada chamada QL.

Você pode executar as consultas verificadas no repositório CodeQL (ou consultas personalizadas que você mesmo escreveu) usando a extensão CodeQL para VS Code ou a CLI do CodeQL.

Resultados da consulta

A etapa final converte os resultados produzidos durante a execução da consulta em um formulário mais significativo no contexto do código-fonte, o que significa que os resultados são interpretados de maneira que realça o problema potencial que as consultas foram projetadas para localizar.

Captura de tela dos resultados de consulta do CodeQL.

As consultas contêm propriedades de metadados que indicam como os resultados devem ser interpretados. Por exemplo, algumas consultas exibem uma mensagem simples em um único local no código. Outras exibem uma série de locais que representam etapas ao longo de um fluxo de dados ou caminho de fluxo de controle, juntamente com uma mensagem explicando o significado do resultado. Consultas que não têm metadados não são interpretadas; seus resultados são gerados como uma tabela e não são exibidos no código-fonte.

Após a interpretação, os resultados são gerados para revisão e triagem de código. No CodeQL para Visual Studio Code, os resultados de consulta interpretados são exibidos automaticamente no código-fonte. Você pode expor os resultados gerados pela CLI do CodeQL em vários formatos diferentes para uso com ferramentas diferentes.