Configuração avançada do CodeQL
Ao ativar o CodeQL, você tem a opção de selecionar a configuração "Padrão" ou "Avançada". Embora recomendemos usar a configuração padrão sempre que possível, há casos de uso em que você precisará usar a configuração avançada. Mais comumente, talvez seja necessário especificar um processo de compilaçãopersonalizado, adicionar ou remover consultas ou excluir diretórios de uma verificação. Veja por que a KPMG decidiu usar a Configuração Avançada:
Além de precisar de dependências externas para nossas compilações, habilitamos a configuração avançada na KPMG porque percebemos o benefício de usar o CodeQL não apenas para segurança, mas também para qualidade do código. As revisões de pull request são ótimas, mas limitadas. Usamos várias ferramentas automatizadas de linting e qualidade de código, mas descobrimos que nenhuma ferramenta detecta tudo. O pacote de consulta de segurança e qualidade do GitHub nos ajuda a detectar coisas que não detectaríamos de outra forma. Também escrevemos algumas consultas personalizadas para promover nossos próprios padrões e estilo, alertando os desenvolvedores quando eles fazem commit do código, em vez de pedir que façam alterações em algum momento arbitrário no futuro. Já vimos uma grande melhoria na qualidade do código.
O GitHub tentará construir aplicações automaticamente como parte de uma varredura de CodeQL, mas a action autobuilder nem sempre será capaz de criar todas as aplicações com êxito. O Web Goat, por exemplo, requer uma construção personalizada para chamar o Maven.
Na próxima etapa, vamos começar adicionando instruções de construção personalizadas para o Web Goat neste guia e alterar nossas consultas de CodeQL e excluir diretórios.
Neste guia, você aprenderá:
Quando usar a configuração avançada do CodeQL em vez da configuração padrão
Como editar um arquivo de configuração de CodeQL
Como definir instruções de construção personalizadas para o CodeQL
1. Adicione instruções de construção personalizadas ao CodeQL com configuração avançada.
Normalmente, o CodeQL é executado e gerenciado por meio de GitHub Actions usando a ação CodeQL. Assim como você faria com qualquer outra ação, a configuração avançada do CodeQL é chamada e gerenciada com um arquivo de fluxo de trabalho escrito em YAML. Quando você usa a configuração padrão, esse arquivo YAML fica oculto e é gerenciado nos bastidores. Para uma configuração avançada, precisaremos criar nosso próprio arquivo de fluxo de trabalho.
Crie fork para o repositório do Web Goat em uma organização com GHAS habilitado, caso ainda não o tenha feito. Se você ainda não habilitou GitHub Actions para o repositório, clique em Settings abaixo do nome do repositório. Se não for possível ver a guia Actions selecione o menu suspenso “...” e clique em Actions. Clique no botão que diz I understand my workflows, go ahead and enable them.
Vá para a guia Settings do seu repositório Web Goat.
Na barra lateral, em Settings, selecione Code security and analysis.
Se você não ativou o CodeQL anteriormente, encontre o cabeçalho da varredura de código e selecione o menu suspenso Set up. Você verá uma escolha entre Default ou Advanced. Selecione Advanced.
Se você já ativou o CodeQL com as configurações padrão, selecione o menu etiquetado "...", e, em seguida, selecione Switch to advanced. Selecione Disable CodeQL quando selecionado. Não se preocupe, iremos reativá-lo depois de concluirmos o processo de configuração avançada.
Depois de selecionar ou mudar para avançado, você será levado a um arquivo de fluxo de trabalho do GitHub Actions chamado codeql.yml
. Você pode encontrá-lo no diretório /.github/workflows
do seu repositório Web Goat. Este é o arquivo que usamos para executar e configurar o CodeQL.
As seguintes linhas no final do arquivo codeql.yml
executam o autobuilder:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
Remova-os e substitua-os pelo seguinte:
- if: matrix.language == 'java'
name: Set up java 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 17
architecture: x64
- if: matrix.language == 'java'
name: Build with Maven
run: mvn -B package --file pom.xml
Este fluxo de trabalho simples tentará construir a aplicação com o Maven, em vez do autobuilder.
Faça commit disso no branch principal.
2. Verifique os resultados.
Agora abra a guia Actions do repositório. Deverá ter dois trabalhos de análise de CodeQL em execução, um para Java e outro para JavaScript. Ambos devem funcionar desta vez.
Quando o trabalho for concluído, vá para a guia Security dos repositórios e selecione a seção Code scanning no menu à esquerda.
No topo desta página, deve haver uma notificação de status para informar que o CodeQL está funcionando.
Devemos agora ver mais resultados do que antes porque teremos vulnerabilidades de Java além das vulnerabilidades de JavaScript exibidas da última vez. Você pode ver mais informações selecionando Tool status. Se o trabalho Java falhar, verifique novamente o recuo e o espaçamento.
A seguir: Ajuste o escopo de teste com CodeQL
Agora que temos uma configuração avançada para trabalhar, vamos abordar as outras duas tarefas de configuração avançada mais comuns do CodeQL: alterar as consultas que executamos e excluir diretórios.