Skip to main content

Command Palette

Search for a command to run...

Mise en place de l'XDR Wazuh

Updated
6 min read
Mise en place de l'XDR Wazuh
Z

19 🇨🇵 eWPT | eJPT

Partie A - Création VM

On commence par cloner la VM Template à l'aide KVM en choisissant le bridge br1 pour le LAN.

Changement nom d'hôte

hostnamectl set-hostname xdr-tp2

Réservation d'adresse DHCP

Sur DHCP1 & DHCP2 :

nano /etc/dhcp/dhcpd.conf
# dans la partie privée

host xdr-tp2 {
                        # adresse MAC de xdr-tp2
                        hardware ethernet 52:54:00:c1:4a:5e;
                        fixed-address 10.31.192.24;
                }
# on redémarre le service dhcp pour appliquer les changements
systemctl restart isc-dhcp-server

Sur xdr-tp2 :

dhclient -r # efface les anciennes configurations dhcp
dhclient -v # effectue une nouvelle requête dhcp

On voit que la machine a bien récupéré l'adresse 10.31.192.24 que le dhcp2 lui a donnée.

On voit que la machine a bien récupéré l'adresse 10.31.192.24 que le dhcp2 lui a donnée.

Partie B - Installation Indexeur Wazuh

Qu'est ce que Wazuh ?

Wazuh est une solution open source très complète pour la sécurité des endpoints, combinant la détection d'intrusion, la gestion des logs, la conformité réglementaire et la sécurité des endpoints, et compatible avec une large gamme de systèmes d'exploitation. Cette solution offre des fonctionnalités très utiles pour la sécurité des endpoints, telles que la détection de malware, la surveillance en temps réel, la collecte de données système, la détection de rootkits et des alertes en cas d'activité suspecte pour faciliter la détection précoce des menaces.

Ajout du dépôt Wazuh

apt update
apt install gnupg apt-transport-https curl
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
apt update

Génération des certificats

curl -sO https://packages.wazuh.com/4.4/wazuh-certs-tool.sh
curl -sO https://packages.wazuh.com/4.4/config.yml
nano config.yml
nodes:
  # Wazuh indexer nodes
  indexer:
    - name: node-1
      ip: 10.31.192.24

  server:
    - name: wazuh-1
      ip: 10.31.192.24

  # Wazuh dashboard nodes
  dashboard:
    - name: dashboard
      ip: 10.31.192.24
# génération du certificat
./wazuh-certs-tool.sh -A

tar -cvf ./wazuh-certificates.tar -C ./wazuh-certificates/ .
rm -rf ./wazuh-certificates

Installation des noeuds

apt-get install debconf adduser procps wazuh-indexer
nano /etc/wazuh-indexer/opensearch.yml
# on ajoute cette ligne
network.host: "10.31.192.24"

Déploiement des certificats

NODE_NAME=node-1
mkdir /etc/wazuh-indexer/certs
tar -xf ./wazuh-certificates.tar -C /etc/wazuh-indexer/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./admin.pem ./admin-key.pem ./root-ca.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME.pem /etc/wazuh-indexer/certs/indexer.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME-key.pem /etc/wazuh-indexer/certs/indexer-key.pem
chmod 500 /etc/wazuh-indexer/certs
chmod 400 /etc/wazuh-indexer/certs/*
chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/certs
systemctl daemon-reload
systemctl enable wazuh-indexer
systemctl start wazuh-indexer
systemctl status wazuh-indexer

Initialisation du cluster

/usr/share/wazuh-indexer/bin/indexer-security-init.sh

Test du cluster

# on se connecte avec les identifiants par défaut sur le cluster 
curl -k -u admin:admin https://10.31.192.24:9200

On voit que le cluster répond correctement.

Partie C - Installation Serveur Wazuh

Ajout du dépôt Wazuh

Sur xdr-tp2 :

apt update
apt install gnupg apt-transport-https curl
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
apt update

Installation de WazuhManager

Sur xdr-tp2 :

apt-get -y install wazuh-manager
systemctl daemon-reload
systemctl enable wazuh-manager
systemctl start wazuh-manager
systemctl status wazuh-manager

Installation de Filebeat

Filebeat est un agent léger permettant de récupérer et d'envoyer les logs système et applicatifs des hôtes vers le serveur Wazuh pour l'analyse et la détection de menaces.

Sur xdr-tp2 :

apt-get install filebeat
curl -so /etc/filebeat/filebeat.yml https://packages.wazuh.com/4.4/tpl/wazuh/filebeat/filebeat.yml

# créer un keystore Filebeat pour stocker en toute sécurité les credentials
filebeat keystore create
echo admin | filebeat keystore add username --stdin --force
echo admin | filebeat keystore add password --stdin --force

# télécharger les templates d'alertes
curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/4.4/extensions/elasticsearch/7.x/wazuh-template.json
chmod go+r /etc/filebeat/wazuh-template.json

# installer le module Wazuh pour Filebeat
curl -s https://packages.wazuh.com/4.x/filebeat/wazuh-filebeat-0.2.tar.gz | tar -xvz -C /usr/share/filebeat/module

nano /etc/filebeat/filebeat.yml
# ajoute ces lignes
hosts: ["10.31.192.24:9200"]
  protocol: https
  username: admin
  password: admin

Déploiement des certificats

NODE_NAME=node-1
mkdir /etc/filebeat/certs
tar -xf ./wazuh-certificates.tar -C /etc/filebeat/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./root-ca.pem
mv -n /etc/filebeat/certs/$NODE_NAME.pem /etc/filebeat/certs/filebeat.pem
mv -n /etc/filebeat/certs/$NODE_NAME-key.pem /etc/filebeat/certs/filebeat-key.pem
chmod 500 /etc/filebeat/certs
chmod 400 /etc/filebeat/certs/*
chown -R root:root /etc/filebeat/certs
systemctl daemon-reload
systemctl enable filebeat
systemctl start filebeat

Tests de filebeat

filebeat test output

 On voit que filebeat se connecte bien avec l'Elasticsearch.

Partie D - Installation Dashboard Wazuh

apt-get install debhelper tar curl libcap2-bin wazuh-dashboard
nano /etc/wazuh-dashboard/opensearch_dashboards.yml
# ajouter ces 2 lignes 
server.host: 10.31.192.24
opensearch.hosts: https://10.31.192.24:9200

Déploiement des certificats

NODE_NAME=node-1
mkdir /etc/wazuh-dashboard/certs
tar -xf ./wazuh-certificates.tar -C /etc/wazuh-dashboard/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./root-ca.pem
mv -n /etc/wazuh-dashboard/certs/$NODE_NAME.pem /etc/wazuh-dashboard/certs/dashboard.pem
mv -n /etc/wazuh-dashboard/certs/$NODE_NAME-key.pem /etc/wazuh-dashboard/certs/dashboard-key.pem
chmod 500 /etc/wazuh-dashboard/certs
chmod 400 /etc/wazuh-dashboard/certs/*
chown -R wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs
systemctl daemon-reload
systemctl enable wazuh-dashboard
systemctl start wazuh-dashboard

On peut maintenant se connecter à l'interface web de Wazuh avec les credendials admin:admin à l'adresse : https://10.31.192.24/app/wazuh.

Mais une erreur apparaît au niveau des patterns d'alertes.

Cette erreur indique qu'ElasticSearch ne trouve pas le pattern d'erreur index, on va donc en ajouter un.

systemctl stop filebeat
curl -so template.json https://raw.githubusercontent.com/wazuh/wazuh/v4.4.0/extensions/elasticsearch/7.x/wazuh-template.json

# on push le template sur le serveur avec la méthode PUT
curl -XPUT -k -u admin:admin 'https://10.31.192.24:9200/_template/wazuh' -H 'Content-Type: application/json' -d @template.json
systemctl start filebeat

Quand on relance Wazuh, il n'y a plus d'erreurs et on accède correctement au dashboard.

Partie E - Ajout de clients

Ajout de règles firewall

Avant d'ajouter l'agent, il faut autoriser les communications sur les ports 55000, 1514 & 1515 pour que l'agent puisse communiquer avec le serveur Wazuh.

DMZ :

LAN :

Ajout de l'agent

Sur privdb2 :

apt install sudo curl
curl -so wazuh-agent.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.4.0-1_amd64.deb && sudo WAZUH_MANAGER='10.31.192.24' WAZUH_AGENT_NAME='privdb2' dpkg -i ./wazuh-agent.deb
nano /etc/hosts
# ajoute un enregistrement pour privdb2
10.31.192.34    privdb2
sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent

On voit que le client a correctement été ajouté

Partie F - Automatisation de l'ajout de clients

Maintenant, le but est de créer un script de déploiement d'agent pour pouvoir intégrer toutes les VMs à notre XDR sans bouger le petit doigt.

Ajout de l'utilisateur std au groupe sudo (sudoers)

Sur toutes les VMs :

apt install sudo
usermod -aG sudo std

Script Ansible

Sur Main server :

ssh-copy-id std@10.31.192.15 # faire toutes les VMs
apt update && apt install ansible -y
mkdir wazuh_agent_setup && cd wazuh_agent_setup
nano hosts
[wazuh_agents]
10.31.192.10
10.31.192.115
10.31.192.13
10.31.192.33
10.31.192.35
10.31.192.61
10.31.192.67
10.31.192.68
10.31.192.8
10.31.192.80
10.31.192.88
10.31.192.99
10.31.200.115
10.31.200.20
10.31.200.25
10.31.200.53
10.31.200.54
10.31.200.67
10.31.200.7
10.31.200.80
10.31.200.81
10.31.200.82
nano deploy_wazuh_agent.yml
- hosts: wazuh_agents
  remote_user: std
  become: true
  tasks:

    - name: mettre à jour les paquets disponibles
      apt:
        update_cache: yes

    - name: Supprimer la ligne inutile
      lineinfile:
        path: /etc/hosts
        regexp: "^{{ ansible_default_ipv4.address }}\\s+.*$"
        state: absent

    - name: ajouter enregistrement DNS pour l'hote
      lineinfile:
        path: /etc/hosts
        line: "{{ ansible_default_ipv4.address }}    {{ ansible_hostname }}"
        state: present
      loop: "{{ ansible_play_batch }}"

    - name: installer sudo et curl
      apt:
        name: ['sudo', 'curl']
        state: present

    - name: télécharger et installer l'agent Wazuh
      shell: |
        sudo curl -so wazuh-agent.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.4.0-1_amd64.deb && WAZUH_MANAGER='10.31.192.24' dpkg -i ./wazuh-agent.deb

    - name: Reload systemd manager configuration
      systemd:
        daemon_reload: yes

    - name: Enable Wazuh agent service
      service:
        name: wazuh-agent
        enabled: yes
        state: started
ansible-playbook deploy_wazuh_agent.yml --ask-become-pass -i hosts

Après l'exécution du script on a bien nos VMs sur le serveur Wazuh !

Partie G - Actualisation du schéma réseau