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 | apt-key add -
  • 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/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.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 et sécurisation d'Elasticsearch

Dans l'état actuel, Elasticsearch n'est pas sécurisé, n'importe qui sur le réseau peut y accèder. De plus, si on veut créer un cluster il va falloir ajouter des paramètres supplémentaires. Cette étape est facultative si on veut juste installer un ELK de test sans aucune redondance ni sécurité.

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 

Ensuite on va générer 3 certificats SSL :

  • Un pour la CA :
    /usr/share/elasticsearch/bin/elasticsearch-certutil ca
  • Un pour le noeud :
    /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
  • Un pour l'accès HTTPS :
    /usr/share/elasticsearch/bin/elasticsearch-certutil http

    (:!: Attention celui-ci demande beaucoup d'informations)

Une fois les certificats générés, il faut les copier dans /etc/elasticsearch et s'assurer que l'utilisateur elasticsearch en soit le propriétaire. Le certificat HTTP est par défaut livré dans une archive .zip, il faut donc la décompresser pour pouvoir récupérer le certificat.

Puis, on va enregistrer les mots de passes des certificats dans la keystore (coffre-fort) d'elastic :

  • Pour le certificat de la CA :
    /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
  • Pour le certificat du noeud :
    /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
  • Pour le certificat HTTP :
    /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

Enfin, ouvrir le fichier /etc/elasticsearch/elasticsearch.yml et ajouter/décommenter les lignes suivantes :

cluster.name: project-one #nom du cluster (facultatif)
node.name: master-node-1.lab #nom du noeud (facultatif)
cluster.initial_master_nodes: ["master-node-1.lab"] #liste des master nœuds du cluster (facultatif)

xpack.security.enabled: true #Activer les fonctionnalités de sécurité
xpack.security.enrollment.enabled: true #Activer l'enrôlement via tokens
xpack.security.transport.ssl:
  enabled: true #activer la communication SSL entre les nœuds 
  verification_mode: certificate #mode de vérification SSL par certificat
  keystore.path: certs/transport.p12 #emplacement du certificat du nœud
  truststore.path: certs/transport.p12 #emplacement du certificat du nœud
xpack.security.http.ssl: 
  enabled: true #activer HTTPS
  keystore.path: certs/http.p12 #emplacement du certificat HTTPS

Pour terminer, relancer le service elasticsearch. La connexion à elasticsearch en HTTPS doit être fonctionnelle.

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