OWASP Dependency Check – Analiza tus dependencias

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

Text
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

Text
/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:
    Text
    true

    . Valores admitidos:

    Text
    true

    o

    Text
    false

    .

  • cveValidForHours. Número de horas para esperar antes de buscar nuevas actualizaciones. Por defecto:
    Text
    4

    . Valores admitidos:

    Text
    integer

    .

  • failBuildOnCVSS. Especifica que la build falle si alguna dependencia supera el nivel de CVSS definido. Por defecto:
    Text
    11

    . Los valores van del 0 al 10. El 11 significa que está desactivado.

  • format. Formato de salida del informe generado. Por defecto:
    Text
    HTML

    . Valores admitidos:

    Text
    HTML

    ,

    Text
    XML

    ,

    Text
    VULN

    o

    Text
    ALL

    .

  • name. Nombre del informe. Por defecto:
    Text
    dependency-check

    o

    Text
    dependency-check:aggregate

    .

  • outputDirectory. Directorio donde generar los reportes. Por defecto:
    Text
    target-check

    .

  • skip. Desactiva el análisis. Por defecto:
    Text
    false

    . Valores admitidos:

    Text
    true

    o

    Text
    false

    .

  • skipTestScope. Evita analizar las dependencias de tipo test. Por defecto:
    Text
    true

    . Valores admitidos:

    Text
    true

    o

    Text
    false

    .

  • skipProvidedScope. Evita analizar las dependencias de tipo provided. Por defecto:
    Text
    false

    . Valores admitidos:

    Text
    true

    o

    Text
    false

    .

  • skipRuntimeScope. Evita analizar las dependencias de tipo runtime. Por defecto:
    Text
    false

    . Valores admitidos:

    Text
    true

    o

    Text
    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

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

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

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos.
Graduado en Ingeniería Informática en la Universidad Autónoma de Madrid.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Aprende cómo migrar tu sitio Joomla 3 a Joomla 5 de forma segura, manteniendo el diseño, la funcionalidad y compatibilidad con extensiones. Una guía paso a paso con recomendaciones, imágenes y buenas prácticas para actualizar sin sorpresas.
Descubre qué es Yocto Project, sus ventajas, usos reales en Izertis y cómo crear tu propia distribución Linux para Raspberry Pi paso a paso, de forma sencilla y flexible.
¿Trabajas con Drupal y SonarQube 9.9? En este artículo exploramos cómo adaptar el análisis estático para evitar falsos positivos, desactivar reglas conflictivas del Quality Profile y delegar el estilo a PHP CodeSniffer. Una guía práctica para mejorar la integración sin depender aún de SonarQube 10.