DevSecOps: Como usar o SonarQube para análise de vulnerabilidades

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:

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.

 

CURSOSCONSULTORIA    CONTATO

Anterior Digital OpenWeek: Tendências Tecnológicas e Cultura Digital na Caixa
Próxima Guia passo a passo para instalar o MySQL em diferentes sistemas operacionais

About author

Alisson Machado
Alisson Machado 22 posts

Alisson Menezes, atua como Gerente de T.I, 9 anos de experiência em projetos FOSS (Free and Open Source Software) e Python. Formação em Análise de Sistemas pela FMU e cursando MBA em BigData pela FIA, possui certificações LPI1, LPI2 e SUSE CLA, LPI DevOps e Exim - DevOps Professional. Autor dos cursos Python Fundamentals, Python for Sysadmins, MongoDB for Developers/DBAs, DevSecOps, Co-Autor do Infraestrutura Ágil e Docker da 4Linux e palestrantes em eventos como FISL, TDC e Python Brasil. É entusiasta das mais diversas áreas em T.I como Segurança, Bancos de dados NoSQL, DataScience mas tem como foco DevOps e Automação.

View all posts by this author →

Você pode gostar também

Desenvolvimento

Como automatizar alterações no banco de dados com Phinx e DevOps

Em tempos que se fala tanto de DevOps quero te mostrar como utilizar o Phinx para efetuar alterações no seu banco de dados à medida que a sua aplicação evolui,

DevOps

Descubra o DevOps: Aumente a produtividade e qualidade na entrega de software

Provavelmente você conheça o termo DevOps e tenha dúvida sobre do que realmente se trata. Há quem defenda que se trata de uma cultura, outros apostam que seja uma metodologia, há quem

Treinamentos

Curso Especialista em Automação com Ansible: Aprenda na Prática!

Olá, para você que trabalha ou tem interesse na área DevOps! Gostaria de aprender a provisionar de forma automatizada diversos ambientes? Estamos lançando o curso Especialista em Automação com Ansible,