Análise SAST com SonarQube – DevSecOps

Análise SAST com SonarQube – DevSecOps

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 4Linux participará de evento de tecnologia organizado pela Caixa Econômica Federal
Próxima Instalação do MySQL 8 em Debian e CentOS

About author

Alisson Machado
Alisson Machado 19 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

Eventos

4Linux está presente no evento TDC São Paulo 2019.

Ministrando palestras ou coordenando trilhas, estaremos expondo nosso expertise em algumas áreas. Acontece em São Paulo entre os dias 16 e 20 de julho de 2019 o TDC ( The

DevOps

DevOps – o que é e quais são seus benefícios?

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

DevOps

Sincronizando dados do PostgreSQL no Elasticsearch

Recebi a missão de gerar relatórios e estatísticas com os dados do Moodle. Porém, o LMS trabalha somente com bancos de dados relacionais como PostgreSQL e MySQL. O ambiente que