En esta sección de Math for Hacks hablaremos de cálculos y fórmulas matemáticas enfocadas a la ciberseguridad, analizando tanto la perspectiva del atacante como la de la defensa, y su funcionamiento.
Por ejemplo, podemos mencionar ataques de colisión de hash o aquellos basados en el análisis del tiempo de respuesta de un aplicativo. Desde el punto de vista de la defensa, podríamos considerar los cálculos hechos para definir si un usuario pudo trasladarse o, como una partícula cuántica, teletransportarse de un lado a otro. También, hablaremos de cómo calcular anomalías en diferentes conjuntos de datos.
En este blog nos enfocaremos en los siguientes dos temas:
Teletransportación de usuarios: En este primer punto hablaremos de cómo hacer el cálculo, tanto de distancia como la verificación de velocidad, en la que un usuario tuvo que tener entre sus dos últimos accesos.
Anomalías Calculables: Aquí hablaremos de cómo utilizar una herramienta matemática de probabilidad, como los percentiles, para hacer el cálculo de anomalías en conjuntos de datos de tráfico, accesos, peticiones, etc.
Al ser integrante del equipo de seguridad de una empresa, es fundamental mantener un registro detallado de las acciones que realizan tus usuarios. Este registro nos ayuda a determinar acciones para responder efectivamente ante algún ciberataque, además de permitirnos identificar comportamientos anómalos que podrían poner en riesgo la empresa.
Una de las acciones más críticas para monitorizar son los accesos a recursos como herramientas, aplicativos, sistemas operativos, redes privadas virtuales (VPNs), etc. Estos accesos nos ayudarán a determinar comportamientos anómalos o no permitidos dentro de nuestros usuarios. Por ejemplo, el uso de VPNs para acceder a contenido de ciertas plataformas digitales que no estén disponibles en el país de origen, hasta el posible robo de credenciales y el acceso desde ubicaciones geográficas inusuales.
Para realizar este cálculo se necesitaran los siguientes datos disponibles en los logs de acceso de las herramientas:
Con estos tres datos podemos obtener los siguientes datos necesarios para el cálculo:
Y necesitaremos el conocimiento del siguiente dato:
radio equivolumen de la tierra (rt) = 6371 km
Con estos datos podemos comenzar nuestro cálculo para determinar la velocidad a la que un usuario se ha trasladado, y evaluar si ese traslado es físicamente posible.
El primer paso es calcular la distancia entre el primer acceso y el segundo acceso. Para ello utilizamos la fórmula Haversine, una herramienta matemática utilizada para calcular la distancia entre dos puntos en la superficie de una esfera. En este caso tomamos como esfera a la Tierra, y conociendo su latitud y longitud, tiene la siguiente estructura:
a=sin2(2Δφ)+cos(φ1)⋅cos(φ2)⋅sin2(2Δλ)
c=2⋅atan2(a,1−a)
d=R⋅c
Donde:
Y para poder hacer el cambio de las longitudes y latitudes a radianes se tomará en cuenta la siguiente fórmula:
Una vez conseguida nuestra distancia entre un punto y otro, utilizaremos la fórmula de la velocidad para determinar a qué velocidad tuvo que viajar el usuario para su traslado.
La fórmula de la velocidad es la siguiente:
Donde:
Una vez determinada la velocidad podremos concluir si el traslado fue posible o si el usuario se teletransporto entre un punto a otro. Para esto tomaremos las siguientes recomendaciones dadas por el sans para la detección de usuarios anómalos:
Si la distancia entre los dos intentos de conexión es <1000 Kms:
Podemos suponer que el usuario tomará un tren o un coche para viajar (un medio de transporte lento). El tiempo mínimo entre dos conexiones debe ser superior a 8 horas, considerando una velocidad promedio de 100 Km/h.
Si la distancia es superior:
Podemos esperar que el usuario utilice un avión para viajar. En promedio se tarda 2 horas para el proceso de check-in, adicionalmente un avión típico vuela a ~800 Km/h y si añadimos 2h para salir del aeropuerto y viajar hasta el destino final. Podemos suponer un retraso mínimo de 24 horas.
Con esta serie de fórmulas se pueden crear alertas o visualizaciones que nos ayuden a determinar y visualizar el comportamiento de los accesos de nuestros usuarios. A continuación, te recomendamos un link de Python, dónde se puede consultar el desarrollo de esta fórmula, y una búsqueda del proceso en Splunk.
Si le preguntamos al equipo de ciberseguridad enfocado en monitorizar las tecnologías, responderán que uno de los parámetros más buscados son picos o caídas en el comportamiento normal de estas. Por ejemplo, podríamos buscar picos de tráfico en un firewall para determinar diferentes tipos de ataques como, una exfiltración de datos, ataque DDoS o una caída de un servicio.
De los anteriores ejemplos y más que pueden existir al buscar anomalías podría configurarse solo un dato bandera como punto máximo de inflexión o un punto mínimo de caída. Sin embargo, esta práctica no se adecua al comportamiento que está teniendo la tecnología en ese momento, ya que puede tener fluctuaciones que no se reporten debido a puntos muy altos o muy bajos.
Por ejemplo, mi experiencia de 10 años apoyando a mejorar la seguridad en diferentes empresas me permiten ilustrar este punto con un caso real:
Los firewall perimetrales de una empresa reportan que el tráfico normal entre 9:00 am a 18:00 pm es entre 8 GB a 17 GB por hora. En cambio, entre las 12:00 am y las 3:00 am el tráfico normal es de 1GB a 5GB por hora. La diferencia entre la normalidad de un horario a otro es notable. Si configuramos alertas para fluctuaciones en un pico de 25GB, no veríamos anomalías de 10 GB en el horario de 12am-3am. Por esto hablaremos del cálculo de percentiles, enfocado a que nuestras fluctuaciones y configuraciones de banderas de picos o caídas se adapten al comportamiento de la tecnología.
El percentil es una medida estadística de posición, que divide la distribución ordenada de los datos en cien partes iguales. La regla general es que si el valor está en el -ésimo percentil, entonces es mayor que el % de los valores.
Con esta explicación general hablemos un poco de como se ven los percentiles. Como se mencionó previamente, se basa en la posición en la que se encuentra un dato en una distribución ordenada. Suponiendo que tenemos la siguiente distribución ya ordenada:
12, 14, 20, 23, 27, 33, 37, 38, 41
Para saber el valor de P(k) solicitado es necesario saber la posición que ocupa en nuestro conjunto ordenado. Para poder obtener la posición del percentil deseado se tiene la siguiente fórmula:
Donde:
Aplicando la fórmula anterior, calcularemos el P(40), el P(50) y el P(70) tomando estos percentiles como la “mayoría” bajo la “normalidad” en nuestro conjunto de datos ordenados.
Dándonos así la posición 4 para el percentil 40 , la posición 5 para el percentil 50 y la posición 7 para el percentil 70.
En este ejemplo podemos observar que nuestra caída aceptable “normal” sería 23 , nuestro pico igual a 37 y un comportamiento normal con fluctuaciones entre 24 y 36. De la misma forma podemos calcular los comportamientos más raros o anormales. Debemos tomar todo aquello menor a P(10) o mayor P(90), y si realizamos el mismo procedimiento tendríamos que P(10)=1 y P(90)=9 sean nuestras banderas para disparar nuestras alertas de comportamiento. Teniendo la relación posición, valor, percentil de la siguiente forma:
Hace que nuestra alerta se dispare para todo aquello mayor a 41 y todo aquello menor a 12. Conforme avance el tiempo de obtención de información y crezca nuestro conjunto de datos, nuestras banderas de alertamiento se modifican acorde al comportamiento del conjunto.
Así como se hizo en este ejemplo de 9 posiciones, la precisión del comportamiento normal con los percentiles será más exacto entre más muestras tenga el conjunto estudiado. Esto se debe a que funciona como medida de posición no central.
Una alerta de gran valor para nuestro equipo de seguridad, como ya se mencionó anteriormente, son los picos y caídas de consumo del tráfico. Para esta alerta la lógica sería la siguiente:
Sumar el ingreso de bytes por ventanas de tiempo cortas (5 min , 10 min o 20 min) en una ventana total de 2 a 6 horas.
Ordenar la lista de bytes sumados por ventanas de tiempo.
Calcular principalmente el P(90) y el P(10) del conjunto previamente ordenado.
Configurar P(90) y P(10) como mínimo y máximo deseado en la alerta.
Con esta configuración los mínimos y máximos se adaptaran al comportamiento de la tecnología. Como se puede ver en las siguientes gráficas y sus percentiles 10, 40, 50, 70 y 90, además de los cambios en los puntos máximos y mínimos dependiendo del horario, se muestra que en la mañana tenemos menos de la mitad de tráfico que en la tarde.
Otro parámetro a destacar sería el aumento de accesos por usuario, ya que esto podría mostrarnos indicios de un posible robo de identidad. Siguiendo una lógica parecida a la de la alerta de tráfico se seguirán los siguientes pasos:
Hacer el conteo de logins exitosos por ventanas de tiempo (5 min , 10 min o 20 min) en una ventana total de 2 a 6 horas.
Ordenar el conjunto de la sumatoria de logins.
Calcular principalmente el P(90) del conjunto previamente ordenado.
Configurar P(90) como máximo deseado en la alerta.
Una vez obtenido el P(90), este será nuestro punto máximo de accesos permitidos normales por el usuario. Cualquier pico que sobrepase este valor será denominado como una anomalía en el comportamiento del usuario.
Analicemos las siguientes gráficas, tomadas del comportamiento de un usuario. En la primera podemos evidenciar los picos entre la 1:00 am y las 5:00 am, y la siguiente nos muestra el comportamiento del mismo usuario entre las 11:00 am y las 4:00pm.
Para tener alertas más precisas y afinadas podemos crear cálculos para los comportamientos anómalos de diferentes tecnologías o usuarios y así, tener nuestros puntos máximos y mínimos de fluctuación personalizados para el comportamiento de estos en el tiempo consultado.
De la misma forma que en el caso anterior, compartimos links de diversas herramientas como Splunk, Manage Engine y Elastic, las cuáles son usadas para la monitorización y el cálculo de los percentiles.
Así como estos dos casos de herramientas matemáticas pueden ayudarnos a optimizar nuestra monitorización, existen muchas más que nos ayudan a mejorar nuestra seguridad y perfeccionar nuestras alertas. Sin embargo, no debemos olvidar que también hay herramientas matemáticas diseñadas para vulnerar nuestras defensas. Sobre este tema profundizaremos en un próximo blog. ¡Happy Hunting!