Insights sobre Sonarqube & Snyk
Durante a fase do ciclo de desenvolvimento de um software, temos que cada vez mais colocarmos a segurança como uma dessas etapas.
Uma das etapas mais simples, é utilizando uma ferramenta de SAST (Teste Estático do Código). Essa ferramenta, tem como objetivo alertar algo que poderia passar batido pelos desenvolvedores, durante um code review ou no momento da codificação. Assim, cada vez mais, devemos escolher que ferramentas podem nos ajudar nessa etapa e também, nos precaver da melhor maneira possível sobre falsos positivos.
Dessa forma, resolvi trazer duas ferramentas que funcionam bem na esteira DevSecOps e possuem parte open-source.
Sonarqube
É uma ferramenta muito utilizada, principalmente pelas pessoas que utilizam o Jenkins como integrador de pipeline. É uma ferramenta que faz análise estática, como também, analisa a qualidade do código que está muito relacionado ao Clean Code.
Snyk
É uma ferramenta que está muito direcionada para área de segurança e que está trazendo análise estática para linguagens cada vez mais recentes, como Golang.
Agora, vamos ao nosso teste
Resolvi utilizar como padrão, um código que criei com algumas vulnerabilidades para observar o comportamento dessas ferramentas.
Para fazer o teste com Sonarqube, utilizei um ambiente Docker.
→ Comando para inicializar o ambiente:
docker run -d -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
Após isso, utilizei o usuário e senha padrão do Sonarqube ("admin") e depois, adicionei alguns passos para poder rodar o código localmente, ou seja, na minha máquina. Portanto, utilizei a opção "manually".
Então, tive que escolher um nome para o meu projeto. Esse nome depois terá que ser utilizado nas propriedades do Sonarqube (na pasta do código) e em seguida, criei um nome para o token referente ao projeto.
Feito isso, ele pergunta qual a linguagem utilizada nesse projeto.
Por fim, ele pergunta o sistema operacional utilizado por você e demonstra o comando necessário para rodar o integrador do Sonar.
Você tem diversas maneiras de executar esse integrador para que ele possa analisar o código e enviar a resposta à aplicação WEB.
Aqui, temos maiores detalhes:
A solução mais rápida, é utilizando o container que já possui essa ferramenta. Deixarei o comando que executei. No entanto, será necessário mudar o token de acordo com o que vemos em "sonar.login". Além disso, na pasta em que se encontra o projeto, será necessário criar esse arquivo sonar-project.properties
,apontar o diretório em que o mesmo se encontra e trocar o nome do projeto em sonar.projectKey, de acordo para o seu 😊
docker run — rm -e SONAR_HOST_URL=http://10.0.1.10:9000 -e SONAR_LOGIN=b7f22a38748faba61742c71e3da5b780595cc5c0 -v /Users/mac/Desktop/python-app/sonar:/usr/src sonarsource/sonar-scanner-cli
Outro ponto importante, em SONAR_HOST_URL, você deve adicionar o seu IP com a porta referente ao Sonarqube. Isso acontece porque os containers possuem redes diferentes e a forma deles estarem na mesma rede, é eles utilizando o host (sua rede ambiente local).
Feito isso, você verá algo mais ou menos assim:
Aqui, já encontramos um problema. Ele diz que o código passou pela política interna de segurança (podemos mudar essas regras posteriormente). No entanto, se olharmos os pontos de segurança, ele diz que poderia ter um CSRF e nessa aplicação, temos claramente um XSS que não está sendo reportado.
Agora, indo para o Snyk, podemos configurar instalando um plugin no Visual Code e posteriormente, autenticando o plugin com alguma conta. Como por exemplo, com o Github.
Existem outras maneiras, como por exemplo, com o próprio Docker.
Quando inicializamos o scan Estático, ele logo nos retorna esses 2 resultados que foram condizentes com a análise Dinâmica da aplicação que desenvolvi :) Principalmente, o XSS refletido.
Portanto, devemos sempre analisar as ferramentas, principalmente quando estamos usando a versão gratuita para ver qual que irá se adequar melhor no dia-a-dia de vocês.
Outro ponto importante, na versão paga do Sonarqube, ele permite adicionar diversos plugin. Isso é algo que torna um grande diferencial dele, principalmente para geração de reports.
Espero que tenham gostado dessas informações 💜