En este articulo vamos a tratar de crear un Dashboard o Cuadro de mandos, en el cual podamos, de un solo vistazo, obtener información sobre los intentos de inicio de sesión. Para ello, debemos primero refrescar los campos (ya que en alterior articulo hicimos cambios sobre la estructura en Logstash), haciendo click sobre el icono de las flechas concéntricas dentro de Settings/indices:
Ahora vamos a la pestaña Discover e indicando un rango de tiempo (arriba a la derecha) en el que tengamos datos de interés y queramos explotarlos. En nuestro caso indicaremos «Last 7 Days».
Con este intervalo de tiempo marcado, podremos ver los resultados tal y como se muestra a continuación:
Como podemos ver, ya se ha introducido los campos nuevos (Host_target, username, src_ip, tags… etc) y ahora podemos crear las vistas correspondientes a cada caso que queramos insertar en nuestro Dashboard.
Para crear nuestra primera vista (Errores en inicio de sesión Ssh) , vamos a la pestaña Visualize e indicamos que vamos a crear una vista con Area Chart :
En el siguiente paso indicamos From a new search , ya que no vamos a utilizar ningún filtro guardado.
Seguidamente accederemos a la página para crear una nueva vista Area Chart, en la que de forma predefinida tendremos el Eje-Y de tipo count, lo cual nos va bien para esta vista.
Podemos documentarnos sobre los diferentes tipos de aggregations en la web oficial de Elastic.
Como lo que queremos visualizar son las interacciones a lo largo del tiempo, debemos crear un Bucket de tipo X-Axis con el Aggregation Date Histogram, al tener solo el campo @timestamp de tipo fecha/hora, Kibana lo seleccionará automáticamente.
Como con esto nos mostrará todas la interacciones y lo que queremos en concretar para que solo nos muestre los inicios de sesión fallidos (campo tag con valor ssh_fail_psw o ssh_fail_user) , debemos añadir un sub-bucket de tipo Split Area con el aggregation de tipo filter. Añadiendo los siguientes filtros:
1 2 3 4 5 |
Filter 1: tags:ssh_fail_psw Filter 2: tags:ssh_fail_user |
Obteniendo un resultado final como este:
Lo podemos probar haciendo click sobre icono y obtendremos una vista similar a esta:
Guardamos la vista con y ponemos un nombre reconocible, por ejemplo «SSH_login_fail».
Ahora que ya sabemos crear una vista, vamos a crear la vista de los inicios de sesión exitosos, para ellos seguimos los mismos pasos que antes, solo cambiamos los filtros por el siguiente:
1 2 |
Filter 1: tags:ssh_sucessful |
Y lo guardamos con un nombre que recordemos, por ejemplo «SSH_Login_Successful».
Para dotar de mayor utilidad al Dashboard, vamos a incluir dos vista nuevas en formato tabla (Data Table) con la información relevante al caso. Con lo que tendremos que crear la primera vista de tipo Data Table sin especificar ningún filtro (From a new search).
Como en el caso anterior, nos pone de forma predefinida Count como Aggregation en las Metrics.
Crearemos un primer Bucket de tipo Split Rows, seleccionaremos Terms cómo Aggregation, src_ip.raw como Field, al menos 100 en Size para tener una buena cantidad de resultados y en CustomLabel podremos nombrar la columna como queramos, para el caso, la llamaremos «IP ORIGEN».
También vamos a crear un Sub-Bucket con Terms como Sub-Aggregation, username.raw como Field, 100 en Size y pondremos como nombre de columna «USUARIO».
Tal y como lo hemos dejado, no obtendremos información de utilidad, hay que aplicar un filtro a los resultados utilizados por la vista, así que vamos a utilizar dos filtros y los vamos a guardar de distinta forma. La primera será para obtener los fallos de inicio de sesión:
Y guardamos la vista como «SSH_login_fail_Chart».
Luego modificamos el filtro con la siguiente búsqueda:
Y también la guardamos pero con el nombre «SSH_login_successful».
Si probamos estas ultimas vistas obtendremos algo similar a esto:
Por último solo nos queda montar nuestro Dashboard con las vistas que hemos creado. Así que vamos a la pestaña Dashboard y vamos añadiendo las vistas creadas con el icono con el símbolo «+». Podemos mover y redimensionar las vistas como queramos, obteniendo un resultado final similar a este:
Recordar guardarlo con un nombre reconocible para utilizarlo en el futuro.
Con esto terminamos la implantación de ELK, así que nos quedará experimentar con la seguridad y profundizar sobre muchos otros aspectos.
Referencias de interés:
- https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html
- https://www.elastic.co/blog/kibana-aggregation-execution-order-and-you