Table des matières

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. Pour installer la suite ELK sous forme de conteneur docker, voire cette page

Topologie du LAB

Architecture du lab SIEM avec ELK

Pré-requis

Ici nous aurons besoin de :

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.

apt-get install apt-transport-https gnupg2
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

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

echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-8.x.list
[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) :

apt-get update -y && apt-get install elasticsearch
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 :

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

Redémarrer 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 :

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. Le nœud est ajouté au cluster.

On peut lancer les requêtes curl suivantes sur le nouveau nœud avec le compte admin du premier pour valider que l'opération a réussi :

curl -k -u elastic:smKNdSN1Fp8H=F0y8Heh https://172.16.10.2:9200/_cluster/health?pretty 
curl -k -u elastic:smKNdSN1Fp8H=F0y8Heh https://172.16.10.2:9200/_cat/nodes

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 :

apt-get install kibana
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

📕 Installation d'Elasticsearch

📕 Configuration de la sécurité ES (partie 1)

📕 Configuration de la sécurité ES (partie 2)