Durante o desenvolvimento do meu projeto pessoal para estudo em Golang(o F8ReconScope) eu tinha vontade de validar meu código e verificar coisas envolvendo segurança, da mesma forma que fazíamos no node utilizando o npm audit, então acabei caindo de paraquedas no artigo Golang Security Checker onde ele demonstra como utilizar o gosec para a verificação de CVE's no projeto Golang, a partir disso eu tentei utilizar esta ferramenta em um pipeline do meu projeto gitlab, e como não encontrei artigos sobre como fazer isso no gitlab, fiz este para ajudar caso alguém precise e para fixar o meu conhecimento.
Caso no seu projeto não possua nada envolvendo CI, crie um arquivo chamado .gitlab-ci.yml que é o arquivo que define como as etapas do CI funcionarão.
.gitlab-ci.yml
image: golang:1.14
before_script:
- wget -O - -q https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s latest
stages:
- quality
security_check:
stage: quality
script:
- ./bin/gosec ./...
Agora que você já viu por completo, vamos entender por partes o que está acontecendo neste arquivo.
image: golang:1.14
before_script:
- wget -O - -q https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s latest
Primeiro temos uma parte before_script que irá executar comandos no container de execução que determinamos na primeira linha(image: golang:1.14), sendo assim optei por deixar no before_script o processo de download do gosec utilizando o wget, porém leia a referência de configuração de pipelines do gitlab e faça o download num lugar que faça mais sentido para o seu contexto, como se trata de um projeto de estudos não me importei em usar em qualquer lugar, porém se eu estivesse fazendo mais sério iria tentar efetuar este download apenas na pipeline security_check para ser mais performático, eu também preferi baixar a versão mais nova do gosec, pois na minha cabeça faz sentido que um verificador de falhas de segurança seja sempre o mais atualizado quanto possível.
stages:
- quality
security_check:
stage: quality
script:
- ./bin/gosec ./...
A partir daqui criamos os pipelines propriamente ditos, isto fará com que durante os stages possamos executar aquilo que queremos realmente verificar, pois o nosso download irá criar uma pasta bin e dentro dele estará o executável gosec e a partir dai apenas peço para que ele execute em todo o projeto utilizando o ./..., a partir dai em caso de encontrar alguma falha, a sua pipeline irá falhar no gitlab
E você receberá um log como este:
Neste caso apresentado por exemplo, ele me avisa que estou falhando em G107 (CWE-88) e ao pesquisar um pouquinho encontrei também este material bem maneiro que é da mesma galera que criou o gosec.
Após entender o problema e corrigir a falha, o seu pipeline deve dar sucesso:
E você deve receber um log como este:
Bem, era isto o que eu queria mostrar. Até o momento era isto que eu queria mostrar, dê uma olhada no repositório do gosec para saber quais as CVE's que eles verificam e contribua com o projeto se possível e caso não seja possível pelo menos deixe uma ⭐ caso goste do projeto e lembre-se sempre que não existe bala de prata, principalmente em segurança.
Pessoal, caso tenha algo a acrescentar ou corrigir deste artigo deixe nos comentários, utilizo estes artigos para fixar conhecimento e compartilhar para os próximos, sendo assim qualquer feedback é extremamente bem-vindo grato por você ter lido até aqui \o/ e até a próxima.
Top comments (0)