Análisis DAST en nuestro Pipeline con OWASP ZAP

Análisis DAST en nuestro Pipeline con OWASP ZAP

Como implementar análisis DAST en nuestro Pipeline Jenkins. Generación de reportes. Utilizamos OWASP ZAP, en Docker, para la evaluación y reportes

En esta entrada vamos a configurar OWASP ZAP en nuestro Pipeline Jenkins. En esta ocasión no vamos a hacer una instalación de OWASP ZAP, vamos a ejecutarlo en un contenedor Docker en el mismo host que Jenkins y sumarlo al "Stage" a nuestro Pipeline.

Para comenzar vamos a correr el Docker de OWASP ZAP.

docker run --detach --name zap -u zap -v "/opt/dast/reports":/zap/reports/:rw \
  -i owasp/zap2docker-stable zap.sh -daemon -host 0.0.0.0 -port 8080 \
  -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true \
  -config api.disablekey=true

Como ven el tag -v apunta a una carpeta nuestro SO, para poder depositar los reportes que generemos.

Vamos a hacer una llamada directa al Docker con el comando zap-cli.

Elegí el quick-scan y agregamos un tag de Medium. La finalidad es que no me reporte los Low.

docker exec zap zap-cli --verbose quick-scan http://pipeline.ironbox.com.ar:8090 -l Medium

Vamos a crear un Stage en nuestro código Groovy de Jenkins. Agregue un Try & Catch. Me interesa, por los falsos positivos, que el Pipeline continue aun si tenemos vulnerabilidades Medium o High.

A continuación creamos el reporte. En este caso, para su posterior publicación, la salida es html pero podríamos jugar con otros formatos para alimentar otro sistema. Por ejemplo JSON para utilizar ArcherySec o DefectDojo y poder gestionar la vulnerabilidad hallada.

        stage('DAST') {
            steps {
                script {
                    try {
                        echo "Inicio de Scanneo Dinamico"
                        sh "docker exec zap zap-cli --verbose quick-scan http://pipeline.ironbox.com.ar:8090 -l Medium" 
                        //sh "docker exec zap zap-cli --verbose alerts --alert-level Medium -f json | jq length"
                        currentBuild.result = 'SUCCESS' 
                    }
                    catch (Exception e) {
                            //echo e.getMessage() 
                            //currentBuild.result = 'FAILURE'
                            println ("Revisar Reporte ZAP. Se encontraron Vulnerabilidades.")

                        }
                    }  
                    echo currentBuild.result 
                    echo "Generacion de Reporte"
                    sh "docker exec zap zap-cli --verbose report -o /zap/reports/owasp-quick-scan-report.html --output-format html"
                    publishHTML target: [
                        allowMissing: false,
                        alwaysLinkToLastBuild: false,
                        keepAll: true,
                        reportDir: '/opt/dast/reports',
                        reportFiles: 'owasp-quick-scan-report.html',
                        reportName: 'Analisis DAST'
                      ]          
            }
        }

¡Vamos a correr ese Pipeline! A ver que nos entrega.

Como habíamos configurado el Pipeline continuo aun habiendo encontrado una vulnerabilidad Medium.

Ahora podemos revisar el reporte.

Muchas cosas para configurar y seguir jugando. Espero que les sea de utilidad.

¡Nos vemos en la próxima entrada!