DEV Community

loading...
Cover image for DevOps Quicktips - Criando um pipeline para verificação de segurança em projetos Golang utilizando gosec no Gitlab.

DevOps Quicktips - Criando um pipeline para verificação de segurança em projetos Golang utilizando gosec no Gitlab.

figur8 profile image Figur8 ・3 min read

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 ./...
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 ./...
Enter fullscreen mode Exit fullscreen mode

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
Alt Text

E você receberá um log como este:
Alt Text

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.
Alt Text

Após entender o problema e corrigir a falha, o seu pipeline deve dar sucesso:
Alt Text

E você deve receber um log como este:
Alt Text

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.
Alt

Discussion (0)

pic
Editor guide