« LINUX:Wazuh-API » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 51 : | Ligne 51 : | ||
Pour interagir avec cet interface de type HTTP, nous utiliserons l'utilitaire "curl". S'il n'est pas installé, utilisez la commande suivante: | Pour interagir avec cet interface de type HTTP, nous utiliserons l'utilitaire "curl". S'il n'est pas installé, utilisez la commande suivante: | ||
dnf install curl | dnf install curl | ||
==Jeton== | ==Jeton== | ||
Ligne 106 : | Ligne 107 : | ||
On y retrouve les deux noms d'utilisateurs cités plus haut. | On y retrouve les deux noms d'utilisateurs cités plus haut. | ||
Chaque utilisateur est lié à un "id" qui nous servira ensuite: | Chaque utilisateur est lié à un "id" qui nous servira ensuite: | ||
* l'utilisateur "wazuh" a l' | * l'utilisateur "wazuh" a l'id 1 | ||
* l'utilisateur "wazuh-wui" a l' | * l'utilisateur "wazuh-wui" a l'id 2 | ||
= | =Changement du mot de passe de l'utilisateur= | ||
Nous allons créer un second script pour changer le mot de passe de l'utilisateur "wazuh-wui" ayant l | Nous allons créer un second script pour changer le mot de passe de l'utilisateur "wazuh-wui" ayant l'id 2. | ||
Le mot de passe mis est "Pw-Bidon-pour-Wazuh-Wui". | Le mot de passe mis est "Pw-Bidon-pour-Wazuh-Wui". | ||
Ligne 123 : | Ligne 124 : | ||
Il est a noter que l'application "wazuh-dashboard" que nous verrons plus tard utilise l'API via l'utilisateur "wazuh-wui". Le mot de passe de cet utilisateur est | Il est a noter que l'application "wazuh-dashboard" que nous verrons plus tard utilise l'API via l'utilisateur "wazuh-wui". Le mot de passe de cet utilisateur est écrit dans le fichier de configuration "/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml". | ||
Au bas de ce fichier, dans la section "hosts", on adapte le mot de passe: | Au bas de ce fichier, dans la section "hosts", on adapte le mot de passe: |
Version du 24 novembre 2022 à 22:21
But
Wazuh dispose d'un interface de type HTTP qui permet d'interagir avec Wazuh Manager. Cette fonctionnalité est incluse dans le service "wazuh-manager.service". On peut l'utiliser dans scripts comme on le verra ci-dessous et dans divers autres articles. Mais il est principalement utilisé dans l'interface utilisateur Web (WUI) de Wazuh nommé "Wazuh-Dashboard".
Configuration
Sa configuration est contenue dans le fichier "/var/ossec/api/configuration/api.yaml".
Il écoute par défaut sur le port TCP 55000 de tous les interfaces réseaux présents sur la machine manager.
La commande suivante qui liste les ports en écoute:
netstat -ntl
donne pour notre cas:
tcp 0 0 0.0.0.0:55000 0.0.0.0:* LISTEN
On peut suivre toute activité par cet interface dans le fichier journal "/var/ossec/logs/api.log".
Dans un autre article, nous installerons l'interface utilisateur Web (WUI) sur la même machine que celle où Wazuh Manager s'exécute. Et donc, par sécurité, nous allons limiter l'écoute réseau à la machine locale. Pour cette raison, nous allons ajouter, en début du fichier de configuration, la ligne suivante:
host: 127.0.0.1
Après redémarrage du service Wazuh-manager.service, la commande émise ci-dessus:
netstat -ntl
donne maintenant:
tcp 0 0 127.0.0.1:55000 0.0.0.0:* LISTEN
On peut remarquer que dans ce même fichier, on peut changer le port d'écoute.
Noms des utilisateurs d'accès à Wazuh
0 l'installation de Wazuh Manager, l'utilisateur "wazuh" est créé avec comme mot de passe "wazuh". Ce mot de passe est loin d'être sécurisé. Par la suite, nous verrons comment changer ce mot de passe.
Avec l'interface utilisateur Web, le paquet "wazuh-dashboard" utilise l'API et dans ce cadre, un utilisateur nommé "wazuh-wui" est créé avec le mot de passe "wazuh-wui". Ce mot de passe devra aussi subir le même sort.
Dans les exemples qui suivent, nous utiliserons le couple "wazuh" - "wazuh". Le second devra être adapté si ce mot de passe est changé.
Utilisation
Pour l'utiliser, il est préférable de l'utiliser dans un script. Pour ces exemples, nous utiliserons "bash" shell.
Pour interagir avec cet interface de type HTTP, nous utiliserons l'utilitaire "curl". S'il n'est pas installé, utilisez la commande suivante:
dnf install curl
Jeton
Pour utiliser l'API, il faut s'authentifier. On récupère alors un "jeton" qui nous servira pour les demandes suivantes dans la même session.
Voici le début du script:
#!/bin/bash TOKEN=$(curl -u wazuh:wazuh -k -X GET "https://localhost:55000/security/user/authenticate?raw=true")
L'option "-u" est suivie du nom d'utilisateur puis du mot de passe séparés par un double point. On lance le protocole "HTTPS" sur la machine locale ("localhost") par le port TCP 55000 comme vu dans la configuration. On récupère le jeton dans la variable "TOKEN".
Liste des utilisateurs
Comme premier exemple, nous allons récupérer la liste des utilisateurs de Wazuh. La sortie est au format JSON sur une ligne. Pour la rendre plus lisible, on la passe dans un utilitaire de "python", "json.tool".
Le script devient:
#!/bin/bash TOKEN=$(curl -u wazuh:wazuh -k -X GET "https://localhost:55000/security/user/authenticate?raw=true") curl -k -X GET "https://localhost:55000/security/users" -H "Authorization: Bearer $TOKEN" | python -m json.tool
Ce qui nous donne:
{ "data": { "affected_items": [ { "id": 1, "username": "wazuh", "allow_run_as": true, "roles": [ 1 ] }, { "id": 2, "username": "wazuh-wui", "allow_run_as": true, "roles": [ 1 ] } ], "total_affected_items": 2, "total_failed_items": 0, "failed_items": [] }, "message": "All specified users were returned", "error": 0 }
On y retrouve les deux noms d'utilisateurs cités plus haut. Chaque utilisateur est lié à un "id" qui nous servira ensuite:
- l'utilisateur "wazuh" a l'id 1
- l'utilisateur "wazuh-wui" a l'id 2
Changement du mot de passe de l'utilisateur
Nous allons créer un second script pour changer le mot de passe de l'utilisateur "wazuh-wui" ayant l'id 2. Le mot de passe mis est "Pw-Bidon-pour-Wazuh-Wui".
Voici le script:
#!/bin/bash TOKEN=$(curl -u wazuh:wazuh -k -X GET "https://localhost:55000/security/user/authenticate?raw=true") curl -k -X PUT "https://localhost:55000/security/users/2" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d "{\"password\": \"Pw-Bidon-pour-Wazuh-Wui\"}" | python -m json.tool
On fait de même pour l'autre utilisateur.
Il est a noter que l'application "wazuh-dashboard" que nous verrons plus tard utilise l'API via l'utilisateur "wazuh-wui". Le mot de passe de cet utilisateur est écrit dans le fichier de configuration "/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml".
Au bas de ce fichier, dans la section "hosts", on adapte le mot de passe:
hosts: - default: url: https://localhost port: 55000 username: wazuh-wui # password: wazuh-wui password: Pw-Bidon-pour-Wazuh-Wui run_as: false
On y remarque les informations de la machine à contacter et le port de connexion pour accéder à l'API de Wazuh ainsi que le nom de l'utilisateur.