Monday, April 25, 2022

Como manter meu código seguro usando o GitHub

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.

 

Configurando o Code scanning

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

 

img_01.png

 

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.

 

img_04.png

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.

 

img_07.png

 

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.

 

img_09.png

 

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.

 

img_10.png

 

Também é possível marcar o alerta como um falso/positivo ou como não precisa arrumar.

 

img_11.png

 

Outra funcionalidade é abrir uma issue para fazer o acompanhamento da resolução desse alerta, e repassar para um membro do time.

 

img_12.png

Caso você queira ver todas as regras disponíveis, veja o link da documentação https://codeql.github.com/codeql-query-help/.

 

Conclusão

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!

Posted at https://sl.advdat.com/38nmlnShttps://sl.advdat.com/38nmlnS