DevSecOps: Como usar o SonarQube para análise de vulnerabilidades
Quando falamos de DevSecOps, estive um termo chamado Shift Left, que consiste em analisar questões de segurança desde o inicio do desenvolvimento de uma aplicação, ao invés do modelo tradicional que a segurança só era testada no final.
Ao fazer essas análises de segurança dentro de uma pipeline DevOps, temos duas que são conhecidas como SAST ( Static Application Security Testing ) e DAST ( Dynamic Application Security Testing ).
SAST – tem como objetivo analisar o código fonte de uma aplicação e prever ameaças antes mesmo da aplicação ter sido construída.
DAST – tem como objetivo analisar a aplicação já construída, ou seja, é feito o deploy dessa aplicação e depois feitos uma série de testes como SQL Injection, XSS, CSRF e entre outras.
Nesse post vou explicar como podemos utilizar a ferramenta SonarQube para fazer a análise de vulnerabilidades a partir do código fonte de uma aplicação e como é possível interromper a esteira de execução do Jenkins caso o número de vulnerabilidades seja maior do que um valor já pré-definido.
Agora vamos subir um ambiente de testes utilizando o Vagrant, nele vou subir duas máquinas, sendo elas: Jenkins e Docker.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.define "jenkins" do |jenkins|
jenkins.vm.network "private_network", ip: "192.168.33.10"
jenkins.vm.provider "virtualbox" do |vb|
vb.memory = 2048
end
jenkins.vm.provision "shell", inline: <> /etc/apt/sources.list
apt-get update
apt install openjdk-8-jre -y
apt-get install jenkins -y --allow-unauthenticated
SHELL
end
config.vm.define "docker-centos" do |docker|
docker.vm.box = "centos/7"
docker.vm.network "private_network", ip: "192.168.33.11"
docker.vm.provider "virtualbox" do |vb|
vb.memory = 2048
end
docker.vm.provision "shell", inline: <<-SHELL
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge
yum install docker-ce epel-release git -y
#systemctl enable docker
#systemctl start docker
SHELL
end
end
Criar um arquivo chamado Vagrantfile com o conteúdo acima e depois digite o comando: vagrant up para provisionar as duas máquinas.
Quando a máquina docker-centos estiver no ar, faça o deploy de um container de sonarqube utilizando a linha abaixo:
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
Com o container já em execução acesse no navegador:
O usuário e senha são: admin / admin
Faça a criação do token e defina a linguagem do projeto, parecido com a imagem abaixo:

Agora que já temos o projeto e token do usuário criados, vamos para a parte de configuração do jenkins:
Acesse: Manage Jenkins > Manage Plugins e instale o plugin sonarqube scanner.

Agora Configure o jenkins com o caminho onde está instalado o sonarqube.

Configure também para baixar o SonarScanner.

Agora crie uma job do tipo Freestyle chamada SAST, vincule um repositório git:

E adicione um step com o SonarScanner:

Defina o nome do projeto a ser analisado.

Salve e execute a job.
Se executada com sucesso, a saída será parecida com essa:

A mensagem ERROR, aparece pois o projeto que vinculei, não passou nos Quality Gates do sonar, para ver o report da análise, é só acessar a interface do Sonar e ver o status do projeto que deve ter ficado parecido com a imagem abaixo:

Esse é um overview da análise estática do projeto, no nosso caso como o foco é segurança, vamos analisar a parte de vulnerabilidades, pois uma foi encontrada.
Ao clicar em vulnerabilidade será listada uma tela parecida com a imagem abaixo:

Nela podemos ver a vulnerabilidade encontrada, corrigi-la e depois executar a análise estática de novo.
About author
Você pode gostar também
Atualização do Curso WildFly: Administração com Cluster de Alta Performance em ambiente DevOps da 4Linux
O mundo das aplicações corporativas em Java está em constante evolução — e a administração do servidor WildFly também precisa acompanhar esse ritmo! Pensando nisso, a 4Linux atualizou o curso
Domine o Jenkins: Crie Pipelines eficientes com Jenkinsfile e Groovy
O Jenkinsfile é a maneira mais recomendada para criar Pipelines no Jenkins. Utilizando as melhores práticas, podemos colocar o arquivo na raiz de um repositório Git. Essa técnica nos permite
Guia prático: Configurando a fila Dead Letter Queue no Logstash
O Logstash é um pipeline de processamento de dados do lado do servidor de código aberto que ingere dados de várias fontes, transforma-os simultaneamente e os envia para seu “stash”







