Vulnerabilidades: ¿cómo priorizar los parches?

Por Cristian Bravo Lillo, Director del CSIRT
waves

Uno de los problemas más complejos que tiene que enfrentar un administrador de sistemas o un encargado de ciberseguridad es cómo priorizar la enorme cantidad de parches para las vulnerabilidades en las aplicaciones obsoletas. Por ejemplo, en un escaneo reciente a un servidor con Drupal, nos encontramos con versiones desactualizadas tanto de Drupal como de Apache, PHP y JQuery. Estas aplicaciones, en conjunto, tenían 207 vulnerabilidades.

El tiempo de los administradores de sistemas y de los encargados de ciberseguridad es siempre muy escaso. Además, es muy complicado subir o cambiar las versiones de una aplicación sin matar un sistema, así que subir una versión es un proceso que exige probar lo más exhaustivamente que sea posible un parche o una nueva versión, usualmente en un ambiente de pruebas, hasta que se está razonablemente seguro de que el upgrade permitirá seguir operando. El proceso completo entonces puede tomar días para cada parche. Es necesario escoger cuidadosamente, por tanto, los parches que instalaremos.

Y entonces viene la gran pregunta: ¿cómo escogemos qué parches aplicar?

En la siguiente imagen mostramos parte de una planilla con las 207 vulnerabilidades, ordenadas desde el mayor CVSS al menor.

Vulnerabilidades-1a

El CVSS es un índice que hemos estado usando desde hace dos décadas para ordenar las vulnerabilidades de acuerdo con su impacto. El puntaje CVSS es un número real que va entre 0 y 10; mientras más alto, más grave es la vulnerabilidad.

En general, y siendo bastante conservador, uno debería considerar vulnerabilidades CVSS con un puntaje mayor o igual a 1,0.

Dado lo anterior, parece natural partir por las vulnerabilidades con puntaje CVSS más alto, ¿verdad? Pero eso no responde realmente nuestra pregunta. ¿Hasta dónde llegamos? ¿Parchamos sólo las vulnerabilidades con puntaje máximo (10,0)? ¿Llegamos hasta donde nos alcance el tiempo (o la paciencia)? ¿Tratamos de parchar todo lo que tenga CVSS igual o mayor a 9,0? ¿o a 7,0? Parece claro que nunca tendremos tiempo suficiente para hacerlo todo, así que ¿hasta dónde llegamos?

Necesitamos más información. Y aquí es donde hacemos uso del EPSS, un proyecto del que ya hablamos en un post anterior. En esencia, EPSS es un proyecto desarrollado por First.org que se dedica a calcular diariamente la probabilidad de que una vulnerabilidad específica sea abusada dentro de los próximos 30 días.

Ahora tenemos una lista con dos variables: el puntaje CVSS, y la probabilidad EPSS:

Vulnerabilidades-2a

¿Qué hacemos ahora? ¿Escogemos tal vez las vulnerabilidades con mayor probabilidad de ser abusadas? Esa es una buena idea, pero no es lo que buscamos: puede que haya vulnerabilidades con una probabilidad muy alta de ser abusadas, pero si el impacto que generan no es grande, tal vez podríamos querer ignorarlas por el momento, en favor de otras "más graves".

Lo que necesitamos es una mezcla de ambas cosas: tanto el impacto de la vulnerabilidad como la probabilidad de que sean abusadas.

En el CSIRT definimos el factor de urgencia para cada vulnerabilidad. Lo calculamos como el producto del puntaje CVSS y la probabilidad EPSS. Es un número entre 0 y 10: mientras más alto, más urgente es la necesidad de parchar. Mientras más bajo, menor es tanto el impacto de la vulnerabilidad como la probabilidad real de que sea hackeada. Puede interpretarse como el impacto esperado de una vulnerabilidad, en el sentido de la esperanza estadística.

Ahora podemos ordenar la planilla por factor de urgencia, y nos queda lo siguiente:

Vulnerabilidades-3

En la imagen anterior tenemos por fin no sólo las vulnerabilidades ordenadas de más urgente a menos urgente, sino que también sabemos hasta dónde vale la pena parchar.

Si seguimos el mismo criterio que mencionamos arriba (puntaje CVSS mayor o igual a 1,0), entonces deberíamos parchar todo lo que tenga un factor de urgencia mayor o igual a 1,0. En la imagen anterior hay sólo dos de esas vulnerabilidades: CVE-2020-28949 y CVE-2020-36193.

En resumen, el criterio que sugerimos es el siguiente:

  1. Determina la lista de vulnerabilidades en un contexto determinado. El contexto puede ser un sitio, una aplicación o un servidor.
  2. Para cada vulnerabilidad obtén el puntaje CVSS y la probabilidad EPSS.
  3. Calcula el factor de urgencia como el producto entre el CVSS y el EPSS.
  4. Quédate sólo con las vulnerabilidades que tengan un factor de urgencia mayor o igual a 1,0.

En la columna de la derecha puedes bajar la planilla que usamos para este artículo.

Escrito por
Cristian Bravo Lillo
Director del CSIRT
Cristian es Ingeniero Civil en Computación de la Universidad de Chile, y Doctor en Ingeniería y Política Pública en Carnegie Mellon University, con una especialización en Seguridad Usable en el CMU Usable Privacy and Security Lab (CUPS). Ha sido profesor en el Master en Ciberseguridad de la Universidad de California, Berkeley; y ha dictado cursos de pregrado en la Universidad de Chile, la Universidad de Santiago, y la Universidad Tecnológica Metropolitana.