Mise en place de l'XDR Wazuh

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.

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

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

