Je ne vais pas être exhaustive, la sécurité dépendant des modèles de menace, de l'infrastructure, et n'étant jamais parfaite. Je passe rapidement la configuration de base (ne pas pouvoir se co en “root”, utiliser sudo, paramétrer SSH) : un bon système est une base.
Tout ce qui suit est pour Debian Stable.
Checklist rapide. Configuration de :
Moins de trucs installés = moins de surface d'attaque.
sudo systemctl list-unit-files --state=enabled
Faut-il chiffrer les disques de ses serveurs ? Cela dépend surtout du modèle de menace.
Scénario :
Contraintes techniques du chiffrement :
Contraintes humaines :
Conclusion : il vaut mieux chiffrer les données sur le disque (pour les logiciels qui le supportent), et garder le chiffrement des disques durs pour les ordinateurs portables et les disques externes.
Cependant, il y a des témoignages où les autorités ont obtenu des dumps des disques durs auprès des datacenter, sans que les personnes ayant le serveur en aient été préalablement prévenu. Cela doit sans doute se glisser dans des interstices (suspicion que l'hébergeur soit de mèche avec le contenu illégal posté sur ses services), mais c'est gênant.
En théorie aussi des disques durs décommissionnés sont effacés, mais est-ce qu'on peut faire complètement confiance à la compétence des autres ? Pour ces deux raisons, peut-être qu'il faut envisager de chiffrer quand même.
Linux utilise PAM (Pluggable Authentication Modules) pour la gestion des méchanismes d'authentification. Il est possible d'ajouter des modules pour renforcer ces méchanismes, qui s'appliqueront dans divers scénarios. PAM gère en particulier :
Il est possible de garder l'authentification de base, mais aussi de lier ça à d'autres types d'authentification. Par exemple le module pam_ldap.so permet de s'authentifier via un serveur LDAP.
C'est une bonne façon de se bloquer l'accès à son propre serveur, donc on bidouille avec précaution (garder les fichiers par défauts en bak
, tester la reconnection avec une autre session avant de se déco de la première…).
Quelques modules et modifications sur PAM permettent d'augmenter la sécurité.
libpam-pwquality pour améliorer la qualité des mots de passe. Éditer après son installation :
minlen = 12 # Au moins 3 catégories (majuscule, minuscule, chiffre, symbole) minclass = 3 # Au moins 1 chiffre dcredit = -1 # Au moins 1 majuscule ucredit = -1
libpam-passwdqc (vérifier si ce n'est pas en conflit avec pwquality?)
# Bloquer les mots de passe faibles password requisite pam_passwdqc.so min=12,10,8,7,6 max=40 passphrase=1 enforce=users
min=12,10,8,7,6
Longueurs minimales selon la complexité (de 1 à 4 classes de caractères) (TODO revoir avant de copier bêtement)max=40
: Longueur maximale. Interdire de faire trop long évite qu'un mot de passe freeze la machine…passphrase=1
: Autorise les longues phrases de passematch=4
: Mots du dictionnaire requis pour une passphrase (si activée) (Gnih ? TODO)similar=deny
: Rejette les mots de passe trop proches du précédentenforce=users
: Applique la politique à tous les utilisateursQuelques modifs sur ce fichier pourrait améliorer la sécurité (recommandations Lynis).
Cette partie demande une validation par Tycho ET des expérimentations : choisir le bon chiffrement et voir si la machine supporte l'augmentation des rounds de hachage. Possible que ce ne soit plus avec login.defs aussi, mais avec /etc/pam.d/common-password (entre autre) et Yescrypt. Bref, la question me dépasse.
# Forcer l'utilisation de SHA-512 au lieu de l'algo par défaut (MD5/DES obsolètes) ENCRYPT_METHOD SHA512 # Nombre minimal de rounds (itérations) pour le hachage SHA_CRYPT_MIN_ROUNDS 100000 # Nombre maximal de rounds SHA_CRYPT_MAX_ROUNDS 100000 # Longueur minimale des mots de passe PASS_MIN_LEN 12 # 12 caractères minimum
Forcez le re-hachage des mots de passe existants avec :
# Applique PASS_MAX_DAYS/MIN_DAYS/WARN_AGE sudo chage -M 90 -m 7 -W 14 <utilisateur> # Et forcer le changement de mot de passe à la prochaine connexion sudo passwd -e <utilisateur>
Il est aussi possible de définir une durée de vie pour les mots de passe. Ce qui est bien MAIS qui demande d'avoir une automatisation en cas de nombreux serveurs VM, sinon c'est juste l'enfer. Je trouverais en réalité plus intéressant de gérer ça via LDAP et le module PAM associé.
# Durée de vie des mots de passe (en jours) # Force le changement après 3 mois PASS_MAX_DAYS 90 # Délai minimal entre 2 changements PASS_MIN_DAYS 0 # Avertir 2 semaines avant expiration PASS_WARN_AGE 14
À voir ?
Surveillance des modifications : voir AIDE/Samhain/OSSEC/Autre ? Rkhunter est obsolète.
Alternative à Rkhunter ? Repérer les signatures de trucs foireux. Lynis préconise AIDE, Samhain ou Tripwire ; voir comment chacun fonctionne.
sudo apt install logwatch
Logwatch n'est pas un outil qui va agir, par contre il analyse les logs et en rends un rapport plus digeste. Si, vraiment plus digeste, ça permet de voir les bots.
C'est donc utile pour améliorer ses filtres. Une fois msmtp configuré (ou autre solution d'envoi de mail), créer le dossier pour Logwatch :
sudo mkdir /var/cache/logwatch
Et le paramétrer
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/ sudo nano /etc/logwatch/conf/logwatch.conf
Dans mon cas je permet surtout l'envoi du rapport par mail, mais à adapter si besoin (entre autre l'émetteur/Récepteur), et la quantité de détails (à adapter au fil des filtres…) :
Output = mail
Detail = 5
Pour MailTo
on peut déclarer plusieurs adresses mails, séparées par un espace :
MailTo = mail1@moi.net mail2@moi.net
Et un coup de cron journalier (sur root) :
15 1 * * * /usr/sbin/logwatch >/dev/null 2>&1 #logwatch
Lynis aide à auditer son système. Il ne fait rien seul, mais il aide à voir là où on est pas forcément top. Simplement sudo apt install lynis
.
Pour voir la liste des options :
sudo lynis
Pour un check du systeme, en root :
lynis audit system
Des recommendations et conseils sont présents à la fin de l'analyse, suivant ce qui a été détecté. Moralité je vais pouvoir encore améliorer ma doc…
Sur Xen, depuis l'hyperviseur, on peut avoir ces alertes :
! Found promiscuous interface [NETW-3015] - Details : enp2s0 - Solution : Determine if this mode is required or whitelist interface in profile https://cisofy.com/lynis/controls/NETW-3015/ ! Found promiscuous interface [NETW-3015] - Details : vif1.0 - Solution : Determine if this mode is required or whitelist interface in profile https://cisofy.com/lynis/controls/NETW-3015/ ! Found promiscuous interface [NETW-3015] - Details : vif2.0 - Solution : Determine if this mode is required or whitelist interface in profile https://cisofy.com/lynis/controls/NETW-3015/
C'est normal qu'en mode bridge, on aie une “promiscuité”. Mais chaque VM est dans son propre réseau (vif1, vif2) et si j'ai bien compris, ne pourra pas “sniffer” les communications des autres VM et de l'hyperviseur, même si elle est compromise. D'ailleurs, Lynis exécuté sur une VM ne donne pas cette alerte.
La recommandation n'est pas de demander un mot de passe pour démarrer la machine (ce serait le bordel sur serveur). Mais quand on est en phase de démarrage, si on choisit d'éditer le boot, il faut alors renseigner le mot de passe. Cela évite qu'un attaquant bypass des protections à ce moment. Cependant dans mon modèle de menace, cela semble plus générateur d'ennuis que d'autres choses :
La proposition reste pertinente, bien sûr, et sera à faire pour réellement sécuriser un serveur, mais dans mon cas, je considère que le risque est si faible que je peux me concentrer sur d'autres choses.
Debescan est un outil permettant de générer une liste des vulnérabilités affectant une installation de Debian particulière. Debescan fonctionne sur l'hôte devant être vérifié et télécharge les informations à propos de des vulnérabilités par Internet. Il peut envoyer des courriels aux intéressés lorsque de nouvelles vulnérabilités sont découvertes ou lorsqu'une mise à jour de sécurité devient disponible.
— Source : https://packages.debian.org/fr/stable/debsecan
(Il y a une coquille entre le nom du logiciel sur Debian et sa description dans les paquets…)
Est-ce utile de l'avoir ?
Un système assez “nu” va déjà lister de nombreuses alertes, beaucoup n'étant pas critiques dans notre modèle de menaces. Ce flot important n'aide pas à repérer ce sur quoi on peut agir. Tenir son système à jour est souvent la seule réponse…
On peut cependant essayer de filtrer un peu.
debsecan --suite bookworm --format report | grep -E "high|critical"
–suite bookworm
: nécessaire d'indiquer le nom de code de la version debian actuelle, pour filtrer.–format report
pour avoir sur la même ligne le nom de la CVE et les mots-clés adaptés. Encore faut-il que ce soit précisé dans les premiers mots. En l'état, vu le système des CVE et le manque d'outil adapté pour filtrer, il semble difficile d'utiliser Debsecan au quotidien.