Un ED (casi EDR) gratis para tu casa y/o PyME (Parte 1)

Este es un artículo basado en una charla que quería tener para una conferencia que planeábamos hacer en conjunto con Whilolab para inicios del 2020. Pero claro… pandemia.

La idea es mostrar un poco cómo se puede tener un sistema de monitoreo de comportamiento al estilo de un EDR pero sin Respuesta (es muy burdo, pero algo es algo) y así poder expandir lo que habíamos hablado antes con el Workshop de monitoreo.

Para esto nos apoyamos mucho en el trabajo que ya han hecho otros en desarrollar varias piezas de este puzzle, como la gente de Elastic que nos provee de un magnífico sistema de almacenamiento y búsqueda de logs, el cual es base para muchas de las otras herramientas que vamos a usar.

Tampoco nos podemos olvidar del proyecto Sysmon, que es un tremendo avance para mejorar sustancialmente los logs de eventos de Windows y poder darle verdadera utilidad.

El proyecto final debería ser algo así (lamento mis dibujos, pero soy pésimo con eso):

Diagrama completo

Primera Parte: Instalación de ELK

La primera parte es generar una instalación de los 3 componentes de ELK: Elasticsearch, Logstash y Kibana.

La recomendación es tener un servidor dedicado para estos fines, un equipo con un sistema Linux que aguante estos componentes. Yo reutilicé un equipo viejo que tenía, le instalé Ubuntu y le coloqué un poco más de RAM para llegar a los 8 GB.

Para comenzar no es malo tampoco jugar con VM (https://bitnami.com/stack/elk/virtual-machine) o Docker (https://logz.io/blog/elk-stack-on-docker/), pero como yo ya tenía un equipo que podía transformar en “server”, lo dejaré así.

Podrías seguir alguno de los muchos tutoriales online para esto (por ejemplo: https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-18-04-es), y montar los servicios básicos no es tan complejo, solo requiere un poco de tiempo y dedicarle memoria RAM a Elasticsearch. En mi caso en el equipo de 8 GB puedes dejar máximos 4 GB para Elasticsearch.

Si quieren un código rápido para la instalación en Ubuntu (el sed lo deja en el puerto 19200, por si acaso)

## Instalar Elasticsearch
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

sudo apt update
sudo apt install elasticsearch

sed -i -e "s/#http.port:/http.port:/" -e "s/http.port:\s+9200/http.port: 19200/" /etc/elasticsearch/elasticsearch.yml

## Editar el archivo de acuerdo a la configuración que requieran
#sudo nano /etc/elasticsearch/elasticsearch.yml

sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Luego de Elasticsearch, tenemos que instalar Kibana y Logstash, la instalación es bastante similar y rápida, al tener el repositorio ingresado podemos sencillamente instalar con apt directamente.

Lo que sí es relevante, es que con Logstash necesitamos definir una entrada para los eventos que vamos a recolectar de los equipos Windows, en este caso, vamos a definir que en el puerto 9001 local dejaremos entrar un input tipo “winlogbeat“.

## Instalar Logstash

sudo apt install logstash

sudo echo 'input {
  beats {
    port => 9001
    type => "winlogbeat"
  }
}
output {
  if [type] == "winlogbeat" {
    elasticsearch {
      hosts => "localhost:9200"
      manage_template => false
      index => "%{[@metadata][beat]}-%{+YYYY.MM}"
      document_type => "%{[@metadata][type]}"
    }
  }
}
' > /etc/logstash/conf.d/50-Winlogbeat-Input.conf

systemctl enable logstash
systemctl restart logstash


## Instalar Kibana

sudo apt install kibana
# Una pequeña configuracion para poder tener logs y el pid definido (ayuda para los restart)
sudo sed -i -e "s/^pid.file/#pid.file/" -e "s/^logging.dest/#logging.dest/" -e "s/^logging.verbose/#logging.verbose/" /etc/kibana/kibana.yml
sudo echo "pid.file: /var/run/kibana.pid" >> /etc/kibana/kibana.yml
sudo echo "logging.dest: /var/log/kibana/kibana.log" >> /etc/kibana/kibana.yml
sudo echo "logging.verbose: false" >> /etc/kibana/kibana.yml
sudo touch /var/run/kibana.pid
sudo chown kibana:kibana /var/run/kibana.pid
sudo mkdir -p /var/log/kibana/
sudo chown kibana:kibana /var/log/kibana/

systemctl enable logstash
systemctl restart logstash

(Opcional) Instalación de NGINX sobre ELK

Como paso extra, a mi me gusta instalar Nginx sobre Elasticsearch y Kibana para darme un poco más de control sobre el tráfico hacia estas aplicaciones.

Nginx solamente lo usaremos como proxy para mostrar el portal de Kibana y para controlar también el acceso a la API de Elasticsearch (por eso la instalación en el puerto 19200 anteriormente).

Para ello tengo unos gists preparados en https://gists.github.com/JoyDragon, pero para hacer la instalación más fácil pueden sencillamente hacer lo siguiente:

## Instalar Nginx

sudo apt install nginx
sudo curl -q "https://gist.githubusercontent.com/joydragon/64e22d0f28724c24f526de806f7ae67a/raw/391f37bb03a2aa2c68cbe5f07af21014661b4cea/nginx_elastic_restricted.conf" > /etc/nginx/sites-enabled/elastic
sudo curl -q "https://gist.githubusercontent.com/joydragon/9df666a3dd08b40ec1f7f06ad333ec05/raw/e4168559af58b246b0bb0931e6fc48aaea9cacfd/nginx_kibana.conf" > /etc/nginx/sites-enabled/elastic
unlink /etc/nginx/sites-enabled/default

systemctl enable nginx
systemctl restart nginx

Al terminar con todo esto podemos revisar en nuestro servidor en el puerto 80 para encontrarnos con la instalación de Kibana.

Luego seguimos con el siguiente artículo para la segunda parte y la instalación de los agentes y luego las alertas con ElastAlert.

Muchas gracias por leer hasta acá.

4 respuestas a “Un ED (casi EDR) gratis para tu casa y/o PyME (Parte 1)

Add yours

Deje un comentario

Crea una web o blog en WordPress.com

Subir ↑