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: <<-SHELL
apt update
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | apt-key add -
echo "deb https://pkg.jenkins.io/debian-stable binary/" >> /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: http://192.168.33.11:9000 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.