OWASP Dependency Check – Analiza tus dependencias

0
8719

Este tutorial explica como crear un informe automático sobre vulnerabilidades en nuestro proyecto usando la herramienta Dependency Check de OWASP.

Índice de contenidos

1. Introducción

Como ya dije en el tutorial de introducción a OWASP, uno de los fallos de seguridad más comunes en las aplicaciones web es el uso de componentes con vulnerabilidades conocidas (concretamente, es la novena del top 10 de vulnerabilidades). Esto ocurre cuando no comprobamos el historial de seguridad de las librerías que incorporamos a nuestros proyectos. Con frecuencia, basta con actualizar a las últimas versiones.

En este tutorial veremos cómo detectar fallos de seguridad en las librerías de nuestro proyecto mediante la herramienta Dependency Check de OWASP. ¡Manos a la obra!

2. Entorno

El tutorial se ha realizado usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core I7, 16GB DDR3).
  • Sistema Operativo: OS X El Capitan 10.11.3
  • Entorno de desarrollo: IntelliJ IDEA 15
  • Versión de Java: 1.8
  • Versión de Maven: 3.3
  • Dependency Check: 1.3.4

3. Dependency Check

Dependency Check es una herramienta que nos permite identificar las dependencias de nuestro proyecto y comprobar si hay alguna de ellas que tiene vulnerabilidades conocidas. Admite proyectos desarrollados en Java, .NET, Ruby, Node.js y Python. También tiene soporte parcial para proyectos escritos en C/C++. En este tutorial, vamos a trabajar con Java.

Esta herramienta analiza las dependencias de nuestro proyecto y recolectar piezas de información de dichas dependencias (conocidas como evidencias). Estas evidencias se usan para identificar su Common Platform Enumeration (CPE). El CPE es un identificador que asocia una evidencia a una dependencia concreta para favorecer su identificación. Si se ha identificado algún CPE, se listarán las entradas asociadas al Common Vulnerability and Exposure (CVE).

Para la gestión y consulta de las vulnerabilidades públicas descubiertas en las librerías, existe la Base de datos Nacional de Vulnerabilidades (NVD). Dependency Check se actualiza automáticamente con los datos de esta base de datos.

4. Integración con Maven

Dependency Check tiene un plugin para integrar el análisis dentro del ciclo de vida de maven. Vamos a empezar con la configuración básica:

    <build>
        <plugins>
            <plugin>
                <groupId>org.owasp</groupId>
                <artifactId>dependency-check-maven</artifactId>
                <version>1.3.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Con esto, hemos añadido el plugin de Dependency Check a nuestro proyecto. El goal check ejecuta el análisis y crea un informe sobre las dependencias del proyecto. Este goal no se llama directamente, sino que se invoca al llamar a mvn install. La primera ejecución es más lenta porque necesitará descargar todas las referencias de las evidencias de la base de datos. Luego se mantendrá actualizado de forma automática. El tiempo de ejecución es proporcional al número de dependencias del proyecto.

Para consultar el reporte, en lugar de mirar la consola, podemos mirar el reporte generado situado en /target/dependency-check-report.html. En ese fichero estará el reporte del análisis de las dependencias del proyecto. Una vez abierto, podemos ampliar la información para ver las dependencias que han salido con vulnerabilidades.

El resumen de las dependencias vulnerables incluye su nivel de gravedad (siendo 10 el máximo nivel) y nos aportarán una descripción de en qué consiste dicha vulnerabilidad.

Cuando tenemos un proyecto con subproyectos, se puede agrupar el informe de vulnerabilidades de la siguiente forma:

        <build>
            <plugins>
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>1.3.4</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                                <goal>aggregate</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>

Este plugin también nos permite configurarlo para que, dado un valor de CVSS, falle la build siempre que haya una dependencia con un valor más alto que dicho umbral. Para ello, se configurará de la siguiente forma:

    <build>
        <plugins>
            <plugin>
              <groupId>org.owasp</groupId>
              <artifactId>dependency-check-maven</artifactId>
              <version>1.3.4</version>
              <configuration>
                  <failBuildOnCVSS>8</failBuildOnCVSS>
              </configuration>
              <executions>
                  <execution>
                      <goals>
                          <goal>check</goal>
                      </goals>
                  </execution>
              </executions>
            </plugin>
        </plugins>
    </build>

Los distintos objetivos de las ejecuciones son:

  • aggregate. Ejecuta el análisis sobre los proyectos hijos y genera un único informe.
  • check. Ejecuta el proceso análisis sobre las dependencias del proyecto.
  • update-only. Actualiza la caché local de la base de datos de evidencias.
  • purge. Elimina el contenido local de la base de datos de evidencias.

El resto de configuraciones posibles en este plugin son:

  • autoUpdate. Define cuando la actualización automática está activada. No se recomienda desactivarlo para que se mantengan las bases de datos actualizadas. Por defecto: true. Valores admitidos: true o false.
  • cveValidForHours. Número de horas para esperar antes de buscar nuevas actualizaciones. Por defecto: 4. Valores admitidos: integer.
  • failBuildOnCVSS. Especifica que la build falle si alguna dependencia supera el nivel de CVSS definido. Por defecto: 11. Los valores van del 0 al 10. El 11 significa que está desactivado.
  • format. Formato de salida del informe generado. Por defecto: HTML. Valores admitidos: HTML, XML, VULN o ALL.
  • name. Nombre del informe. Por defecto: dependency-check o dependency-check:aggregate.
  • outputDirectory. Directorio donde generar los reportes. Por defecto: target-check.
  • skip. Desactiva el análisis. Por defecto: false. Valores admitidos: true o false.
  • skipTestScope. Evita analizar las dependencias de tipo test. Por defecto: true. Valores admitidos: true o false.
  • skipProvidedScope. Evita analizar las dependencias de tipo provided. Por defecto: false. Valores admitidos: true o false.
  • skipRuntimeScope. Evita analizar las dependencias de tipo runtime. Por defecto: false. Valores admitidos: true o false.
  • suppressionFile. Ruta al fichero XML de ignorados. Se utiliza para ignorar los falsos positivos.

5. Conclusiones

La herramienta Dependency Check automatiza la búsqueda de vulnerabilidades en las dependencias de nuestro proyecto. Incrementa un poco el tiempo de ejecución, pero esto no debería ser problema si tenemos un servidor de integración continua.

6. Referencias

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad