Sitemap
Photo by Ed Orozco on Unsplash

SonarQube para Gestão de Vulnerabilidades

Implante rapidamente o SonarQube com Docker Compose, e comece hoje mesmo garantindo a gestão eficiente de vulnerabilidades no código-fonte.

--

Hoje venho para trazer um conteúdo mais focado em segurança de aplicações, onde você pode achar muitos termos relacionados como, AppSec, SSDLC, Shift Left, DevSecOps e outros. É uma área com vasto crescimento devido à IA (Inteligência Artificial), que vem impactando de forma positiva todo o ecossistema de desenvolvimento de software. Sabemos que as etapas que integram o SDLC (Software Development Life Cycle) tem muitos benefícios, mas que também tem alguns problemas a serem resolvidos, como o grande número de informações a serem tratadas, como também os falsos positivos que são gerados.

É necessário um estudo mais detalhado de como podemos integrar segurança no ciclo de desenvolvimento, não apenas se baseando em ferramentas, mas no que queremos resolver, que é o DevSeOps fim a fim, protegendo a app, isso fica claro em dos trechos do manifesto de DevSeOps abaixo:

We won’t simply rely on scanners and reports to make code better. We will attack products and services like an outsider to help you defend what you’ve created. We will learn the loopholes, look for weaknesses, and we will work with you to provide remediation actions instead of long lists of problems for you to solve on your own.

O título do post ficou mais inclinado ao uso do Sonarqube, e é justamente isso que pretendo esclarecer, essa ferramenta já vem por muitos anos, tendo uma maturidade para uso direto em qualidade de software, e também com foco em gestão de vulnerabilidades, principalmente a versão Community, que vem recebendo notável atenção no desenvolvimento das suas funcionalidades de segurança, regras e proteções (Quality gates). Não é só passar um scan e tudo pronto, já está resolvido seus problemas de segurança… Exige maturidade no processo, na base e no entendimento do que você está desenvolvendo, seja uma app, uma infraestrutura ou módulo. Pretendo explicar mais sobre essa maturidade no próximo artigo, estou criando uma série de artigos com foco em desenvolvimento seguro, e vou abordar a base de segurança no SDLC. Não perde hein? 😅😅😅

Docker Compose

Na própria documentação do SonarQube, você pode obter o compose completo para a instalação do SonarQube, é bem simples e direto, você terá rapidamente em minutos o SonarQube configurado, sem a necessidade de gerenciar banco de dados, Java e outros recursos. Veja o modelo abaixo:

services:
sonarqube:
image: sonarqube:community
hostname: sonarqube
container_name: sonarqube
read_only: true
depends_on:
db:
condition: service_healthy
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_temp:/opt/sonarqube/temp
ports:
- "9000:9000"
networks:
- ${NETWORK_TYPE:-ipv4}
db:
image: postgres:17
healthcheck:
test: [ "CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}" ]
interval: 10s
timeout: 5s
retries: 5
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
- ${NETWORK_TYPE:-ipv4}

volumes:
sonarqube_data:
sonarqube_temp:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:

networks:
ipv4:
driver: bridge
enable_ipv6: false
dual:
driver: bridge
enable_ipv6: true
ipam:
config:
- subnet: "192.168.2.0/24"
gateway: "192.168.2.1"
- subnet: "2001:db8:2::/64"
gateway: "2001:db8:2::1"

Passos

Para criar o ambiente com o Docker Compose, apenas executar o comando $ docker compose up -d .

# docker compose up -d
[+] Running 3/3
✔ Network docker-sonarqube_sonar_net Created 0.0s
✔ Container docker-sonarqube-db-1 Started 0.3s
✔ Container docker-sonarqube-sonarqube-1 Started

Acesse o SonarQube em um navegador da web no endereço IP do seu servidor na porta 9000. Por exemplo: http://localhost:9000 . Efetue login com o nome de usuário admin e a senha admin. O SonarQube solicitará que você altere sua senha.

SonarQube Community

Note: Um ponto de atenção aqui, verifique se a seguinte configuração de autenticação está dessa forma, assim podemos evitar que qualquer pessoa possa visualizar os resultados da análise e seu código-fonte, assim o SonarQube passa a permitir o acesso ao painel apenas para usuários autenticados. 👇👇👇

Force User Authentication

SonarScanner

O scanner de código do SonarQube é um pacote separado que você pode instalar em uma máquina diferente daquela que executa o servidor do SonarQube, como por exemplo, sua estação de trabalho de desenvolvimento local, ou um servidor de entrega contínua (CI/CD). Há pacotes disponíveis para Windows, MacOS e Linux, que você pode encontrar no site do SonarQube.

Como estamos usando o Docker Compose, podemos seguir com a mesma ideia do Docker, existe uma imagem para o SonarQube CLI presente no Docker Hub, mostrando os passos corretos para você começar.

Docker Hub

Veja que ele já fornece o comando completo para você:

docker run \
--rm \
-e SONAR_HOST_URL="https://${SONAR_HOST_URL}" \
-v "${PROJECT_BASEDIR}:/usr/src" \
sonarsource/sonar-scanner-cli

Eu fiz a execução aqui do comando e peguei essa saída aqui de output, mostrando os logs do que está sendo gerado pelo Sonar Scanner. vale reforçar que eu estou executando diretamente através do meu SonarQube server, que é minha instância central do Sonar.

13:47:56.345 INFO  No report imported, no coverage information will be imported by JaCoCo XML Report Importer
13:47:56.345 INFO Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms
13:47:56.346 INFO Sensor CSS Rules [javascript]
13:47:56.348 INFO No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
13:47:56.348 INFO Sensor CSS Rules [javascript] (done) | time=3ms
13:47:56.348 INFO Sensor C# Project Type Information [csharp]
13:47:56.350 INFO Sensor C# Project Type Information [csharp] (done) | time=2ms
13:47:56.350 INFO Sensor C# Analysis Log [csharp]
13:47:56.383 INFO Sensor C# Analysis Log [csharp] (done) | time=33ms
13:47:56.383 INFO Sensor C# Properties [csharp]
13:47:56.383 INFO Sensor C# Properties [csharp] (done) | time=0ms
13:47:56.383 INFO Sensor TextAndSecretsSensor [text]
13:47:56.392 INFO Sensor TextAndSecretsSensor [text] (done) | time=9ms
13:47:56.392 INFO Sensor VB.NET Project Type Information [vbnet]
13:47:56.393 INFO Sensor VB.NET Project Type Information [vbnet] (done) | time=1ms
13:47:56.393 INFO Sensor VB.NET Analysis Log [vbnet]
13:47:56.408 INFO Sensor VB.NET Analysis Log [vbnet] (done) | time=15ms
13:47:56.408 INFO Sensor VB.NET Properties [vbnet]
13:47:56.408 INFO Sensor VB.NET Properties [vbnet] (done) | time=0ms
13:47:56.408 INFO Sensor IaC Docker Sensor [iac]
13:47:56.412 INFO 0 source files to be analyzed
13:47:56.467 INFO 0/0 source files have been analyzed
13:47:56.467 INFO Sensor IaC Docker Sensor [iac] (done) | time=59ms
13:47:56.477 INFO ------------- Run sensors on project
13:47:56.563 INFO Sensor Analysis Warnings import [csharp]
13:47:56.564 INFO Sensor Analysis Warnings import [csharp] (done) | time=1ms
13:47:56.564 INFO Sensor Zero Coverage Sensor
13:47:56.564 INFO Sensor Zero Coverage Sensor (done) | time=0ms
13:47:56.566 INFO SCM Publisher No SCM system was detected. You can use the 'sonar.scm.provider' property to explicitly specify it.
13:47:56.571 INFO CPD Executor Calculating CPD for 0 files
13:47:56.572 INFO CPD Executor CPD calculation finished (done) | time=0ms
13:47:56.683 INFO Analysis report generated in 98ms, dir size=122.0 kB
13:47:56.697 INFO Analysis report compressed in 13ms, zip size=14.9 kB
13:47:56.757 INFO Analysis report uploaded in 60ms
13:47:56.760 INFO ANALYSIS SUCCESSFUL, you can find the results at: http://172.168.10.4:9000/dashboard?id=getting-docker-app
13:47:56.761 INFO Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
13:47:56.761 INFO More about the report processing at http://172.168.10.4:9000/api/ce/task?id=AZcHsz24DI_QFJ4LxFHER
13:47:56.775 INFO Analysis total time: 5.316 s
13:47:56.779 INFO EXECUTION SUCCESS
13:47:56.782 INFO Total time: 8.993s

Depois que eu executei, ele mostra na parte de projetos todos os recursos que foram feitos os scans, veja que tive alguns com PASSED e outros com FAILED.

SonarQube

Eu estou usando um repositório do próprio SonarQube que você pode testar alguns projetos de demo, que contém arquivos de java, Maven, Python, Terraform, e outros. No exemplo abaixo, ficou nítido a importância do SonarQube para um desenvolvimento seguro, ele pegou uma variável que estava exposta com a chave e a senha da AWS.

SonarQube

Na console ele mostra as vulnerabilidades encontradas, como também sugere onde que está a issue dentro do projeto, qual é a linha e o arquivo. E tem a parte explicando porque isso é uma issue. É maneiro demais, é seguro, é bom de se usar.

SonarQube

Se você quiser apenas testar o SonarQube para ver o que ele pode fazer, considere executar uma verificação de teste nos projetos de exemplo do SonarQube. São projetos de exemplo criados pela equipe do SonarQube que contêm muitos problemas que o SonarQube detectará e relatará. É isso aí pessoal! Obrigado pela leitura, pela atenção e até opróximo post. Bora!!

--

--

DevSecOps from Zero!🧑‍💻🛡️
DevSecOps from Zero!🧑‍💻🛡️

Written by DevSecOps from Zero!🧑‍💻🛡️

DevSecOps Engineer| Appsec | Lifelong learner | Medium Creator | AWS/Azure certified☁️ | Hashicorp Ambassador | Containers | Tech | Community | Coffee

No responses yet