Attention : le support de WAPT 1.8.2 a pris fin le 30 juin 2022.

Il y a plusieurs vulnérabilité présente dans la branche WAPT 1.8.2.7393. Merci de mettre à jour sur la version supportée la plus récente. Liste des CVEs (non exhaustive) :
  • * python engine : python 2.7 (CVE-2020-10735, CVE-2015-20107, CVE-2022-0391, CVE-2021-23336, CVE-2021-3177, CVE-2020-27619, CVE-2020-26116, CVE-2019-20907, CVE-2020-8492, etc.)
  • * cryptography : openssl : CVE-2022-2068, CVE-2022-1292, CVE-2022-0778, CVE-2021-4160, CVE-2021-3712, CVE-2021-23841, CVE-2021-23840, CVE-2021-23839, CVE-2020-1971, CVE-2020-1968, CVE-2019-1551
  • * python dependencies : cryptography (CVE-2020-36242, CVE-2020-25659), eventlet (CVE-2021-21419), jinja2 (CVE-2020-28493), psutil (CVE-2019-18874), waitress (CVE-2022-31015), lxml (CVE-2021-4381, CVE-2021-28957, CVE-2020-27783, CVE-2018-19787), ujson (CVE-2022-31117, CVE-2022-31116, CVE-2021-45958), python-ldap (CVE-2021-46823)

Présentation des grands principes de WAPT

A quoi sert WAPT ?

WAPT déploie, met à jour et et supprime des logiciels et des configurations sur un parc Windows. Le déploiement de logiciels (Firefox, MS Office, …) s’effectue de manière centralisée avec la console graphique. Le fonctionnement de WAPT s’inspire fortement du gestionnaire de paquets du système GNU / Linux Debian apt, d’où son nom. WAPT est libre et soumis à la licence GPLv3. L’édition Enterprise est soumise à une licence propriétaire.

WAPT est destiné aux gestionnaires de parcs de PC, de portables, de tablettes Windows fonctionnant avec des versions client de Windows (XP à 10) ou des versions serveur de Windows (2003 à 2019).

Des entreprises de toutes tailles, françaises et internationales, des lycées, des collèges, des écoles, des rectorats, des universités, des centres de recherche, des mairies, des communautés d’agglomération, des communautés de communes, des hôpitaux, des Ministères utilisent WAPT.

WAPT existe en deux versions, Community et Enterprise.

WAPT est particulièrement efficace pour traiter le cas récurrent des mises à jour Flash et Java et c’est souvent pour couvrir ce besoin que WAPT est initialement adopté ; ensuite il devient un outil apprécié, voire indispensable pour le quotidien de l’administrateur système.

Si vous êtes un développeur, WAPT en mode ligne de commande peut vous aider à configurer votre PC de développement comme le font Chocolatey / NuGet.

Genèse WAPT

Notre constat après 15 ans d’infogérance

L’administration d’un large parc de PC sous MS Windows est à l’heure actuelle un exercice acrobatique en environment sécurisé :

  • les méthodes généralement utilisées (mastérisations type ghost ou clonezilla) sont efficaces si les parcs machines et les parcs applicatifs sont homogènes et que les profils utilisateurs sont itinérants ;

  • les outils de télé-déploiement (OCSInventory ou WPKG) diffusent les logiciels mais ne permettent pas d’effectuer de manière simple les personnalisations qui évitent les demandes de support utilisateur ;

  • les logiciels de petits éditeurs nécessitent souvent des droits Administrateur Local pour fonctionner ;

  • les solutions développées pour adresser ces trois problèmes s’appuient sur des méthodes soit trop chères, soit insuffisantes, et dans tous les cas trop complexes ;

Les hypothèses de travail qui animent le développement de WAPT

Le développement de WAPT est animé par deux principes :

  • ce qui est compliqué doit être rendu simple ;

  • ce qui est simple doit être rendu trivial ;

WAPT s’appuie sur un jeu d’hypothèses fondamentales :

  • les adminsys connaissent les langages de script, et WAPT a choisi python pour la profondeur et l’étendue de ses librairies ;

  • les adminsys qui ne connaissent pas encore très bien les langages de script doivent pouvoir s’inspirer d’exemples simples et efficaces qu’ils adapteront à leurs situations spécifiques ;

  • les adminsys doivent pouvoir communiquer l’efficacité de leurs actions à leur direction et restituer les écarts de process aux auditeurs de leur société ;

  • les adminsys doivent pouvoir collaborer avec des collègues adminsys dans un climat de confiance ; ainsi les dépôts WAPT internes et privés servent des logiciels qu’ils signent eux-mêmes. Sinon, ils choisissent des dépôts publics qui leur fournissent les garanties de sécurité qu’ils jugent suffisantes ;

  • les adminsys sont conscients que les postes utilisateurs servent des objectifs métier et une certaine personnalisation doit être rendue possible ; l’adaptation du parc aux enjeux métiers est facilitée par la notion de groupes qui permet de sélectionner des machines respectant un critère de tri pour personnaliser leur configuration ;

Principes fondamentaux

Principe de Paquets / Dépôts

Les paquets WAPT

La structure d’un paquet WAPT est similaire à celle d’un paquet .deb de Debian Linux. Chaque paquet WAPT embarque avec lui les binaires qui seront exécutés et les autres fichiers dont il aura besoin.

Un paquet est transportable facilement.

Voici la structure d’un paquet WAPT :

WAPT package structure

Structure d’un paquet WAPT

Les dépôts WAPT

Les paquets sont stockés dans un répertoire web. Ils ne sont pas stockés dans une base de données.

Ils sont servis par le serveur web Nginx, disponible pour Linux et Windows.

Seul le fichier d’index Packages est nécessaire. Le fichier Packages permet d’indiquer au client la liste des paquets disponibles sur le dépôt, et les informations de base de chacun des paquets du dépôt.

Ce fonctionnement permet de mettre en place facilement un mécanisme de réplication entre plusieurs dépôts.

Types de paquets WAPT

Il existe 7 types de paquets WAPT:

Représentation d'un paquet WAPT simple

Représentation d’un paquet WAPT simple

Les paquets base

Ce sont les paquets logiciels classiques.

Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.

Les paquets group

Ce sont des paquets qui permettent de faire des groupes de logiciels ou des groupes de machines.

Indication

  • un groupe de logiciels correspond en réalité à un profil de machine (ex: compta) ;

  • un groupe de machines correspond en réalité à une salle, un bâtiment, etc ;

  • une machine peut appartenir à plusieurs groupes (ex : un ou plusieurs profils de machine dans une salle dans un bâtiment) ;

Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.

Les paquets host

Les paquets « machines » portent le nom UUID Bios de la machine.

Chaque Poste client va par défaut chercher son paquet machine pour connaître la liste des paquets qu’il doit installer (dépendances).

Ces paquets sont stockés dans le répertoire https://srvwapt.mydomain.lan/wapt-host/.

Les paquets unit

Nouveau dans la version 1.6: Enterprise

Les paquets « unit » portent le nom complet d’une OU, exemple : OU=BUREAU1,OU=prod,OU=computers,DC=mydomain,DC=lan.

Chaque Poste client va par défaut chercher les paquets unit dont il fait partie :

  • OU=BUREAU1,OU=prod,OU=computers,DC=mydomain,DC=lan ;

  • OU=computers,DC=mydomain,DC=lan ;

  • DC=mydomain,DC=lan ;

et ensuite installer la liste des dépendances associées.

Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.

Les paquets unit ne sont pas explicitement attribués à l’hôte (c’est-à-dire en tant que dépendances dans le paquet host) mais sont implicitement pris en compte par le moteur de dépendances de l’agent WAPT lors de la mise à niveau WAPT.

Note

Si la machine change d’OU, alors les paquets unit obsolètes seront désinstallés.

Les paquets waptwua

Les paquets waptwua contiennent le liste des mises à jour Windows autorisées et interdites.

Lorsque ce paquet est installé sur le terminal, la prochaine analyse de mise à jour effectuée par WAPT choisira les mises à jour Windows en fonction de ce filtrage.

Si la machine a plusieurs listes de paquets waptwua applicables, alors WAPT combine les règles.

Lorsque ce paquet est installé sur l’hôte, le prochain update recherchera les mises à jour officielles de Windows applicables à l’hôte en fonction de ce filtrage.

Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.

Les paquets self-service

Nouveau dans la version 1.7: Enterprise

Les paquets self-service contiennent une liste de groupes ou d’utilisateurs (Active Directory ou local) et leurs listes associées de paquets que les utilisateurs seront autorisés à installer par eux-mêmes.

Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.

Les paquets profile

Nouveau dans la version 1.7: Enterprise

Les paquets profile sont similaires aux paquets groupe.

Cependant, les paquets profile fonctionnent un peu différemment et sont plus utiles lorsqu’un serveur Active Directory fonctionne dans l”Organisation :

  • l’agent WAPT listera les groupes Active Directory auxquels appartient l’hôte ;

  • si un paquet profile porte le même nom que le groupe Active Directory, l’agent WAPT installera automatiquement le paquet profile pour le groupe Active Directory auquel il appartient ;

Si l’hôte n’est plus membre de son groupe Active Directory, le paquet profile sera désinstallé.

Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.

Les paquets profile ne sont pas explicitement attribués à la machine (c’est-à-dire en tant que dépendances dans le paquet host) mais sont implicitement pris en compte par le moteur de dépendances de l’agent WAPT lors de la mise à niveau WAPT.

Note

Pour des raisons de performance, cette fonctionnalité n’est activée que si l’option use_ad_groups est activée dans wapt-get.ini.

Principe de dépendances

Dans WAPT tout fonctionne selon le principe des dépendances.

Par défaut, le client WAPT va chercher à installer son paquet machine. Le paquet host listera les autres paquets à installer sur la machine.

Ainsi, le paquet host sera correctement installé si toutes ses dépendances sont satisfaites.

Chaque dépendance devra satisfaire aux sous-dépendances et ainsi de suite.

Quand toutes les dépendances sont satisfaites, la machine remonte en état OK dans la console, signifiant que la machine est conforme au profil que l”Administrateur ou le Déployeur de Paquets aura défini pour elle.

Conceptual diagram of the dependency mechanism

Schéma conceptuel de la notion de dépendance

Indication

Lorsqu’on attribue un paquet logiciel à une machine, on lui affecte le nom canonique du logiciel sans son numéro de version (ex: je veux que Freemind soit installé sur cette machine dans sa dernière version et que Freemind soit configuré pour que l”Utilisateur ne m’appelle pas car il ne trouve pas l’icône sur son bureau!).

Pour chaque paquet en dépendance, l’agent WAPT local s’occupera d’aller chercher automatiquement la dernière version du paquet. Donc si plusieurs versions de Freemind sont disponibles sur le dépôt, l’agent WAPT ira toujours chercher la dernière version, à moins que vous ayez épinglé la version pour cause de compatibilité avec d’autres outils.

Ensuite, lorsque l’agent contacte le dépôt pour vérifier s’il y a de nouvelles mises à jour, il compare les versions des paquets du dépôt avec sa propre liste locale de paquets déjà installés sur la machine.

Si une mise à jour d’un paquet déjà installé est disponible, le client basculera le statut du paquet en NEED UPGRADE. Il installera ainsi les mises à jour au prochain upgrade.

Principe de clé privée / clé publique

Introduction

Comme APK sous Android, les paquets WAPT sont signés et embarquent une somme de contrôle de la liste des fichiers contenus dans le paquet.

Cette méthode de signature permet de garantir la provenance et l’intégrité du paquet.

Principe de clé privée / clé publique

Private key/ public certificate

Principe de clé privée / clé publique

L’usage de WAPT nécessite un couple clé privée / certificat public (auto-signé, issu d’une Autorité de Certification interne, ou commercial).

La clé privée servira à signer les paquets WAPT et un certificat public associé (CA associé ou certificat auto-signé) sera distribué sur chaque client WAPT pour qu’il puisse valider les fichiers signés avec la clé privée.

Les différents certificats publics seront stockés dans un dossier ssl de l’agent WAPT, ce dossier peut contenir plusieurs certificats publics.

Vérification des paquets

Lorsqu’un paquet WAPT est téléchargé, l’agent WAPT (waptagent) vérifie l’integrité des fichiers, puis vérifie que le paquet a été correctement signé.

Si la signature du paquet WAPT ne correspond à aucune des clés publiques situées dans C:\Program Files (x86)\wapt\ssl, l’agent WAPT refusera d’installer le paquet.

Pour en savoir plus rendez-vous dans la section de documentation pour protéger l’intégrité du processus d’installation des paquets WAPT.

Importance de la clé privée

Attention

La clé privée ne doit pas être stockée sur le serveur WAPT, ni sur aucune machine potentiellement accessible à une entité non-autorisée car toute la sécurité de WAPT repose sur la confidentialité des jeux de clés privées.

Elle doit être stockée en lieu sûr car celui qui contrôle votre clé contrôle votre parc !

Enfin, pour un maximum de sécurité, la clé privée pourra être une smartcard ou un jeton cryptographique que les Administrateurs et Déployeurs de Paquets transporteront physiquement sur eux, utilisant leur smartcard ou leur jeton cryptographique ponctuellement pour signer un paquet WAPT.

Note

Depuis la version 1.5 de WAPT, la clé privée est protégée par un mot de passe.

Fonctionnement et architecture WAPT

remontée des informations d’inventaire

WAPT fait un inventaire matériel et logiciel de chaque machine.

Cet inventaire est stocké dans une petite base de données incorporée dans l’agent WAPT.

Inventory feedback mechanism

Fonctionnement de la remontée d’inventaire

  • lors d’un premier enregistrement, le client WAPT remonte la totalité de son inventaire (BIOS, machine, logiciels) au serveur ;

  • lors de chaque mise à jour du client, l’agent WAPT remonte le delta de l’inventaire au serveur ;

The inventory in the WAPT console

L’inventaire dans la console WAPT

Cet inventaire centralisé permettra de filtrer les postes par matériel, logiciel ou de filtrer sur tout autre paramètre remonté dans l’inventaire.

La remontée d’informations

L’agent WAPT remonte également le statut des paquets WAPT.

Inventory feedback returned to the WAPT Server

La remontée du statut des paquets vers le serveur WAPT

En cas d’erreur lors de l’installation du paquet, l’information sera transmise au serveur WAPT. La machine apparaîtra alors en ERREUR dans la console.

Packages with error status in the WAPT console

Elément en erreur dans la console WAPT

L”Administrateur pourra ensuite constater l’erreur dans la console et la corriger.

À chaque upgrade, WAPT tentera une nouvelle fois l’installation du paquet en erreur.

Note

Pour plus de sécurité, depuis la version 1.3.13, l’inventaire remontée par l’agent wapt est signé par l’agentwapt.

Pour en savoir plus rendez-vous sur la documentation pour signer les remontées d’inventaire.

Diagramme complet du fonctionnement de WAPT

WAPT general operating mode

Fonctionnement général de WAPT

On retrouve ici le comportement classique de WAPT, de la duplication d’un paquet depuis un dépôt externe sur Internet jusqu’à son déploiement sur les clients.

Il faut lire ce schéma dans le sens des aiguilles d’une montre :

  • importer des paquets depuis un dépôt (ou créer ex-nihilo un paquet) ;

  • tester, ensuite valider, puis construire et enfin signer le paquet ;

  • charger le paquet sur le dépôt principal ;

  • ensuite, téléchargement automatique des paquets par les clients WAPT ;

  • exécution des paquets selon la méthode sélectionnée :

    • L”Administrateur force l”upgrade ;

    • l”Utilisateur choisit le moment opportun pour lui ;

    • une tâche planifiée lance l’exécution de la mise à jour ;

    • la mise à jour est exécutée à l’extinction de la machine ;

  • remontée des informations d’inventaire ;

  • consultation de la remontée d’inventaire via la console ;

Comportement de l’agent WAPT pour installer / supprimer / configurer en contexte utilisateur / auditer un paquet

Un concept clé qui peut être difficile à comprendre est le comportement de l’agent WAPT lors de l’installation d’un paquet et les considérations qui l’entourent.

L’installation du paquet d’agents WAPT peut être divisée en étapes :

  • paquet téléchargé dans le cache de l’agent;

  • décompression du paquet dans un dossier temporaire ;

  • Le contenu de setup.py est stocké dans la base de données de l’agent WAPT située dans C:\Program Files (x86)\wapt\db\waptdb.sqlite;

  • les logiciels sont installés à partir des fichiers décompressés :

  • en cas de succès : le paquet téléchargé + les fichiers décompressés sont supprimés et le statut est envoyé au serveur ;

  • en cas d’échec : le paquet téléchargé est conservé - les fichiers décompressés sont supprimés - le statut d’erreur est envoyé au serveur ;

Ce comportement est important car il a un impact sur les actions futures.

WAPT install behavior

Comportement de l’installation d’un paquet WAPT

Par exemple, quand on supprime un paquet WAPT, les étapes suivantes sont effectuées :

  • Le contenu de setup.py est récupéré depuis la base de données située dans C:\Program Files (x86)\wapt\db\waptdb.sqlite ;

  • la valeur de UninstallString récupérée depuis la base de données, est exécutée ;

  • Si elle est définie, la fonction uninstall() est exécutée à partir du code source récupéré ;

Des étapes similaires sont reproduites lors de l’exécution de session_setup et audit.

WAPT behavior with uninstall / session_setup and audit

Comportement de l’agent WAPT avec la désinstallation, le session_setup et l’audit

Architecture du serveur WAPT

L’architecture du serveur WAPT repose sur plusieurs rôles distincts et en partie dissociables :

  • rôle de dépôt : distribution de paquets ;

  • rôle d’inventaire : inventaire matériel et logiciel ;

  • rôle de proxy : proxy de commande depuis la console ;

Rôle de dépôt

Le serveur WAPT a pour premier rôle celui de dépôt de fichiers web.

WAPT repository mechanism

Fonctionnement du dépôt WAPT

  • ce rôle de dépôt est accompli par un serveur web Nginx ;

  • le dépôt permet la distribution des paquets WAPT, des installeurs waptagent et waptsetup ;

  • les paquets WAPT sont accessibles avec un navigateur web à l’adresse : https://srvwapt.mydomain.lan/wapt ;

  • les paquets machines sont contenus dans un répertoire inaccessible par défaut (https://srvwapt.mydomain.lan/wapt/wapt-host/) ;

Rôle d’inventaire

Le serveur WAPT a pour deuxième rôle celui de serveur d’inventaire.

Le serveur d’inventaire est un service passif qui collecte les informations que les agents WAPT lui envoient :

  • inventaire matériel ;

  • inventaire logiciel ;

  • statut des paquets WAPT ;

  • état des tâches (running, pending, error) ;

Note

Le service n’est pas actif dans le sens où le serveur d’inventaire ne fait que recevoir de l’information. Aucun service actif interroge directement les agents WAPT. Par conséquent en cas de défaillance du serveur d’inventaire, l’inventaire se régénérera automatiquement à partir des remontées d’inventaire des agents déployés.

En version Community, ce service d’inventaire n’a pas d’interface web pour la visualisation des données, l’accès aux données d’inventaire se fait au travers de la console WAPT.

En version Enterprise, l’inventaire est accessible à partir d’une console web de visualisation des données de type Business Intelligence.

Rôle de Proxy

Le serveur WAPT a pour troisième rôle celui de Proxy de commande.

Il agit comme un relai entre la console et les agents WAPT déployés.

WAPT proxy mechanism

Fonctionnement du proxy WAPT

Note

Toutes les actions envoyées aux agents WAPT sont signées par la clé privée de l”Administrateur. Sans la clé privé, aucune action ne pourra être envoyée sur les postes. Pour en savoir plus a propos de la signature des actions rendez-vous dans la documentation sur la signature des actions envoyées aux agents WAPT.

Les interactions classiques de WAPT

update

Lorsqu’on lance la commande update sur un agent (depuis la console, en ligne de commande ou depuis le wapttray), on dit à l’agent d’aller vérifier sur le dépôt WAPT si des nouveaux paquets ou des nouvelles versions de paquets sont disponibles. Par défaut, l’agent WAPT interroge son dépôt toutes les deux heures.

Si la date du fichier Packages a changé depuis le dernier update, alors l’agent WAPT télécharge le nouveau fichier Packages (entre 20 et 100ko).

L’agent WAPT compare ensuite le nouveau fichier Packages avec sa base de données locale.

Si l’agent WAPT constate qu’un paquet doit être ajouté, supprimé ou mis à jour, il basculera l’état du paquet en NEED-UPGRADE.

Il ne lancera pas immédiatement l’installation du paquet. Il attendra l’ordre upgrade pour exécuter la mise à jour.

upgrade

Lorsqu’on lance la commande upgrade (depuis la console, en ligne de commande, depuis une tâche planifiée sur le poste ou manuellement depuis le wapttray), on ordonne à l’agent d’installer les paquets en statut NEED-UPGRADE.

Un update doit précéder un upgrade, sinon l’agent ne saura pas que des mises à jour sont devenues disponibles.

Fonctionnement de l’agent WAPT

Par défaut l’agent WAPT fera un update / download-upgrade au démarrage du service, puis toutes les deux heures pour vérifier s’il a des choses à faire.

C:\Program Files (x86)\wapt\

Un upgrade sera ensuite lancé automatiquement à l’arrêt de l’ordinateur avec le waptexit. Un Administrateur pourra également forcer un upgrade depuis la console.

Si le serveur WAPT n’est pas disponible au moment de l”upgrade, l’agent WAPT pourra tout de même installer ses paquets en attente car ils seront disponibles dans le cache.

L’inventaire sera ensuite envoyé quand le serveur WAPT sera de nouveau disponible.

Les 4 buts de l’agent WAPT sont donc :

  • d’installer un paquet host, group ou unit si celui-ci est disponible ;

  • de supprimer les paquets obsolètes ;

  • de résoudre les dépendances et les conflits ;

  • de maintenir tous ses paquets WAPT installés à jour par rapport à ceux du dépôt ;

  • d’envoyer régulièrement son inventaire matériel et l’état d’installation de ses paquets ;

La création de paquets WAPT

Le langage de WAPT et les environments de développement

WAPT est édité avec le langage de programmation Python.

N’importe quel environment de développement rapide (RAD) destiné à la programmation python convient.

WAPT a développé quelques extensions très utiles dans le RAD PyScripter https://sourceforge.net/projects/pyscripter.

Tranquil IT recommande l’usage de PyScripter, disponible dans le paquet tis-waptdev.

Les grands concepts du développement de paquets WAPT

La puissance de Python

Toute la puissance de Python peut être avantageusement exploitée.

De nombreuses librairies existent en standard avec Python pour :

  • faire des boucles de vérification (if … then … else …) ;

  • copier, coller, déplacer des fichiers ou des répertoires ;

  • tester l’existence ou l’absence de fichiers ou de répertoires ;

  • tester l’existence ou l’absence d’éléments de base de registre ;

  • tester des droits, les modifier ;

  • interroger des sources de données extérieures (annuaires, bases de données, autres référentiels) ;

  • etc …

La puissance de WAPT

Functions most commonly used with WAPT were simplified within libraries called Setuphelpers.

Setuphelpers libraries simplify the process of creating and testing WAPT packages, thus validating WAPT’s main objectives:

  • ce qui était compliqué est rendu simple avec WAPT ;

  • ce qui était simple est rendu trivial avec WAPT ;

Je veux maintenant installer mon serveur WAPT !!