ELK Stack como herramienta forense 1a parte

Introducción

 

Una de mis actividades de trabajo, es realizar análisis forense sobre logs de varios servidores que sufrieron algún tipo de incidente informático. El análisis de logs suele ser una tarea muy complicada, debido a la gran cantidad de registros que son almacenados en archivos de texto plano. Luego de probar varias herramientas de análisis de logs, la mejor que se apatado a mi trabajo, fue el conjunto de Elasticsearch, Logstash y Kibana. La combinación de estas tres herramientas se las conoce como ELK Stack, actualmente fue liberada la versión 6.0 que puede ser descargada directamente del sitio oficial de Elastic[1].

Objetivo

 

Instalar y configurar los servidores necesarios para el funcionamiento de ELK Stack, que servirá para el procesamiento, indexación, y análisis forense de grandes volúmenes de información. El artículo pienso seguirlo ampliando con varias funcionalidades que podemos sacar de ELK y utilizarlo en casos de la vida real para forense de servidores, también explicaré como personalizar los dashboards de Kibana, cargar documentos en formato CSV, uso de expresiones regulares y muchas cosas más según el tiempo.

 

El escenario de pruebas lo he configurado con las siguientes direcciones IP:

Elasticsearch    192.168.0.1

Logstash           192.168.0.2

Kibana              192.168.0.3

 

Logstash se encargará leer los logs que le indiquemos y enviarlos a elasticsearch para que los almacene,  y los procese, finalmente, elasticsearch se encargará de enviar la información de logs al servidor kibana, para que se pueda realizar consultas y visualizar la información mediante gráficas.

Requerimientos

 

Para este propósito, se requiere tres máquinas virtuales con Ubuntu Server 17.04, en donde se instalará las herramientas Logstash, Elasticsearch, Kibana.

 

Añadir las fuentes de instalación de ELK Stack

 

# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-5.x.list

# apt-get update

Instalación y configuración de Elasticsearch

 

Elasticsearch es un potente motor que permite almacenar, indexar y búscar de información proveniente de alguna fuente de datos como archivos de Logs, ficheros en texto plano, etc. Está desarrollado en Java, por lo tanto, requiere de Java para poder ser ejecutado, la versión mínima debe ser la 8. Para instalar Java ejecutamos el siguiente comando:

 

# apt-get install openjdk-8-jre-headless

 

Verificamos la versión instalada

 

# java -version

openjdk version "1.8.0_131"

OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.10.2-b11)

OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

 

Instalación

 

# apt-get install elasticsearch

 

Configuración

 

Elasticsearch  fue desarrollado en Java y es el motor que se encarga de almacenar y analizar las datos que provienen de alguna fuente de información. El archivo principal de configuración se llama elasticsearch.yml y está ubicado en la ruta /etc/elasticsearch/.

 

# nano /etc/elasticsearch/elasticsearch.yml

 

Dentro del archivo de configuración, ubicamos las siguientes líneas:

 

#cluster.name: my-application  [:línea 17]

#node.name: node-1                  [:línea 23]

#network.host: 192.168.0.1       [:línea 56]

 

Descomentamos, y cambiamos por los parámetros de acuerdo a nuestras necesidades:

 

cluster.name: monitoreo-globo    # Nombre del servidor elasticsearch

node.name: node-globo-es01       # Nombre del nodo

network.host: 192.168.0.1           # Dirección IP del servidor

 

Grabar los cambios en nano con ctrl + x

 

Memoria Virtual

 

Elasticsearch usa mmap File System (archivos de mapa de memoria) para almacenar los índices a directorios, en donde, el sistema operarivo es quien limita la cantidad de memoria para almacenar dicha información. Esto en ocaciones puede dar problemas o errores de excepciones de memoria. Para consultar el número máximo asignado para el mapeo de memoria virtual que pueden usar los procesos, se usa el comando sysctl, con el parámetro max_map_count:

 

# sysctl vm.max_map_count

 

Para que elasticsearch pueda hacer uso de un número más grande, se puede usar el comando:

 

# sysctl -w vm.max_map_count=262144

 

Incremento de uso de memoria por Java

 

Java suele usar por defecto 1Gb  como espacio de memoria (HEAP) en la ejecución de procesos, por experiencia tuve muchos problemas como excepciones que no solo se relacionaban con el mapeo de memorioa virtual, sino que se debían a que Java se sobrecargaba, para solventar esto fue necesario incrementar el uso de recursos en el espacio memoria. Recomiendo  setear la variable de entorno ES_HEAP_SIZE al tamaño un poco menor al de la memoria asignada a nuestro servidor Linux.

 

# export $ES_HEAP_SIZE=8g

 

Consultamos el comando echo podremos consultar:

 

# echo  $ES_HEAP_SIZE

8g

 

Inicio del servicio

 

Iniciamos el servicio de elasticsearch con el siguiente comando service, o también se puede usar systemctl start.

 

# service elasticsearch start

 

Ahora hay que decirle al sistema que cada vez que arranca Linux, se inicie elasticsearch:

 

# systemctl enable elasticsearch

Synchronizing state of elasticsearch.service with SysV service script with /lib/systemd/systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install enable elasticsearch

Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.

 

Pruebas

 

Si elasticsearch no generó errores en el momento de iniciar se debe cargar el proceso en el puerto 9200. para las pruebas usamos el comando curl que permitirá consultar la información del servidor o nodo elasticsearch:

 

# curl http://192.168.0.1:9200

 

{

  "name" : "node-globo-es01",

  "cluster_name" : "monitoreo-globo",

  "cluster_uuid" : "U7nGmfMlQ9ek6UI9q12V1A",

  "version" : {

    "number" : "5.6.3",

    "build_hash" : "253032b",

    "build_date" : "2016-10-26T04:37:51.531Z",

    "build_snapshot" : false,

    "lucene_version" : "6.6.1"

  },

  "tagline" : "You Know, for Search"

}

 

La consulta del nodo también se la puede realizar desde un navegador web:

 

Consulta de errores y problemas

 

La instalación por defecto de elasticsearch, almacena los logs en el directorio /var/log/elasticsearch/, la siguiente es una pantalla del archivo de logs principal de elasticsearch.

 

Referencias

 

[1] Descarga de ELK Stack, https://www.elastic.co/downloads

Leave a Reply

Your email address will not be published. Required fields are marked *