Cybersécurité : Serveur de mots de passe SecretManager
Introduction
SecretManager est un serveur de gestion de mots passe, créé par Pierre-Luc Mary et sous licence Copyleft. Il comporte une interface web et est écrit en php5. Le logiciel est composé en deux parties :
- SecretManager : Ce composant gère tout ce qui est interface web.
- SecretServer : Ce composant gère tout ce qui est mot de passe.
Les deux sont dans le même dossier à télécharger; tout est inclus. Nous verrons dans un premier temps la mise en place de SecretManager, puis celle de SecretServer.
Installation
Pré-requis
Je pars ici d'une VM vierge. Néanmoins, il est nécessaire de gérer tout ce qui est en lien avec DNS, à la fois sur le serveur et sur le client. Votre serveur doit donc avoir un serveur DNS (contenant une entrée pour lui ! SecretManager a besoin de faire des requêtes DNS sur lui-même !). Si vous n'en avez pas, vous pouvez utiliser le fichier /etc/hosts.
Dépendances
Je pars ici d'une VM Debian Stretch.
- Nous allons installer SecretManager sur un serveur Apache2. Nous commencons par installer les composants nécessaires :
apt update apt install apache2 mysql-server unzip phpmyadmin
- Puisque j'utilise Debian Stretch, php5 n'est pas disponible tel quel. Je vais donc ajouter les dépôts de Debian Jessie pour y avoir accès:
vim /etc/apt/sources.list #Ajouter la ligne: deb http://deb.debian.org/debian jessie main
- Il n'y a plus qu'à installer php et ses modules, nécessaires à phpmyadmin et SecretManager :
apt update && apt install php5 php-mbstring php-gettext php5-mysql php-mcrypt
Installation de SecretManager
- SecretManager est disponible depuis Sourceforge. On se place dans le dossier home et on le télécharge :
cd ~ wget https://datapacket.dl.sourceforge.net/project/secretmanager/SecretManager-v1.0-2.zip
- Les téléchargements avec wget depuis Sourceforge peuvent être ennuyeux; si le lien n'est pas bon, lancez un téléchargement de SecretManager depuis Sourceforge dans un navigateur, annulez-le, puis allez dans la section téléchargements de votre navigateur et récupérez le lien [sous Firefox : clic-droit > Copier l'adresse d'origine du téléchargement].
- Nous allons ensuite le dézipper et le placer dans le dossier /var/www avec les droits:
unzip SecretManager-v1.0-2.zip cp -r SecretManager /var/www/SecretManager chown -R www-data:www-data /var/www/SecretManager/
Mise en place du serveur Web
- Je commence par créer mon fichier d'hôtes virtuel tel que celui-ci dans /etc/apache2/sites-available/001-secretmanager.conf. Celui-ci redirige automatiquement vers https.
<VirtualHost *:80> ServerName secretmanager.ju.lab ServerAdmin webmaster@localhost Redirect Permanent / https://secretmanager.ju.lab ErrorLog ${APACHE_LOG_DIR}/secretmanager.log CustomLog ${APACHE_LOG_DIR}/secretmanager.log combined </VirtualHost> <VirtualHost *:443> ServerName secretmanager.ju.lab DocumentRoot /var/www/SecretManager ErrorLog ${APACHE_LOG_DIR}/secretmanager.log SSLEngine on SSLCertificateKeyFile /etc/ssl/private/secretmanager_priv_key.pem SSLCertificateFile /etc/ssl/private/secretmanager_cert.pem ###Configuration spécifique à SecretManager <Directory /var/www/SecretManager> DirectoryIndex index.php index.html AllowOverride All Order allow,deny Allow from all </Directory> <Directory /var/www/SecretManager/Backup> Order allow,deny Allow from localhost Deny from all </Directory> <Directory /var/www/SecretManager/Libraries/Restricted> Order allow,deny Allow from localhost Deny from all </Directory> CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\"%b" </VirtualHost>
- Je vais ensuite générer la clef et le certificat (remplir les champs conformément à votre site):
cd /etc/ssl/private/ openssl req -newkey rsa:2048 -nodes -keyout secretmanager_priv_key.pem -x509 -days 365 -out secretmanager_cert.pem
- Je vais ensuite activer ssl pour Apache2, contrôler et activer le site, et recharger Apache2:
cd /etc/apache2/sites-available/ a2ensite 001-secretmanager.conf a2enmod php5 a2enmod ssl a2enmod rewrite apache2ctl -t apache2ctl graceful systemctl restart apache2
Base de données
Nous allons devoir accéder à phpmyadmin pour installer les fichiers de base de données prévus par SecretManager. Il faut s'y connecter avec un utilisateur ayant tous les droits (La connection en tant que root étant par défaut interdite, il est plus simple de créer un utilisateur temporaire et de lui donner tous les droits, avant de s'en servir pour se connecter. N'oubliez pas de le supprimer après !).
- Connectez vous à http://ip_du_serveur/phpmyadmin.
- Rendez-vous dans l'onglet "import", et importez les fichiers suivants, contenus dans SecretManager/Installation :
- Secret-Manager-0-Linux.sql
- Secret-Manager-1.sql
- Secret-Manager-2.sql
- Secret-Manager-3.sql
- J'utilise ici phpmyadmin pour suivre à la lettre les instruction d'installation de SecretManager. Néanmoins, il est également possible de le faire en ligne de commande : mysql -u myuser -p < /home/user/SecretManager/Install/Secret-Manager-0-Linux.sql
Ajustement du routage interne de SecretManager
Il est nécessaire d'indiquer à SecretManager vers quel serveur (lui-même, normalement...) rediriger les flux en réécrivant les adresses. Pour cela, ouvrez le fichier /var/www/SecretManager/Constants.inc.php ( Il est possible de se servir de ce fichier pour déplacer les dossiers de SecretManager; néanmoins, il faut prendre garde à ce que www-data y aait toujours accès, où qu'ils soient.) avec un éditeur de texte, puis modifiez la ligne suivante:
define( 'SERVER', 'ihm.secretmanager.fr' ); #Est remplacé par, dans mon cas: define( 'SERVER', 'secretmanager.ju.lab' );
Vous pouvez indiquer une URL ou bien une IP.
Vérification de l'installation
SecretManager implémente un script de vérification de l'installation. Vous pouvez y accéder depuis l'url :
https://adressedevotreserveurweb/SM-control.php
Tous les voyants doivent être sur 'OK'.
Premier accès
Le serveur est en place, on va pouvoir y accéder via l'url : https://adresseduserveur/SM-login.php. Le login par défaut :
- login : root
- mot de passe (attention à l'espace): Welcome !
Vous devez accéder au panneau de contrôle de SecretManager :
Mise en place du SecretServer
SecretManager est en place. Il ne reste plus qu'à s'occuper de SecretManager qui est, lui, un peu plus simple.
Configuration
SecretServer utilise le fichier de configuration suivant : /var/www/SecretManager/Libraries/Restricted/Config_SM-secrets-server.inc.php.
Il contient 3 choses :
- Son adresse IP : le seul paramètre à changer, normalement.
- Le port sur lequel il écoute (par défaut 10000)
- Le nom du fichier ou la clef "mère" sera stockée (c'est la clef qui sert à chiffrer tout les mots de passe). Cette clef sera elle-même chiffrée par une clef "opérateur", elle ne devrait donc pas être en clair sur le serveur.
Lancement du serveur
Pour le premier lancement, il conseillé d'utiliser le mode "debug" (un mode verbeux) :
php5 /var/www/SecretManager/SM-secrets-server.php -d
Plus d'options sont disponibles et l'aide est disponible avec :
php5 SM-secrets-server.php -h
Qui affiche:
SM-secrets-server.php [-config "conf_file"] [-debug] [-version] -config "conf_file" : declare a specific configuration file -c "conf_file" : declare a specific configuration file -debug : script execution is in "debug" mode -d : script execution is in "debug" mode -version : show script version -v : show script version -force : force SecretServer to stop when we've got an integrity alert -f : force SecretServer to stop when we've got an integrity alert
Quand il est lancé sans option, il tourne en tache de fond.
En tant que daemon
Il est possible d'en faire un daemon en créant le script suivant dans /etc/init.d/SecretManager.sh (n'oubliez pas le chmod +x):
# !/bin/sh ###BEGIN INIT INFO # Provides : secretmanager # Required-Start : $all # Required-Stop : $local_fs # Default-Start : 2 3 4 5 # Default-Stop : 0 1 6 # Short-Description : secretserver # Description : Demarre et arrete le SecretServer. Composant de securite du SecretManager. ### END INIT INFO cd /var/www/SecretManager case $1 in start) echo ʺ′′Starting SecretServerʺ′′ php5 SM-secrets-server.php 2&1 > /var/log/SecretServer.log & ;; stop) echo ʺ′′Stopping SecretServerʺ′′ PID=`ps aux|grep ʺ′′php SM-secrets-server.phpʺ′′|grep –v grep|awk ‘{print $2}’` Kill -15 $PID ;; restart) $0 stop $0 start ;; *) echo ʺ′′Usage : /etc/init.d/SecretServer {start|stop|restart}ʺ′′ exit 1 ;; esac exit 0
Le serveur "SecretManager" est terminé.
Utilisation du serveur
Avant de continuer, assurez-vous que le SecretServer soit démarré !
Clef mère et clef opérateur
Le fonctionnement de base, côté chiffrement, est le suivant : Le serveur utilise une "clef mère", longue et complexe, pour chiffrer tous les mots de passe. Cette clef mère est elle-même chiffrée à l'aide d'une clef opérateur. Pour commencer à utiliser le serveur, il va falloir créer une clef-mère et une clef opérateur. Pour cela, il faut cliquer en haut à gauche sur l'icône de configuration, puis sur "Gestion du SecretServer". Vous arrivez ensuite sur l'écran suivant :
Vous pouvez cliquer sur "Générer" pour que les mots de passe soient générés automatiquement. Une fois que vous cliquez sur "Créer", une fenêtre pop-up s'ouvre pour vous donner les mots de passe que vous avez tapés. Ils ne réaparaitront pas, alors notez-les !
Utilisation
Le panneau de configuration suivant est là où se passent la plupart des opérations :
À partir d'ici, il est recommandé de créer des utilisateurs (via "Gérer les utilisateurs"). Pour commencer à créer des utilisateurs, il est cependant recommandé de commencer par se rendre dans le menu "Gestion des préférences" (icône en haut à gauche, en forme de boutons), onglet Connexion :
Une fois ce mot de passe par défaut pris en compte, vous pouvez créer des utilisateurs et des groupes de secrets via le menu de configuration. Une fois ceci fait, vous aurez la possibilité d'enregistrer de nouveaux mots de passe depuis la page d'acceuil. Il est possible d'accéder à une gestion fine des droits de chaque utilisateur (un peu à la manière de GLPI); néanmoins je ne détaillerais pas plus ici. Je laisse ci-dessous la documentation administrateur.
<pdf>Fichier:Guideadminss.pdf</pdf>
Épilogue
SecretManager est un outil intéressant de par ses possibilités : l'interface n'est pas déroutante pour peu que l'on soit habitué à GLPI, par exemple. Il propose une API, une gestion des utilisateurs par LDAP ou RADIUS, des sauvegardes... Il semble facile de gérer une grande quantité de mots de passe différents.
Il est cependant complexe à mettre en place, et a le défaut d'utiliser php5. De plus, puisqu'il n'est pas dans les dépôts, la mise à jour n'est pas assurée. Si ce genre d'outils est intéressant pour une structure comprenant de nombreux employés, un simple Keepass en réseau semble bien plus simple à mettre en place, avec une gestion des connexions / sauvegardes prise en charge par l'hébergement du fichier de base de données. De plus, je n'ai pas pu trouver de tests probants quant à la sécurité de SecretManager; on sait simplement qu'il utilise AES256 pour le chiffrement. En bref, c'est un outil intéressant mais peut-être encore trop jeune.