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.

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.

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:

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.

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.

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.