Umas das práticas DevOps mais utilizadas pelos times ágeis é o CI/CD (Continuous Integration e Continuous Delivery) onde os times têm a capacidade de entregar uma nova versão do seu software de forma automatizada a qualquer momento. Essa prática concede aos times agilidade, consistência e repetibilidade nas entregas. Por outro lado, temos que nos preocupar com a segurança do código entregue.
O GitHub possui algumas funcionalidades que auxiliam os times de desenvolvimento:
- Code Scanning: Recurso para analisar o código e localizar possíveis vulnerabilidades de segurança e erros de codificação.
- Secret Scanning: Detectar automaticamente segredos (Senhas, tokens, etc) vazados em todos os repositórios públicos e privados.
- Dependabot: Ver alertas sobre dependências conhecidas por conter vulnerabilidades de segurança e escolher se deseja gerar pull requests para atualizar essas dependências automaticamente.
Nesse artigo vamos ver como funciona o Code Scanning e como podemos habilitá-lo em um repositório GitHub.
Code scanning
Code scanning é um recurso que você usa para analisar o código em um repositório de GitHub para localizar possíveis vulnerabilidades de segurança e erros de codificação. Se a varredura de código encontrar uma vulnerabilidade potencial ou erro no seu código, o GitHub exibirá um alerta no repositório, que será desativado quando o time corrigir o problema.
É possível integrar com o GitHub Actions para automatizar e agendar as verificações ou acionar quando ocorre um evento específico no repositório, como por exemplo um push, pull request, etc.
O code scanning utiliza o CodeQL que é o mecanismo de análise de código desenvolvido pelo GitHub para automatizar verificações de segurança. Você pode criar as suas próprias consultas, mas o time do GitHub e contribuidores da comunidade disponibilizam um conjunto de consultas que você pode reutilizar e executar em seu repositório. Elas são regularmente atualizadas para melhorar a análise e reduzir quaisquer resultados falso-positivos. Como são de código aberto, você pode analisar e contribuir para as consultas no repositório github/codeql.
Atualmente o CodeQL suporta as linguagens C/C++, C#, Go, Java, JavaScript/TypeScript, Python e Ruby.
O Code scanning está disponível para todos os repositórios públicos e para repositórios privados pertencentes a organizações em que possuem a funcionalidade GitHub Advanced Security habilitado.
Para habilitar, você precisa acessar o menu Settings -> Code security and analysis e habilitar a opção GitHub Advanced Security
Após devemos configurar o Code scanning clicando no botão Set up. O GitHub irá criar um arquivo codeql.yml que conterá um workflow de execução para analisar todos os arquivos do seu repositório. Abaixo podemos ver o arquivo criado em nosso repositório.
Nesse workflow criado devemos configurar quais linguagens que vamos analisar, conforme abaixo.
strategy:
fail-fast: false
matrix:
language: [ 'csharp', 'javascript' ]
Por default o workflow foi criado com o gatilhos que será disparado quando houver uma alteração na branch main, um pull request para a branch main ou por agendamento.
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '19 23 * * 1'
Salve o arquivo codeql.yml
em seu repositório e veja que automaticamente o workflow foi iniciado e seu código será analisado. Clique no menu Actions para ver a execução.
Depois que a análise for finalizada, você poderá acessar todos os detalhes clicando na aba Security -> Code scanning alerts. O resultado será agrupado por severidade, branch, tipo da regra, etc.
Ao clicar em algum alerta, poderemos ver o detalhes daquele alerta e também a recomendação para solucionar o problema em nosso código.
Também é possível marcar o alerta como um falso/positivo ou como não precisa arrumar.
Outra funcionalidade é abrir uma issue para fazer o acompanhamento da resolução desse alerta, e repassar para um membro do time.
Caso você queira ver todas as regras disponíveis, veja o link da documentação https://codeql.github.com/codeql-query-help/.
O code scanning é uma funcionalidade poderosa que o GitHub oferece para ajudar os times de desenvolvimento a manterem de seus códigos seguro proativa e automaticamente. Nos próximos artigos vamos ver como utilizar o secret scanning. Não percam!
Até a próxima!