1.- Análisis Estático con SonarQube

Herramientas de Análisis de Código Fuente o Pruebas de Seguridad Estáticas de Aplicaciones (SAST) con SonarQube

--

Las herramientas de análisis de código fuente, también conocidas como Pruebas de Seguridad Estáticas de Aplicaciones (SAST), son fundamentales en un entorno de desarrollo seguro. En este contexto, utilizaremos SonarQube, una plataforma de código abierto creada por SonarSource.

Es posible que ya tengas configurada una etapa dedicada de SonarQube en tu canal de integración continua y entrega continua (CI/CD), pero es útil saber cómo ejecutar SonarQube localmente. Al hacerlo, puedes acortar el ciclo de retroalimentación para modificar código, ejecutar análisis y revisar los resultados.

En este laboratorio, te guiaré a través de la configuración de SonarQube y su uso para analizar una aplicación en el entorno de desarrollo en la nube con Docker. Todo se puede hacer en la terminal en el panel derecho. Podrás replicar fácilmente este laboratorio en cualquier entorno que tenga Docker instalado, incluyendo tu propia estación de trabajo de desarrollo.

Para poner en marcha un servidor de SonarCube, realizarás los siguientes pasos:

1. Crear una red Docker para que SonarQube y PostgreSQL se comuniquen.
2. Configurar PostgreSQL ejecutándose en un contenedor Docker.
3. Configurar SonarQube ejecutándose en un contenedor Docker.
4. Descargar la imagen Docker del escáner de SonarQube.
5. Configurar un alias para ejecutar análisis utilizando el contenedor Docker de la interfaz de línea de comandos del escáner de SonarQube.
6. Analizar algo de código e interpretar los resultados.

Este proceso te permitirá realizar análisis exhaustivos de tu código fuente, ayudándote a identificar posibles vulnerabilidades y a mejorar la seguridad de tus aplicaciones. Recuerda que la seguridad del software es un proceso continuo y SonarQube, junto con las herramientas adecuadas, te ayudará a fortalecer tus aplicaciones desde sus cimientos.

Paso 1: Configurar PostgreSQL database:

docker network create mynet
docker run - name postgress -e POSTGRES_USER=root -e POSTGRES_PASSWORD=Test12345 -p 5432:5432 - network mynet -d postgres

Paso 2: Configurar SonarQube server:

docker run -d — name sonarqube -p 9000:9000 -e sonar.jdbc.url=jdbc:postgresql://postgres/postgres -e sonar.jdbc.username=root -e sonar.jdbc.password=Test12345 — network mynet sonarqube
docker ps

Paso 3: Log en SonarQube UI

Abrir con navegador sonarqube en local, puerto 9000

username: admin

passwd: admin

(no olvidar cambiarlo después)

Paso 4: Crear un proyecto

Selecciona “crear proyecto” manualmente

  1. Establece el nombre de visualización del proyecto como “temp”.
  2. Establece la clave del proyecto como “temp” (esto ocurrirá automáticamente).
  3. Asegúrate de que la rama principal esté seleccionada.
  4. Presiona el botón “Siguiente” para continuar.

Paso 5: Generar el token

Generar y copiar el token a lugar seguro. Es único para el proyecto.

Paso 6: preparado para ejecutar el escáner cliente

docker pull sonarsource/sonar-scanner-cli
alias sonar-scanner='docker run - rm -v "$(pwd):/usr/src" sonarsource/sonar-scanner-cli'

Paso 7: probar en el ejemplo de codigo. (wtecc-cicd)

Paso 8: Ejecutar el escáner

Ejecutar el comando salvado del paso 5 de generar el token.

### THIS IS AN EXAMPLE ONLY ### DO NOT PASTE THIS ###
sonar-scanner \
Dsonar.projectKey=temp \
Dsonar.sources=. \
Dsonar.host.url=https://{YOUR SONARQUBE URL} \
Dsonar.login={YOUR PROJECT TOKEN}

Paso 9: interpretar el resultado

En las pestañas superiores puedes ver las siguientes etiquetas:

  • ¿Dónde está el riesgo?
  • ¿Cuál es el riesgo?
  • Evaluar el riesgo
  • ¿Cómo puedo solucionarlo?

Bajo la pestaña “¿Dónde está el riesgo?”, el informe te indica que existe un posible riesgo de Cross Site Request Forgery (CSRF) porque el código de muestra que utilizamos no incluye las medidas de seguridad adecuadas para protegerlo.

Tu siguiente pregunta podría ser: “¿Cómo puedo solucionarlo?” Puedes descubrirlo haciendo clic en la pestaña “¿Cómo puedo solucionarlo?”

La pestaña “¿Cómo puedo solucionarlo?” te proporciona algunas cosas a tener en cuenta.

Esta aplicación está escrita utilizando el Framework Flask. Si te desplazas hacia abajo hasta la sección sobre Flask, te indica exactamente cómo utilizar la clase CSRFProtect para solucionar el problema, junto con algunos otros consejos.

app = Flask(__name__)
csrf = CSRFProtect()
csrf.init_app(app) # Compliant

Si este fuera tu código original, querrías realizar los cambios sugeridos en tu aplicación y ejecutar el análisis nuevamente para asegurarte de que se haya solucionado.

Segunda Parte: Tests de Seguridad y Estrategias de Mitigación

Lab 1: Usando Análisis Estático
Lab 2: Usando Análisis Dinámico
Lab 3: Evaluando el Análisis de Vulnerabilidades
Lab 4: Evaluando “Software Component Analysis (SCA)”

Tercera Parte: OWASP Top 10 vulnerabilidades

Lab 5: Comprendiendo SQL Injections
Lab 6: Cross Site Scripting XSS
Lab 7: Guardando Secretos de forma Segura

Cuarta Parte: Mejores Prácticas

Lab 8: Code Practices
Lab 9: Secure Development Environment

--

--

Fernando Muinos
Cibersecurity, Malware and Secure Development

Founder Hubots.ai. Innovative startup dedicated to providing advanced applications and services that help companies increase their productivity by AGI.