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,
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
Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.