Ceci est une ancienne révision du document !


Mise en place d'un SIEM avec ELK

Introduction

Cette procédure permet de mettre en place un SIEM grâce à la suite ELK : le combo d'ElasticSearch, LogStash, Kibana et les beats.

Topologie du LAB

Architecture du lab SIEM avec ELK

Pré-requis

Ici nous aurons besoin de :

  • 1 machine sous Linux qui servira de serveur ELK
  • 1 machine cliente sous Windows qui servira à tester les beats
  • 1 machine cliente sous Linux qui servira à tester l'envoi de logs

Instructions

Installation d'ElasticSearch

Pour installer la suite ELK, il faut passer par le dépôt officiel d'Elastic. On va donc commencer par ajouter sa clé de signature.

  • Sous Debian/Ubuntu commencer par installer les paquets apt-transport-https et gnupg2 :
apt-get install apt-transport-https gnupg2
  • Puis ajouter la clé :
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  • Sous RedHat/CentOS/Fedora, c'est différent :
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Ensuite, on ajoute le dépôt dans la liste du système :

  • Pour Debian/Ubuntu, entrer la commande suivante :
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-8.x.list
  • Pour les systèmes RedHat/CentOS/Fedora, créer un fichier nommé elastic.repo dans le répertoire /etc/yum.repos.d contenant :
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Maintenant, on peut mettre à jour la liste de paquets disponibles et installer ElasticSearch à l'aide du gestionnaire de paquets integré (apt ou yum) :

  • Pour les distributions Debian :
apt-get update -y && apt-get install elasticsearch
  • Pour les distributions RedHat :
sudo yum install --enablerepo=elasticsearch elasticsearch

De mon côté, sous Debian, ça donne : Installation d'ElasticSearch

Afin de vérifier qu'ElasticSearch fonctionne correctement, le démarrer (il peut être long) :

systemctl start elasticsearch

Si celui-ci ne se lance pas, il est possible de regarder plus précisement pourquoi dans ses logs :

journalctl -f -u elasticsearch

Une fois le service ElasticSearch actif, utiliser la commande curl ou un navigateur web pointant à l'adresse localhost:9200 :

Le service devrait alors répondre :

Réponse d'Elasticsearch

Pour terminer l'installation d'ElasticSearch, l'activer au lancement de la machine :

systemctl enable elasticsearch

Configuration d'Elasticsearch

La sécurité est configurée par défaut dans Elasticsearch. Néanmoins, on va devoir adapter la configuration à notre cas d'usage.

Si besoin, commencer par réinitialiser le mot de passe du compte elastic (l'administrateur par défaut) et le noter dans un coin :

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic 

Ouvrir la configuration d'Elasticsearch et remplir/décommenter les paramètres suivants :

  • cluster.name (optionnel) : nom du cluster
  • node.name : nom du nœud
  • network.host : adresse IP du nœud
  • http.port : port utilisé par elasticsearch (par défaut 9200)
  • cluster.initial_master_nodes : recopier le nom du nœud

La configuration doit ressembler à ceci (j'ai volontairement retiré les lignes inutiles) :

# Use a descriptive name for your cluster:
cluster.name: project-one

# Use a descriptive name for the node:
node.name: master-node-1.lab
 
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/elasticsearch

# Path to log files:
path.logs: /var/log/elasticsearch

# By default Elasticsearch is only accessible on localhost. Set a different
# address here to expose this node on the network:
network.host: 172.16.10.1

# By default Elasticsearch listens for HTTP traffic on the first free port it
# finds starting at 9200. Set a specific HTTP port here:
http.port: 9200

# Enable security features
xpack.security.enabled: true
xpack.security.enrollment.enabled: true

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
  
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["master-node-1.lab"]

# Allow HTTP API connections from anywhere
# Connections are encrypted and require user authentication
http.host: 0.0.0.0

Lancer le service elasticsearch, la connexion HTTPS à elasticsearch doit être fonctionnelle.

Ajout de nœuds au cluster (facultatif)

Pour ajouter des nœuds au cluster, on doit d'abord générer un token pour le nœud principal :

 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node

Copier le token et le convertir en texte pour vérifier que l'adresse IP et la version d'elasticsearch sont corrects :

echo 'token' | base64 -d

Si ce n'est pas le cas, désactiver l'interface réseau problématique, redémarrer ES et regénérer le token en ajoutant un -f à la commande précédente.

Installer Elasticsearch sur le nouveau nœud et configurer les paramètres suivants dans /etc/elasticsearch/elasticsearch.yml :

  • cluster.name : nom du cluster (le même que sur le 1er nœud)
  • node.name : nom du nœud
  • network.host : adresse IP du nœud
  • http.port : port 9200 par défaut (décommenter la ligne)

Puis, utiliser la commande suivante pour associer le nœud au cluster en lui indiquant le token du premier nœud :

usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token token 

Répondre ypour confirmer puis démarrer Elasticsearch à la suite de l'opération.

Installation et configuration de Kibana

Nous allons désormais installer l'interface graphique d'ELK qui nous permettra de configurer des dashboards et d'afficher les logs que l'on va collecter :

  • Pour les distributions Debian :
apt-get install kibana
  • Pour les distributions RedHat :
sudo yum install --enablerepo=elasticsearch kibana

Puis, dans le fichier de configuration de Kibana /etc/kibana/kibana.yml décommenter l'attribut elasticsearch.hosts: et vérifier qu'il pointe bien vers localhost:9200 :

Configuration de l'adresse d'elasticsearch dans Kibana

Décommenter aussi les attributs server.port et server.host, remplacer localhost par l'adresse IP depuis laquelle Kibana devrait être joignable sur le réseau, puis enregistrer le fichier :

Enfin, démarrer Kibana :

systemctl start kibana

L'activer au lancement de la machine également :

systemctl enable kibana

Valider que Kibana fonctionne en ouvrant la page d'accueil de Kibana dans un navigateur web https://ipduserveur:5601 :

Accueil de Kibana

Installation de LogStash

LogStash, dernier composant majeur d'ELK, est l'application en arrière-plan qui va recevoir et traiter les logs avant de les stocker dans ElasticSearch.

Sources