En Arithmos, publiqué un post acerca de CVSS en su versión 3.1 y para ser sincero, cada vez que escucho la palabra calculadora, se me erizan los pelos y allí que meto la cabeza, así que como no iba a ser menos en esta ocasión, he desarrollado una con Kotlin en una tarde. Así mismo tal y como os puse en arithmos, podeís visitar los enlaces de las calculadoras de First y NVD.

Para empezar, que base de datos usamos, podríamos usar JSON, XML, pero como estos datos solo varían con cada versión de CVSS, he creado unos modelos Group, Metric, MetricValue y MetricType los cuales serán el alimento de una clase con los datos precargados llamada DataDB31, de hecho si queréis almacenarla en JSON por ejemplo, siemplemente debéis serializar la clase y asunto concluido, para ello hay una clase Repository encargada de acceder a cualquiera del tipo de datos elegido. Una vez tenemos los datos, la clase que se encargará de calcular todo será la clase CVSSv31 junto a Risk.

Los modelos (aunque veáis algunas propiedades en inglés, lo hice con vistas a una versión en-es):

data class Metric(
        val name: String,
        val description: String,
        val englishName: String,
        val group: Group,
        val metricValues: MutableList,
        val longDescription: String,
        val ratingText: String,
        val metricType: MetricType = MetricType.NONE,
        var valueSelected : Double = 0.0,
        var otherValueSelected : Double = 0.0,
        var metricValueSelected : String = ""
)

data class MetricValue(
        val value: String,
        val spValue: String,
        val enValue: String,
        val description: String,
        val numericalValue: Double,
        val otherValue: Double = 1.0
) {
    val metricValue: String
        get() = value.split(':')[1]
    val metric: String
        get() = value.split(':')[0]
}

enum class MetricType(val description: String) {
    EXPLOITABILITY("Explotación"),
    IMPACT("Impacto"),
    NONE(""),
    SECURITYREQUIREMENT("Requisitos de seguridad"),
    MODIFIEDBASESCORE("Métricas base modificadas")
}

enum class Group(val description: String, val longDescription: String) {
    BASESCORE(
            "Grupo Métricas Base",
            "Son propiedades intrínsecas de la vulnerabilidad, siendo constantes en el tiempo y entorno utilizado. Permiten la definición del acceso a una vulnerabilidad y si se cumplen las condiciones necesarias para que sea explotada. Determina el grado de pérdida de confidencialidad, disponibilidad o integridad"
    ),
    TEMPORAL(
            "Grupo Métricas Temporal",
            "Son las características de la vulnerabilidad que podrían ser dinámicas con el paso del tiempo. Hay que tener en cuenta que estas métricas no afectan a la evaluación ya que son totalmente opcionales y se pueden omitir"
    ),
    ENVIROMENTAL(
            "Grupo Métricas Entorno",
            "Características que son únicas y tienen relevancia para un entorno en particular. Las métricas consideradas en este caso son las mismas métricas base pero teniendo en cuenta a la hora de valorarlas el impacto de cada una de ellas en el entorno concreto que estemos analizando y su importancia en el mismo"
    )
}

Y como resultado, cvss02

La podéis descargar desde aquí y si aguien quiere el código completo o el archivo JSON, que me lo pida! (o debería saber como obtenerlo)

😉

Saludos

Licencia Creative Commons
Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s