9. Utilisation des données d’audit dans les plugins pour la conformité des paquets WAPT et pour les services externes Fonctionnalité WAPT Enterprise uniquement

9.1. Afficher les données d’audit de la machine dans la Console WAPT Fonctionnalité WAPT Enterprise uniquement

Vous pouvez gérer la sortie d’audit et afficher le résultat de l’audit si vous activez l’option dans l’onglet Affichage‣ Préférences d’affichage. Cochez l’option Afficherl’onglet des données d’audit de la machine pour voir l’onglet Données d’audit sur chaque client.

Fenêtre affichant les préférences avancées

Fenêtre affichant les préférences avancées

Pour utiliser les audits dans les paquets WAPT, visitez cette page pour gérer les données d’audit.

9.1.1. Afficher les données chiffrées avec un certificat dans l’onglet des données d’audit

Avec la fonction d’audit, il est possible de chiffrer les données sensibles provenant de machines distantes ; il sera possible de lire les données sensibles chiffrées avec un certificat installé sur la machine de l’administrateur WAPT. De cette façon, le Serveur WAPT peut déposer des données sensibles d’inventaire sans que le serveur devienne un bien sensible.

Cette méthode est particulièrement utile par exemple pour gérer en toute sécurité les mots de passe aléatoires LAPS dans WAPT.

Dans setup.py, vous pouvez utiliser une fonction pour chiffrer des données avec un certificat. Si vous disposez de la clé privée correspondant au certificat utilisé pour chiffrer les données, celles-ci seront déchiffrées et apparaîtront sous une forme lisible.

Voici un exemple de code :

# -*- coding: utf-8 -*-
from setuphelpers import *
from waptcrypto import print_encrypted_data

def audit():
  randompassword = '1234'
  print_encrypted_data(randompassword, glob.glob('*.crt'))

Ce code va chiffrer le mot de passe 1234 avec tous les certificats présents sur la machine qui est utilisée pour gérer WAPT. Depuis la Console WAPT, vous verrez dans l’onglet Données d’audit la version chiffrée et vous pourrez déchiffrer les données avec la clé privée associée au certificat public qui a été utilisé pour chiffrer les données.

Résultat des données d'audit montrant la version chiffrée et déchiffrée

9.2. Synchroniser les inventaires de WAPT vers GLPI Fonctionnalité WAPT Enterprise uniquement

9.2.1. Principe de fonctionnement

WAPT Enterprise propose une synchronisation entre les inventaires de vos postes et le logiciel GLPI , un ITSM.

Cette méthode synchronise automatiquement les changements sur votre parc informatique avec le serveur GLPI.

WAPT peut se synchroniser avec GLPI 10 en utilisant l’API JSON native. WAPT peut se synchroniser avec GLPI version 9.x en utilisant le plugin FusionInventory au format XML.

Attention

GLPI par WAPT ne fonctionne pas avec l’authentification Kerberos pour GLPI.

Si vous utilisez Kerberos pour GLPI, excluez glpi/plugins/fusioninventory/ de l’authentification Nginx.

Avertissement

Si vous rencontrez des problèmes avec le serveur GLPI qui ne reçoit pas certaines parties des inventaires, vous pouvez installer le paquet tis-audit-glpi-inventory sur les clients. De cette façon, vous obtiendrez l’inventaire officiel de GLPI.

9.2.2. Installer les dépendances requises pour GLPI 9.x

Afin de recevoir des inventaires sur le serveur GLPI, le plugin FusionInventory devra être installé sur le serveur GLPI. Ceci n’est pas nécessaire pour GLPI 10 qui a sa propre API JSON native.

Après avoir installé FusionInventory sur votre serveur GLPI, vous aurez un point d’accès sur votre Serveur WAPT pour envoyer les inventaires vers :

http:/glpi.mydomain.lan/glpi/plugins/fusioninventory/

9.2.3. Configuration de l’Agent WAPT et du paquet de synchronisation

Installez et configurez l’Agent WAPT sur l’ordinateur qui exécutera la synchronisation. L’Agent WAPT est installé par défaut sur le Serveur WAPT, il suffit de le configurer.

Pour configurer l’Agent WAPT, veuillez vous référer à la documentation correspondante.

Ensuite, vous devez installer le paquet de synchronisation de GLPI :

Vous devez configurer une planification d’audit sur l’agent

[global]
...
waptaudit_task_period=120m
...

Avec le paquet choisi, il créera deux fichiers ini dans votre $WAPT_INSTALL_DIR/private (linux : /opt/wapt/private, windows : C:Program Files (x86)waptprivate`). Connectez-vous à l’hôte et modifiez les fichiers glpi.ini et wapt_api.ini.

  • Pour GLPI9 :

    [glpi]
    username = glpi
    password = xxxxxxx
    url = https://glpi.xx.xxxxx.xx/plugins/fusioninventory/
    
  • Pour GLPI10 :

    [glpi]
    username = glpi
    password = xxxxxxx
    url = https://glpi.xx.xxxxx.xx/front/inventory.php
    

Pour GLPI10, veuillez également vous assurer que l’inventaire est activé.

Pour GLPI9 et GLPI10 :

[wapt]
username = waptregister
password = waptregister2023!
url = https://srvwapt.ad.tranquil.it

Pour tester la configuration actuelle, vous pouvez déclencher un audit

wapt-get audit tis-glpi-plugin-export-to-glpi9
# or
wapt-get audit tis-glpi-plugin-export-to-glpi10

9.2.4. Éléments actuels envoyés par WAPT au serveur GLPI

Description des éléments

Valeur

Envoyé

Non Envoyé

Nom de l’ordinateur

Fonctionnalité disponible

Nom d’utilisateur

Fonctionnalité disponible

Description

Fonctionnalité disponible

Nom de l’OS

Fonctionnalité disponible

Version de l’OS

Fonctionnalité disponible

Langue

Fonctionnalité disponible

CPU

Fonctionnalité disponible

Mémoire

Fonctionnalité disponible

Batterie

Fonctionnalité disponible

Type de châssis

Fonctionnalité disponible

Physique ou virtuel

Fonctionnalité disponible

Configuration de la carte réseau

Fonctionnalité disponible

Liste d’imprimante et les propriétés

Fonctionnalité disponible

Logiciel installé [1]

Fonctionnalité disponible

Lecteur réseau

Fonctionnalité disponible

Variables d’environnement [2]

Fonctionnalité disponible

Modèles des écrans

Fonctionnalité disponible

Modèle de la souris et du clavier

Fonctionnalité non disponible

Modèles des cartes contrôleurs (excepté la carte graphique)

Fonctionnalité non disponible

Version de l’antivirus

Fonctionnalité non disponible

État du pare-feu

Fonctionnalité non disponible

Liste groupe local

Fonctionnalité non disponible

Liste et état de la banque de mémoire

Fonctionnalité non disponible

Liste des ports USB et des périphériques connectés

Fonctionnalité non disponible

Statut de l’imprimante

Fonctionnalité non disponible

Lecteurs de carte

Fonctionnalité non disponible

Liste d’Appx à l’échelle du système

Fonctionnalité non disponible

Notes de bas de page

9.2.5. Erreurs possibles dans l’inventaire rapporté sur le serveur GLPI

Les inventaires téléchargés par le Serveur WAPT vers le serveur GLPI peuvent être incomplets ou comporter des erreurs par rapport aux inventaires téléchargés directement par l’agent FusionInventory déployé sur les hôtes. L’une des raisons est que WAPT vise à ne rapporter que les valeurs les plus importantes.

Si vous pensez que des éléments importants manquent ou sont signalés de manière erronée, veuillez signaler le problème à l’équipe de développement de Tranquil IT.

Pour le rapport, l’équipe de développement a besoin de 2 fichiers .xml.

  1. Tout d’abord, installez l’agent FusionInventory sur l’ordinateur sur lequel vous observez un élément d’inventaire manquant ou déclaré à tort.

  2. Exécutez l’agent FusionInventory et extrayez le rapport dans un fichier .xml.

"C:\Program Files\FusionInventory-Agent\fusioninventory-inventory" > %TEMP%\inventory.xml
  1. Définissez le répertoire de débogage dans le fichier waptserver.ini.

glpi_inventory_debug_directory = /tmp/glpi
  1. Redémarrez le Serveur WAPT

  2. Récupérer le fichier /tmp/glpi/UUID.xml du Serveur WAPT, l’UUID étant l’identifiant de l’hôte.

  3. Envoyez les 2 fichiers à l’équipe de développement.

9.3. Synchronisation des inventaires WAPT avec Cyberwatch pour les failles de sécurité Fonctionnalité WAPT Enterprise uniquement

9.3.1. Principe de fonctionnement

WAPT Enterprise offre une synchronisation entre les inventaires de vos hôtes et le logiciel Cyberwatch <https://cyberwatch.fr/>, un ISVM.

La méthode synchronise automatiquement les informations sur les mises à jour ou les logiciels installés avec l’outil Cyberwatch afin d’analyser les vulnérabilités détectées et de vous en avertir.

9.3.2. Configuration de Cyberwatch côté serveur

  • Connectez-vous à votre serveur Cyberwatch et accédez à votre profil.

  • Dans la section API, cliquez sur Voir mes clés API.

  • Cliquez sur Add et nommez votre clé d’accès à l’API pour WAPT.

    Saisir le nom de la clé API, le niveau d'accès (access_level) et l'expiration
  • Définissez le niveau d’accès sur Full et indiquez une date d’expiration. Si vous n’en donnez pas, la clé n’expirera jamais.

Cette clé avec son ID de clé d’accès à l’API vous permettra d’utiliser l’API Cyberwatch pour notre paquet WAPT.

9.3.3. Configuration de l’Agent WAPT et du paquet de synchronisation

Installez et configurez l’Agent WAPT sur l’ordinateur qui exécutera la synchronisation. L’Agent WAPT est installé par défaut sur le Serveur WAPT, il suffit de le configurer.

Pour configurer l’Agent WAPT, veuillez vous référer à la documentation correspondante.

Vous pouvez avoir deux paquets :

  • si vous avez l’agent Cyberwatch, vous pouvez importer de Cyberwatch en installant le paquet tis-cyberwatch-plugin-import-from-cyberwatch, cela vous donnera des informations directement sur votre Console WAPT.

  • pour les appareils sans agent, vous pouvez toujours exporter vers votre serveur Cyberwatch les informations de vos hôtes WAPT en installant le paquet tis-cyberwatch-plugin-export-to-cyberwatch-airgap, il vous donnera des informations sur votre console Cyberwatch sans que l’agent Cyberwatch ne soit installé.

Vous devez configurer une planification d’audit sur l’agent

[global]
...
waptaudit_task_period=120m
...

Avec le paquet, quel que soit votre choix (vous pouvez évidemment choisir les deux), il créera deux fichiers ini dans votre $WAPT_INSTALL_DIR/private (linux : /opt/wapt/private, windows : C:Program Files (x86)waptprivate`). Connectez-vous à l’hôte et modifiez les fichiers cyberwatch_api.ini et wapt_api.ini.

[cyberwatch]
api_key =
secret_key =
url = https://cyberwatch.mydomain.lan
[wapt]
username = waptregister
password = waptregister2023!
url = https://srvwapt.ad.tranquil.it

Pour tester la configuration actuelle, vous pouvez déclencher un audit

wapt-get audit tis-cyberwatch-plugin-import-from-cyberwatch
# and/or
wapt-get audit tis-cyberwatch-plugin-export-to-cyberwatch-airgap

9.4. Personnalisation des rapports d’audit avec les modèles Mustache

9.4.1. Introduction et explication

WAPT peut collecter des données d’audit matérielles et logicielles détaillées à partir des machines clientes en utilisant le plugin audit_data.

Les données collectées comprennent des informations sur le système, telles que

Les données collectées comprennent des informations sur le système, telles que les logiciels installés, les services en cours d’exécution, l’utilisation du disque, les comptes d’utilisateurs, la configuration du réseau, etc.

Ces données sont stockées dans un format JSON structuré et affichées dans la console WAPT à l’aide de modèles HTML.

Par défaut, WAPT fournit des modèles génériques pour visualiser ces données. Cependant, ces modèles peuvent être entièrement personnalisés pour répondre à vos besoins.

9.4.1.1. Pourquoi personnaliser les rapports d’audit ?

La personnalisation des rapports d’audit vous permet de vous concentrer sur les données spécifiques à votre organisation. Créez des tableaux de bord ou des tableaux adaptés aux politiques internes, améliorez la lisibilité et la facilité d’utilisation pour les équipes de support technique, générez une meilleure documentation pour les audits ou la conformité.

WAPT utilise des modèles Mustache pour rendre les données JSON dans un contenu HTML structuré à l’intérieur de la console.

9.4.1.2. Qu’es ce que Mustache?

Mustache est logic-less template language**( un langage de template **sans logique). Il permet d’injecter des données dynamiques dans des mises en page HTML statiques, sans script complexe.

Un modèle de Mustache est un fichier texte contenant :

  • de l’HTML statique

  • Les balises dynamiques comme {{key}}, {{#section}} ... {{/section}}, {{{^section}} … {{/section}}`

Il est léger, facile à apprendre et idéal pour personnaliser les rapports visuels sans écrire de code.

9.4.2. Nommage et emplacement des modèles

Tous les modèles Mustache utilisés pour rendre les données d’audit dans WAPT sont stockés dans le dossier suivant :

C:\Program Files (x86)\wapt\templates

Si vous utilisez WAPT dans un environnement portable ou de développement, il sera :

<wapt_folder>\templates

Chaque fichier de modèle est un fichier .html écrit au format Mustache.

9.4.2.1. Nommage d’un modèle

Pour remplacer ou définir un nouveau modèle d’audit, le fichier doit suivre un modèle de dénomination strict :

host_audit_<section>_<key>.html

où on a :

  • section correspond au nom de la section d’audit (par exemple audit-network-profile)

  • key correspond à la clé de données à rendre (par exemple auto-remediate-card)

Exemple :

host_audit_audit-network-profile_auto-remediate-card.html

Ce modèle sera utilisé pour générer le modele via la clé auto‑remediate‑card et la section audit‑network‑profile.

9.4.2.2. Modifier ou créer un modèle

Il existe deux façons de personnaliser le rendu des audits :

  • Si le modèle existe déjà : ouvrez et éditez le fichier .html correspondant dans le dossier templates.

  • Si le modèle n’existe pas : créez un nouveau fichier avec le nom correct et écrivez la structure au format Mustache.

Assurez-vous que le code HTML est valide et qu’il utilise la syntaxe Mustache appropriée, comme indiqué dans les exemples ci-dessous.

Ce mécanisme vous permet de personnaliser entièrement la manière dont les données d’audit apparaissent dans la console WAPT, par clé et par section.

9.4.3. Comment rédiger des modèles

9.4.3.1. Exemple de base - rendu des données d’audit avec des espaces réservés

Commençons par un exemple simple qui montre comment les données d’un audit peuvent être insérées dans un modèle Mustache.

Étant donné le modèle HTML suivant :

<div class="system-info">
    Hostname: {{hostname}}<br>
    Operating System: {{os_name}} {{os_version}}
</div>

Les valeurs des espaces réservés sont fournies dans un objet JSON (cet objet est appelé contexte de rendu - il contient les données transmises au modèle) :

{
  "hostname": "PC123",
  "os_name": "Windows",
  "os_version": "10"
}

Le résultat obtenu sera alors le suivant :

<div class="system-info">
    Hostname: PC123<br>
    Operating System: Windows 10
</div>

Cet exemple basique montre comment Mustache remplace chaque {{placeholder }} par la valeur correspondante du contexte JSON. Il n’y a pas de logique, seulement une substitution.

9.4.3.2. Aperçu de la syntaxe de Mustache

Mustache est simple et déclaratif. Vous trouverez ci-dessous les balises les plus courantes, accompagnées d’exemples pratiques.

9.4.3.2.1. Afficher une seule valeur - {{key}}

Utilisez {{key}} pour insérer une seule valeur du contexte de rendu dans le modèle.

La valeur de la clé hostname sera recherchée dans le contexte actuel (et si elle n’est pas trouvée, dans n’importe quel contexte parent). Lorsqu’une valeur est trouvée, la balise entière est remplacée par la valeur, avec un code HTML pour éviter les injections.

Le contexte JSON :

{
  "hostname": "PC123"
}

Modèle :

<p>Hostname: {{hostname}}</p>

Résultat

<p>Hostname: PC123</p>
9.4.3.2.2. Bloc conditionnel - {{#section}} ... {{/section}}

Cette syntaxe vous permet d’afficher un bloc de contenu uniquement si la valeur de la clé existe et est considérée comme « vraie » (ni nulle, ni fausse, ni vide). Elle est couramment utilisée pour effectuer un rendu conditionnel d’une section ou pour itérer sur une liste.

Exemple avec un objet

Le contexte JSON :

{
  "user": {
    "name": "Alice"
  }
}

Modèle :

{{#user}}
  <p>User: {{name}}</p>
{{/user}}

Résultat

<p>User: Alice</p>

Si la clé user est manquante ou null, rien ne sera rendu.

Exemple avec une liste

Si la valeur de la section est une liste (tableau), le bloc est rendu une fois pour chaque élément, avec le contexte fixé à l’élément courant.

Le contexte JSON :

{
  "services": [
    {"name": "WAPT"},
    {"name": "Antivirus"}
  ]
}

Modèle :

<ul>
  {{#services}}
    <li>{{name}}</li>
  {{/services}}
</ul>

Résultat

<ul>
  <li>WAPT</li>
  <li>Antivirus</li>
</ul>
9.4.3.2.3. Bloc inversé - {{^section}}} ... {{/section}}

La section inverse {{^section}} est utilisée pour afficher un bloc uniquement si la valeur est fausse - ce qui signifie qu’elle n’existe pas, qu’elle est false, null, ou une liste vide. Ceci est utile pour afficher des messages de repli ou des indicateurs « pas de données ».

Le contexte JSON :

{
  "has_battery": false
}

Modèle :

{{^has_battery}}
  <p>This device has no battery.</p>
{{/has_battery}}

Résultat

<p>This device has no battery.</p>

Si « has_battery » : true, le bloc ne sera pas rendu du tout.

9.4.3.2.4. Commentaire - {{ ! commentaire }}

Mustache permet les commentaires en ligne en utilisant {{ ! … }}. Ces commentaires sont complètement ignorés lors du rendu et n’apparaissent pas dans le code HTML de sortie.

Ceci est utile pour laisser des notes aux auteurs de modèles sans affecter la sortie.

Modèle :

{{! This is a comment for developers }}
<p>Hello</p>

Résultat

<p>Hello</p>
9.4.3.2.5. Valeur actuelle - {{.}}

La balise {{.}} est utilisée pour itérer sur une liste de valeurs simples (chaînes de caractères, nombres, booléens). Elle fait référence à la valeur courante dans le contexte.

Si vous itérez sur un tableau comme [« important », « urgent »], chaque {{.}} correspond à la chaîne courante dans la boucle.

Le contexte JSON :

{
  "tags": ["important", "urgent", "todo"]
}

Modèle :

<ul>
  {{#tags}}
    <li>{{.}}</li>
  {{/tags}}
</ul>

Résultat

<ul>
  <li>important</li>
  <li>urgent</li>
  <li>todo</li>
</ul>

9.4.4. Helpers de Musctahe disponibles

WAPT fournit de nombreuses helpers (aides) personnalisées qui peuvent être utilisées dans les modèles Mustache pour transformer, formater ou extraire des données.

Ces helpers (aides) étendent la syntaxe de base de Mustache et sont particulièrement utiles lorsque l’on travaille avec des données d’audit.

Les helpers disponibles sont énumérées ci-dessous :

Comparaison et logique

  • IIf - Rendu conditionnel en ligne (if cond then val1 else val2)

  • If_ - Expression conditionnelle complète (avancée)

  • Equals_ - Compare les valeurs

  • Match - Correspond à une expression rationnelle (sensible à la casse)

  • MatchI - Correspond à une expression rationnelle (insensible à la casse)

Opérations de liste et d’objet

  • Items - Convertit un dictionnaire en une liste itérable

  • Get - Récupère une clé à partir d’un objet avec une solution de repli par défaut

  • Count - Compte les éléments d’une liste ou les clés d’un dict

  • Values - Extrait les valeurs d’un dict

  • Keys - Extrait les clés d’un dict

  • First - Obtient les n premiers éléments d’une liste

  • Last - Obtient les n derniers éléments

  • Slice - Extrait une tranche [start:end] d’une liste

Formatage des données

  • HumanBytes - Convertit la taille des octets en KB, MB, GB

  • CSV - Joint des listes d’objets au format CSV

Manipulation de chaînes de caractères et de textes

  • Lower - Convertit en minuscules

  • Upper - Convertit en majuscules

  • Pad - Pads une chaîne de caractères vers la droite

  • PadLeft - Pads une chaîne de caractères vers la gauche

  • Sub - Extrait une sous-chaîne

  • CamelCase - Convertit une chaîne en camelCase

  • SnakeCase - Convertit une chaîne en snake_case

  • EnumTrim - Nettoie les valeurs énumérées (par exemple, trim [0])

  • EnumTrimRight - Comme EnumTrim mais avec des coupes uniquement sur la droite

Formatage de la date et de l’heure

  • LocalDateTime - Convertit UTC en date locale

  • LocalDate - Date locale à partir de l’entrée UTC

  • DateFmt - Formatage personnalisé de la date avec un format de type strftime

  • DateTimeToText - Convertit la date en texte lisible

  • DateToText - Formate la valeur de la date (variante héritée)

  • TimeLogToText - Analyse la durée à partir des logs (par exemple, « 00:04:32 »).

HTML et rendu

  • ToJson2 - Convertit une valeur en JSON formaté

  • ToJson - Conversion JSON de base

  • JsonQuote – Recupère le contenu JSON à l’intérieur d’une chaîne

  • JsonQuoteUri - Recupère le JSON pour une utilisation sûre dans les URLs

  • SimpleToHtml - Rend le formatage basique des lignes et du texte

  • MarkdownToHtml - Analyse Markdown en HTML

  • WikiToHtml - Analyse les balises de style wiki en HTML

Autres services

  • JoinValues - Joint les valeurs d’une liste ou d’un dict avec un séparateur

  • Join - Joint des éléments (clés ou valeurs) dans une chaîne de caractères

  • NewGuid - Génère un nouvel UUID

  • ExtractFileName - Extrait le nom de fichier d’un chemin complet

Encodage et hachage

  • b64encode - Encode en base64 une chaîne de caractères

  • sha256 - Hachage SHA-256 d’une chaîne de caractères

  • sha1 - Hachage SHA-1 d’une chaîne de caractères

  • md5 - Hachage MD5 d’une chaîne de caractères

  • BlobToBase64 - Encode un blob binaire en base64

  • b64decode - Décode une chaîne encodée en base64

  • _chr - Convertit les codes ASCII en caractères

Réseau et HTTP

  • HttpGet - Effectue une requête HTTP GET

  • HttpGetSafe - Comme HttpGet mais plus sûr pour les templates

  • DoHttpGet - GET de bas niveau avec vérification optionnelle du certificat

  • HttpPost - Envoie une requête HTTP POST

  • HttpPostSafe - Variante POST avec contrôles de sécurité

  • DoHttpPost - POST de bas niveau avec vérification optionnelle des certitudes

Chaque helper accepte une valeur ou une liste de valeurs en entrée et renvoie un résultat formaté utilisable dans n’importe quelle balise Mustache.

La documentation relative à chaque helpers est fournie dans la section suivante.

Voir la documentation sur les helpers de Mustache Helpers de Musctahe disponibles.