OWASP Dependency Check

From Joko

OWASP Dependency Check

Es una utilidad que identifica las dependencias del proyecto y comprueba si hay vulnerabilidades conocidas. Actualmente soporta Java y .NET

El plugin en Jenkins, analiza las dependencias y genera reportes para el OWASP.

  1. Base de datos de evidencias de problemas https://cve.mitre.org
  2. Sitio del proyecto open source: https://www.owasp.org/index.php/OWASP_Dependency_Check
  3. Dependency Check en Github: https://github.com/jeremylong/DependencyCheck

En las configuraciones globales de Jenkins, se debe configurar el directorio, dentro del servidor del Jenkins, en que se guardarán los resultados de los analisis realizados.

Owasp-config.png

Luego, para terminar su configuración se debe correr un job creado para actualizar el owasp (por ejemplo, un job "owasp-update" que no tendrá otra función mas que actualizar la configuración del plugin), en el que se debe agregar el Build-step Invoke OWASP Dependency-Check NVD Update Only. Guardar el job y ejecutarlo una única vez.

Owasp-update.png

Configurar OWASP en el job

Se deberá agregar en Post-Build Step el Invoke OWASP Dependency-Check analysis, que deberá quedar de la siguiente manera:

Owasp-post-step.png

Luego, se debe agregar en Post-Build Action el Publish OWASP Dependency-Check Analysis results. Aqui se deben ajustar los parámetros a su necesidad. En este caso, los dejamos como están.

Owasp-post-build.png

Una vez que el job fue ejecutado, se puede ver el reporte del OWASP, entrando en el número de Build y luego en Dependency-Check Warnings.

Owasp-results-3.png

Cómo leer el reporte de dependency check: https://jeremylong.github.io/DependencyCheck/general/thereport.html

Integrar el OWASP al SonarQube

Para integrar los resultados del Análisis del OWASP al análisis en el SonarQube, se debe añadir el Dependency-Check Plugin al SonarQube. Se debe descargar el jar y moverlo al $SONAR_HOME/extensions/plugins. Descargar de: http://www.sonarplugins.com/owaspdependencycheck

Integración Manual

Clonar el repositorio que contiene el/los proyectos sobre los cuales se quiere correr estos análisis. Agregar el sonar.host.url y asegurarse de que la versión del sonar-maven-plugin y el dependency-check plugin sea el correcto en el pom del proyecto. Debe ser parecido al siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    	//AQUI TODO LO DEMAS DEL POM
    <packaging>pom</packaging>
    	//AQUI TODO LO DEMAS DEL POM
    <properties>
    	//properties
    	//properties
    	//properties
        <dependency.check.report.dir>target/dependency-check</dependency.check.report.dir>
        <sonar.host.url>URL DEL SONAR</sonar.host.url>
        <sonar.sources>src/main/java</sonar.sources>
        <sonar.projectKey>${project.groupId}:${project.artifactId}</sonar.projectKey>
        <sonar.dependencyCheck.reportPath>${dependency.check.report.dir}/dependency-check-report.xml</sonar.dependencyCheck.reportPath>
    </properties>
    <profiles>
        <profile>
            <id>FindBugs-Security-Audit</id>
            <properties>
                <sonar.profile>FindBugs Security Audit</sonar.profile>
            </properties>
        </profile>
        <profile>
            <id>QualityProfileTwo</id>
            <properties>
                <sonar.profile>MyQualityProfile2</sonar.profile>
            </properties>
        </profile>
    </profiles>
    	//AQUI TODO LO DEMAS DEL POM
    	//AQUI TODO LO DEMAS DEL POM
    <build>
        <pluginManagement>
	    	//AQUI TODO LO DEMAS DEL POM
	    	//AQUI TODO LO DEMAS DEL POM
            <plugins>
                <plugin>
                <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>3.1.2</version>
                    <configuration>
                        <format>XML</format>
                        <outputDirectory>${dependency.check.report.dir}</outputDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

Se debe entrar al directorio donde se clonó el repositorio y compilarlo.

cd DIR_DEL_PROYECTO
mvn package

Luego, se debe correr el dependency-check y el sonar sobre el proyecto

  • Si el repositorio tiene un solo módulo, se pueden ejecutar con los comandos:
mvn compile dependency-check:check
mvn sonar:sonar
  • Si el repositorio tiene mas de un módulo, se debe generar un reporte en cada módulo del proyecto y en el Parent Project. Para esto, se debe correr el dependency-check con el siguiente comando:
mvn clean compile dependency-check:aggregate 
mvn sonar:sonar
  • Para desactivar la actualización automática del NVD, se puede agregar esta configuración:
 mvn compile -DautoUpdate=false dependency-check:aggregate

Agregar resultados al Dashboard

Para agregar los resultados del Dependency-check al Dashboard del SonarQube, se debe crear uno nuevo o agregar el widget al dashboard que ya tiene.

Ir a la sección Configure Widgets y agregar el de Known Vulnerabilities in Dependencies. Si el dashboard es global, deberá elegir el o los proyectos sobre los cuales se hizo el análisis de vulnerabilidades.

Dashboards-sonar.png

Uso de Base de Datos NVD externa

  • Se debe crear la Base de Datos y el usuario, en el Postgres con acceso remoto habilitado.
  • Conectarse a la BD Postgres y ejecutar este script
  • Configurar el proyecto siguiendo esta guía

La primera vez que se actualiza la Base de Datos, puede tardar mucho tiempo, debido a la cantidad de filas (millones) que debe insertar a la Base de Datos, que al realizarse por una conexión de red, tomará su tiempo.