Mòdul Professional 1: ELK Stack

Índex

1 Què és ELK Stack

elk-stack-elkb-diagram.jpg

Figure 1: Estructura del ELK Stack.

1.1 Beats

Són els "sensors" encarregats de recopilar informació dels sistemes. En tenim de prefets, però n'hi han alguns que es poden utilitzar de forma genèrica i després mitjançant Logstash fer les personalitzacions pertinents. Per tant s'encarreguen de llegir/recollir la informació en el sistema a monitoritzar i enviar-la o be directament a ElasticSearch o com a pas previ a Logstash.

1.2 Logstash

És una de les peçes complicades de configurar / personalitzar de tot l'entramat ja que s'ocupa de pre-processar la informació que es rep dels Beats, homogeneitzant-la amb altres origens, enriquint-la amb informació addicional i finalment transferint-la a ElasticSearch.

1.3 ElasticSearch

ElasticSearch és bàsicament la base de dades on es bolquen tots els logs.

1.4 Kibana

Finalment Kibana és un altre peça on dedicar-hi esforços d'estudi ja que és el frontend de ElasticSearch on podem realitzar les cerques d'informació, crear panells personalitzats on visualitzar dades (i com visualitzar-les), etc.

2 ELK Stack dins del CSIRT

En realitat està emmarcat dins dels altres departaments, concretament dins del SOC i dins del CiberThreat Inteligence.

3 Instal·lació

3.1 Ordre d'instal·lació

  • ElasticSearch
  • Kibana
  • Logstash
  • Beat

3.2 Màquina virtual

Doneu a aquesta màquina molts recursos (CPU i RAM) ja que el stack consumeix molt.

3.3 Instal·lar repositoris a Debian

apt install gnupg
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update

3.4 Instal·lació bàsica (sense configuracions)

Tenim varies opcions per instal·lar amb diferents avantatges e inconvenients, en especial en aquest tipus de programari:

  • Repositoris: Simplicitat d'instal·lació, però les actualitzacions poden donar problemes en crear incompatibilitats entre elements del stack o amb les configuracions personalitzades que tinguem creades. Si utilitzem aquesta opció és recomanable tenir sempre un backup actualitzat de les configuracions i en actualitzar el sistema instal·lar la nova configuració per defecte, comparar amb la personalitzada i en fer una "fusió" de forma manual.
  • Sources (codi font): Compilant el codi per a la nostre plataforma, normalment no presenta gaires avantatges i dona molta feina.
  • TARs: Permet instal·lar de forma manual i per tant també actualitzar de forma manual. Potser és l'opció més sensata per a entorn productius, però caldrà fer-ho tot manualment (pre-requisits, usauris i permisos, serveis, etc).

Per a estudiar ELK Stack utilitzarem l'opció més ràpida i senzilla per poder anar a la part que ens interessa: La recollida d'indicadors i cerca d'incidències. Per tant instal·larem directament des de repositoris.

Per evitar els problemes de l'actualització automàtica, quan actualitzem el sistema haurem de tenir molt present verificar que s'actualitzi tot el stack complert, tenir backup dels arxius de configuració i comparar els canvis dels arxius de configuració nous i els nostres personalitzats (a part del backup que hem fet, en actualitzar les versions antigues dels arxius de configuració hauríen de quedar guardades de forma automàtica amb l'extensió .dpkg-old). Per tant tenir present que l'actualització és "perillosa".

També podem marcar els paquets per a que no s'actualitzin amb sudo apt-mark hold <nom_paquet>, els podem desmarcar amb sudo apt-mark unhold <paquet> i mostrar-los amb sudo apt-mark showmanual o sudo apt-mark show-hold. Aquesta serà l'estratègia que seguirem, de manera que quan vulguem actualitzar el sistema ho puguem fer tranquilament i quan vulguem actualitzar el stack ho puguem fer de forma controlada.

3.4.1 Instal·lació de ElasticSearch

sudo apt update && sudo apt upgrade -y && sudo apt auto-remove
sudo apt install elasticsearch
sudo apt-mark hold elasticsearch
sudo apt-mark showhold
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch

Modificacions a la configuració mitjançant elasticsearch.yml, tanmateix en aquesta pràctica no ens caldrà modificar res, però val la pena donar-hi un cop d'ull.

Per verificar que tot funciona podem executar curl localhost:9200 que és on està escoltant elasticsearch.

elasticsearch_0.png

Figure 2: Verificació de funcionament d'elasticsearch, tot OK.

3.4.2 Instal·lació de Logstash

sudo apt install logstash
sudo apt-mark hold logstash
sudo apt-mark showhold

Logstash disposa de dos tipus d'arxius de configuració:

/etc/logstash/logstash.yml
On s'emmagatzema la configuració del servei com a tal.
/etc/logstash/conf.d/
On crearem arxius .conf amb les piplines que volem crear.

De /etc/logstash/logstash.yml per ara no ens interessa configurar res ja que la major part són configuracions de Cloud o d'optimització, i el nodename si no modifiquem agafa per defecte el hostname del sistema.

Respecte a les pipelines crearem una anomenada local.conf amb el següent contingut:

input {
  beats {
      port => 5044
  }
}

output {
  elasticsearch {
    hosts => "localhost:9200"
  }
}

Fixeu-vos que escoltarem una entrada de beats i, sense cap processament especial, ho enviarà a un elasticsearch en localhost. Notar que podrem tenir varies entrades, de varis tipus i varies sortides, de varis tipus i a varis hosts si volem/necessitem.

Finalment llançes i verifiquem que tot funcioni correctament:

sudo systemctl enable logstash
sudo systemctl start logstash
sudo systemctl status logstash

3.4.3 Instal·lació del Beat

Aquí podriem optar per varis beats, però per instal·lar-ne un de simple optarem per filebeat que és un dels que més utilitzarem. Aquest beat ens permetrà llegir logs del sistema.

sudo apt install filebeat
sudo apt-mark hold filebeat
sudo apt-mark showhold

Aquí si que ens caldrà configurar el beat mitjançant sudo vim /etc/filebeat/filebeat.yml modificant de la secció Filebeat INPUTS:

#- type: filestream
- type: log
  #enabled: false
  enabled: true

De la secció Outputs simplement comentem les dues línies actives corresponents a elasticsearch i descomentem les corresponents a logstash.

#output.elasticsearch:
#hosts: ["localhost:9200"]
output.logstash:
  hosts: ["localhost:5044"]

I com sempre, iniciem el servei i verifiquem que no dona error:

sudo systemctl enable filebeat.service
sudo systemctl start filebeat.service
sudo systemctl status filebeat.service

3.4.4 Instal·lació de Kibana

Per acabar instal·larem Kibana que és el frontend amb el qual consultarem, cercarem i relacionarem tota la informació que ens arribi.

sudo apt install kibana
sudo apt-mark hold kibana
sudo apt-mark showhold

De nou l'arxiu de configuració el tenim a sudo vim /etc/kibana/kibana.yml, però en principi tan sols ens caldrà descomentar l'opció server.host: "localhost" i modificar localhost per la IP del servidor, d'aquesta forma podrem accedir des d'un altre PC amb el navegador.

Per acabar i com sempre:

sudo systemctl enable kibana
sudo systemctl start kibana
sudo systemctl status kibana

Per verificar si funciona obrirem un navegador i visitarem la web <ip>:5601. Aquí anirem a la secció de Discovery i automàticament ens indicarà que cal crear un índex.

kibana_0.png

Figure 3: En entrar a la secció de Discovery de Kibana en demana per crear un índex.

Aquest índex el crearem afegint un name que serà el patró logstash*, i un timestamp, en aquest cas @timestamp.

kibana_1.png

Figure 4: Configurem el índex indicant un patrò per delimitar-lo i un camp de timestamp.

Un cop fet això, ja podem accedir i veure que estem rebent dades.

kibana_2.png

Figure 5: Verifiquem que rebem dades i que per tant tot el stack està ben instal·lat i configurat.

Cal dir, que a partir d'aquí començara la part difícil: estendre els sensors (beats) i configurar correctament i de forma extensiva logstash i kibana.

4 Aprofundint en Beats

4.1 MetricBeat

Vist en activitat.

4.2 PacketBeat

Ofereix monitorització de xarxa. Aquesta monitorització es configura en la secció de inputs i bàsicament ens ofereix tres opcions:

4.2.1 Flows

Un flux és un conjunt de paquets, temporalment propers, que comparteixien certes característiques com adreça d'origen, de destí i protocol.

Per tant aquest és un mètode de recolecció que ens interessa per poder analitzar a posteriori dades amb més significat.

4.2.2 Protocols

Podem configurar un type de protocol (compte que tan sols és una etiqueta) i els seus ports relacionats.

4.2.3 Processos

A la documentació de referència podem veure que també existeix la possibilitat de configurar el beat estipulant un procés, i monitoritzar totes les seves comunicacions.

4.3 HeartBeat

Pot substituïr el tradicional monitoritge de la infraestructura realitzat amb Nagios o Zabbix, ja que bàsicament podrem fer tres tipus de monitoratge:

icmp
Verificar si un equip està responent a pings.
tcp
Verificar si un servei està escoltant en un determinat port.
http
Verificar que un servidor web està responent consultes.

Com podem observar, aquest beat és interessant instal·lar-lo en un equip (com per exemple el propi Elk) i que monitoritzi la resta d'elements de la xarxa (servidors, equips, impressores, elements de xarxa, etc).

La temporització de les verificacions es pot especificar en format cron com és habitual.

4.4 WinLogBeat

Beat específic per monitoritzar els events d'un equip Windows. No té una configuració específica.

4.5 AuditBeat

El mateix que l'anterior però per sistemes Linux.

4.6 Community Beats

Podem trobar altres beats interessants creats i mantinguts per la comunitat. Per tant vigilem ja que no tenen suport oficial. - Informe VM Metasploitable2.

4.7 FileBeat

Monitoritza arxius i per tant s'utilitza habitualment per monitoritzar logs. Aquest potser és un dels més versàtils i difícils de configurar ja que depèn de la complexitat de l'arxiu que vulguem monitoritzar.

Per ara ens conformarem en monitoritzar arxius de log del sistema, que per defecte ja sap interpretar.

5 Aprofundint en Logstash

6 Aprofundint en Kibana

Data: 2021-07-29 dj. 00:00

Autor: Raul Gimenez Herrada

Created: 2022-02-06 dg. 19:51