Archivo

Posts Tagged ‘devsecops’

Install Kubernetes Goat (ES)

junio 13, 2021 Deja un comentario
Kubernetes Logo

En estos dos ultimos años estoy muy involucrado en proyectos revisando intraestructuras basadas en contenedores Docker y Kubernetes, en esta busqueda encontré con este genial proyecto que facilita el aprendizaje de vulnerabilidades en Kubernetes.

Kubernetes Goat está diseñado para ser un entorno de clúster intencionalmente vulnerable para aprender y practicar la seguridad de Kubernetes. Es un proyecto creado por Madhu Akula.

En este articulo, veremos como realizar la instalación sobre un equipo con Ubuntu 20.04 y VirtualBox. Kubernetes Goat necesita una instalación previa de Minikube el cual facilita tener un cluster local de Kubernetes.

A.- Instalar Minikube

1.- Descarga de Minikube

Podemos descargar la última versión o una versión específica de la página de versiones de Minikube. Una vez descargado, necesitamos hacerlo ejecutable y agregarlo a nuestra RUTA:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

2.- Iniciar Minikube

Podemos iniciar Minikube con el comando de inicio de minikube, que inicia un clúster de un solo nodo con la última versión estable de Kubernetes.

$ minikube start

3.- Comprobar el estado

Con el comando de estado de minikube, mostramos el estado de Minikube:

$ minikube status

B.- Instalar Kubernetes Goat

1.- Descargar el proyecto

# git clone https://github.com/madhuakula/kubernetes-goat.git

# cd kubernetes-goat/

2.- Configurar la cuenta helm2 rbac e inicializar tiller

# kubectl apply -f scenarios/helm2-rbac/setup.yaml

# helm2 init –service-account tiller

3.- Desplegar Helm chart para verificar la configuración ,

implementación del escenario helm chart metadata-db

# helm2 install –name metadata-db scenarios/metadata-db/

4.- Desplegar los manifiestos de escenarios vulnerables

# kubectl apply -f scenarios/batch-check/job.yaml

# kubectl apply -f scenarios/build-code/deployment.yaml

# kubectl apply -f scenarios/cache-store/deployment.yaml

# kubectl apply -f scenarios/health-check/deployment.yaml

# kubectl apply -f scenarios/hunger-check/deployment.yaml

# kubectl apply -f scenarios/kubernetes-goat-home/deployment.yaml

# kubectl apply -f scenarios/poor-registry/deployment.yaml

# kubectl apply -f scenarios/system-monitor/deployment.yaml

# kubectl apply -f scenarios/hidden-in-layers/deployment.yaml

5.- Crear el forwardeo de puertos en los PODS para permitir el acceso local.

# bash access-kubernetes-goat.sh

6.- Igresar a Kubernetes Goat

Si todo salio bien , ahora podremos ingresar a la aplicación de la siguiente forma:

Ingresar a : http://127.0.0.1:1234/

Finalmente, Si desean practicar los escenarios pueden revizarlos aqui : https://madhuakula.com/kubernetes-goat/index.html

Espero les siva

@jroliva

Pre-Commit Hooks con Talisman[DevSecOps]

Luego de unas semanas de receso obligatorio por que me infecte del COVID mas feo de este mundo, casi no la cuento, pero ya estoy bien!! no se preocupen 😀 , haciendo lo que mas gusta 😀

Es asi que retomamamos el tema de #DevSecOps, El integración continua de código (CI) hace que muchas veces se tengan almacenadas de forma equivocada información confidencial, como claves de acceso, tokens de acceso, claves SSH, entre otros elementos que aveces son necesarios almacenar localmente para luego subir al repositorio.

Talisman es una herramienta que instala un enlace al local y cuando trabajemos con GIT/GITLAB etc,etc. para garantizar que estos elementos llamados “secretos” o la información confidencial no salgan de la estación de trabajo del desarrollador al realizar los comits.

1.- Configuracion de Repositorio GIT

Vamos a configurar un reporsitorio llamado “prueba1”

  • Crear llave

# ssh-keygen
# cat ~/.ssh/id_rsa.pub

  • Creo un reporsitorio “prueba1”
    prueba1 / como privado.

 

  • Descargar un proyecto de prueba, vamos a elegir DVWA

# git clone https://github.com/digininja/DVWA.git

 

  • Ahora configurar finalmente el repositorio local con el repositorio remoto en GITBUB

git init
git add .
git config –global user.email “tuemail@gmail.com”
git config –global user.name “tuuser”
git commit -m “first commit”
git branch -M master
git remote add origin git@github.com:jrolivaeh/prueba1.git
git push -u origin master

Hasta aqui tenemos nuestro repositorio local enlazado con nuestro repositorio remoto en GIT.

2.- Instalación de Talisman en Centos 7

# yum install perl-Digest-SHA git
# curl https://raw.githubusercontent.com/thoughtworks/talisman/master/global_install_scripts/install.bash > ~/install-talisman.sh
# chmod +x ~/install-talisman.sh
# ~/install-talisman.sh

Definir donde se configuraran las variables de entorno , la definimos en el ~/.bashrc

Definimos el modo interactivo haciendo uso del archivo .talismanrc para manejo de excepciones.

Finalmente se define la ubicacion de los repositorios, en este caso de “demo” estamos trabajando en /root/DVWA/ de la VM

3.- Probando Talisman dentro del CI.

Ahora agregamos unos “secretos” que no deberian subirse el repositorio.

# vim secretos

aws_access_key_id = 2367921901012
aws_secret_access_key = vKbptOYlkDFMI/L9NEIMP/bIsEkoQWEJEMKEY
aws_session_token = BWlEJEMPLOK9fgGH0pMPAPuRqw5MoERRpQWE98YUfg5PasR+FvwqnKwRcOIfrRh3c

Finalmente agregaremos el archivo a la rama y finalmente haremos un commit

# git add secretos
# git commit -m “Agregando secretos”

Como vemos Talisman detecto los “secretos” y nos manda una advertencia y alertas.

4.- Agregando excepciones en Talisman.

Si necesitamos crear una excepción por ejemplo de lo que se ha detectado, tenemos que agregar un archivo .talismanrc en el directorio root del proyecto como se muestra a continuación.

cd /root/DVWA
vim .talismanrc

fileignoreconfig:

  • filename: secretos
    checksum: 2502eb040033bd44080fb385ae8b794b808f25542e1e9075d5ed65d4a976c014

Ahora nuevamente mandamos el “comit” y veremos que Talisman aceptara la escepcion.

Espero les sirva, esperemos seguir escribiendo sobre #DevSecOps
Este post va para todos mis amigos que me brindaron apoyo incondicional en superar el virus, Muchas gracias!!

Saludos
@Juan Oliva

Integración de Jenkins + SonarQube [DevSecOps]

febrero 25, 2021 1 comentario

 

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