La Inspección continua de código como parte de la integración continua (CI) se ha hecho cada vez mas importante en la construcción de aplicaciones dentro de una estrategia de seguridad en la metodológica de DevOps o también llamado ahora DevSecOps.

En este escenario, implementaremos para el servidor de integración continua Jenkins como contenedor en Docker. Y la parte de inspección continua de código usaremos SonarQube, finalmente analizaremos el codigo de una Aplicación Web en PHP y sera la archi conocida Dann Vulnerable Web Application o DVWA.

Para lo cual asumiremos que nuestra aplicación se encuentra en GitHub/GitLab y necesitamos evaluar la calidad del código, bugs conocidos, vulnerabilidades,etc.

El Entorno

01 Maquina virtual con Centos 7 / IP 192.168.1.13
Docker y Docker-Compose instalado.

 

1.- Instalación de Jenkins y SonarQube en contenedor Docker

1.1.- Crear el archivo de docker compose y levantar los contenedores.

mkdir -p jenkins/jenkins_home ; cd jenkins
vim docker-compose.yaml



docker-compose up -d
docker ps

Si todo salió bien, en este punto tendremos levantados los dos contenedores 

Jenkins :      http://192.168.1.13:8080/
Sonarqube : http://192.168.1.13:9000/

 

2.- Configurar Jenkins para que se integre con Sonarqube.

2.1.- Establecer contraseña e instalación de plugins recomendados.

Ingrear a Jenkins http://192.168.1.13:8080/

La instalación pedirá el ingreso de la contraseña de inicialización ubicada en 

cat jenkins_home/secrets/initialAdminPassword

Luego procederá a instalar los plugins recomendados

Una vez terminanda la instalación y configurar el usuario «admin» habremos ingresado.

2.2.- Agregar el Plugin de Sonarqube en Jenkins

Ingresar : Manage Jenkins / Manage  Plugins / Available / SonarQube Scanner

 

Luego verificar que se instaló correctamente y elegir reiniciar Jenkins

2.3.- Agregar la URL del servidor Sonarqube.

Ingresar : Manage Jenkins / Configure System / SonarQube servers / Add SonarQube installations

Name : sonarqube
URL del servidor : http://192.168.1.13:9000/

2.4.- Agregar la versión del scaner para el servidor Sonarqube.

Ingresar : Manage Jenkins / Global tool configuration / Sonarqube Scanner / Add Sonarqube Scanner

Name : sonarqube
Install from maven central : Sonarqube Scanner 4.2.0.18.73

 

3.- Crear Job para analizar el codigo de la Aplicacion Web.

Nombre : code-inspection-webapp
Tipo : Freestyle project.


Dentro del Jobs indicar el repositorio donde se buscara el código fuente.

Source Code Management
Git / Repository URL : https://github.com/digininja/DVWA


Luego en «Build» agregar «Sonarqube scanner»

 

Finalmente indicar las propiedad del escaneo en «Analysis properties»

 

4.- Ejecurar Job para analisis de código fuente con Sonarqube desde Jenkins

 Ingresar al Job «code-inspection-webapp» y hacer clic en «Build Now»

Si todo salio bien, en el «console output» del Job nos mostrara que la tarea se ejecuto correctamente.

Si ingresamos el enlace nos llevará a dashboard de Sonarqube donde nos mostrará el reporte del analisis de codigo de la siguiente forma:

 

 

Paso siguiente, analizar todas las vulnerabiidades reportadas y bugs en el código por que esta claro que Sonar al ser una herramienta automatizada, nos arrojará una serie de falsos positivos y negativos se serán necesarios de revisar.

Una reflexión final, un Pentester puede aprender muy rápido conceptos de DevOps pero los DevOps pueden aprender rápido conceptos de seguridad, sobre todo ofensiva? Con capacidad de evaluar reportes en SonarQube o Owasp ZAP ?  yo creo que si, pero es evidente que todo ello requiere mucha especialización y perfiles adicionales, tener en cuenta que el mismo concepto de DevOps como tal, requería especialización, y ahora hablar de DevSecOps aún mas, debido a que no es solo agregar “herramientas” dentro del CI/CD si no taimen saber como interpretar y corregir los fallos encontrados, de lo contrario no servira para nada.

En el siguiente post vememos como agregar OWASP ZAP el CI/CD

Espero les sirva.
Saludos
@jroliva

2 respuestas a “Integración de Jenkins + SonarQube [DevSecOps]”

  1. Avatar de Integración de Jenkins + SonarQube [DevSecOps] — Juan Oliva – Mteheran's Blog

    […] Integración de Jenkins + SonarQube [DevSecOps] — Juan Oliva […]

  2. Avatar de Jorge
    Jorge

    Muchas gracias! Muy útil.

Deja un comentario

Juan Oliva

Consultor en Ciberseguridad y VoIP con mas de 16 años de experiencia en el campo, muy involucrado en proyectos de Ethical Hacking, análisis y explotación de vulnerabilidades en infraestructura, aplicaciones web, APIs y Móviles, pruebas de ingeniería social y revisión de código.