Tratar la “ciberincertidumbre”. Parte II
Si no leíste el primer post sobre el tratamiento de la “ciberincertidumbre“ te recomiendo que lo hagas antes de continuar con la segunda parte que es algo más farragosa.
A continuación expondremos las Redes de Bayes aplicadas al ámbito de la ciberseguridad, sin duda uno de los temas que me ha enganchado en los últimos tiempos.
Redes de creencia Bayesiana
Sin entrar en todo el detalle necesario para profundizar en este modelo complejo, podemos definir una Red de Creencia como una representación matemática, en forma de Grafo Acíclico dirigido, de las relaciones causa-efecto en un determinado problema. Los nodos del grafo son las variables aleatorias sobre las que realizar inferencias, los arcos dirigidos representan la influencia causal entre las variables y la intensidad de esa relación de causalidad viene dada por una LCPT (Local Conditional Probability Table) que se puede completar en función de conocimientos pasados, métricas de “explotabilidad” de una vulnerabilidad, etc. El objetivo del post es divulgar este conocimiento de una forma sencilla, y para ello lo mejor es tomar un pequeño ejemplo que sirva para entender el funcionamiento en un caso muy sencillo, usaremos el que mostraron Poolsappasit et al. [1] en su trabajo sobre Redes Bayesianas (sólo lo hemos traducido y eliminado una errata):
En el ejemplo, existe una probabilidad del 70% de sufrir un atacante remoto (Nodo D), este atacante tiene como opciones dos vulnerabilidades:
1) un BOF sobre el cliente FTP MATU (Nodo B);
2) un BOF en un demonio SSH (Nodo C).
El exploit de las vulnerabilidades, daría acceso como root al servidor FTP (Nodo A). El ejemplo tiene fines didácticos, no se pretende evaluar si este escenario es o no realista, sino el funcionamiento del modelo. Los arcos entre los nodos están ponderados en base a una modificación de CVSS [2] propuesta por los autores del trabajo, los valores dan un grado de probabilidad de éxito en su exploit. Las LCPTs se completan a partir de estos valores de “explotabilidad”, y los valores de las celdas se escriben formalmente de la siguiente forma:
- Pr(C|¬D), se interpreta como la probabilidad de alcanzar C sin darse D. Es igual a 0,0 (tercera fila, y segunda columna de la LCPT del NODO C).
- Pr(C|D), se interpreta como la probabilidad de alcanzar C sabiendo D es verdadero. Es igual a 0,7 (segunda fila, y segunda columna de la LCPT del NODO C).
- Pr(A|B,¬C) , se interpreta como la probabilidad de alcanzar A sabiendo que B es verdadero y C falso (se ha explotado únicamente la vulnerabilidad B). Es igual a 0,65 (tercera fila, y tercera columna de la LCPT del NODO A).
A partir de los valores introducidos en la LCPT, podemos calcular probabilidades a priori, que nos indicarían la probabilidad de alcanzarse cierto nodo del grafo. Y probabilidades a posteriori, que usando el Teorema de Bayes nos indicarían las probabilidades del estado del grafo partiendo de la hipótesis de que han sucedido ciertos eventos conocidos. Veamos algunos ejemplos de cálculo de estas probabilidades.
- Pr(C), se calcula como la probabilidad a priori o incondicional de alcanzar el NODO C. Es decir, esta probabilidad tiene en cuenta la probabilidad de que exista ese ataque remoto y además la probabilidad de éxito del exploit, es decir, tiene en cuenta los nodos predecesores. ¿Cómo se calcula? Se debe seguir la regla de la cadena, que en este caso se resuelve como:
o Pr(C) = [ Pr(C|D) x Pr(D) ]+ [Pr(C|¬D) x Pr(¬D)]
o Pr(C) = [ 0,7 x 0,7 ] + [0,0 x 0,3] = 0,49
- Ahora vamos a realizar el mismo ejercicio sobre el nodo A. Calculemos la probabilidad a priori Pr(A) con la regla de la cadena, hay que tener en cuenta todos los posibles escenarios:
o Pr(A) = [Pr(A|B,C) x Pr(B|D) x Pr(C|D) x P(D)] +
[Pr(A|¬B,C)] x Pr(¬B|D) x Pr(C|D) x Pr(D)] +
[Pr(A|B,¬C)] x Pr(B|D) x Pr(¬C|D) x Pr(D)] +
[Pr(A|¬B,¬C) x Pr(¬B|D) x Pr(¬C|D) x Pr(D)] =
[1 x 0,85 x 0,7 x 0,7] +
[1 x 0,15 x 0,7 x 0,7] +
[0,65 x 0,85 x 0,3 x 0,7] +
[0 x 0,15 x 0,3 x 0,7]= 0,6060
- Por último vamos a poner en práctica el Teorema de Bayes. Este Teorema sirve para realizar el proceso inverso, es decir, hasta ahora calculábamos la probabilidad a priori de eventos futuros (Root en el servidor FTP) a partir de los posibles eventos pasados (BOF en demonio SSH). Con Bayes, sabemos con certeza que se ha producido el ataque del Nodo A (hijo) y queremos saber si ha sido gracias al exploit de la vulnerabilidad sobre el demonio SSH. Como ejemplo, calcularemos la Pr(C|A), que como ya hemos dicho se interpretaría como “probabilidad de C conociendo que A es verdadero”. Según el Teorema de Bayes:
o Pr(C|A) = [Pr(A|C) x Pr(C)] / Pr(A) = [1 x 0,49] / 0,61 = 0,80
Como era de esperar, “la probabilidad de C conociendo que A es verdadero” es mayor a la “probabilidad a priori de C”=Pr(C).
Usando Teorema de Bayes, y calculando las probabilidades a posteriori podemos conocer los nodos del grafo que se encontrarán más expuestos una vez se haya realizado un ataque. Con este modelo se ayuda a los administradores del sistema a identificar dinámicamente la evolución de los puntos débiles del grafo en función del avance del ataque.
Referencias
- Poolsappasit, N.; Dewri, R. & Ray, I. (2012), 'Dynamic Security Risk Management Using Bayesian Attack Graphs.', IEEE Trans. Dependable Sec. Comput. 9 (1) , 61-74.
- M. Schiffman, “Common Vulnerability Scoring System (CVSS),” http://www.first.org/cvss/cvss-guide.html , 2011.