Politiques de mots de passe et détection d'attaques sous Linux

CompTIABeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez des techniques essentielles pour renforcer la sécurité d'un système Linux en implémentant et en appliquant des politiques de mots de passe robustes. Vous configurerez des règles à l'échelle du système pour imposer la complexité des mots de passe, en exigeant une longueur minimale et un mélange de différents types de caractères, tels que les lettres majuscules, les lettres minuscules et les chiffres. Vous configurerez également des politiques de vieillissement des mots de passe pour garantir que les identifiants sont changés régulièrement, réduisant ainsi le risque associé aux mots de passe compromis en modifiant les fichiers de configuration système centraux.

Au-delà de l'établissement de la politique, vous vous assurerez que ces exigences de mots de passe forts sont appliquées aux nouveaux comptes utilisateurs. Le laboratoire passe ensuite des mesures de sécurité proactives à la détection réactive, vous apprenant à surveiller les journaux d'authentification du système. En analysant ces journaux, vous serez en mesure d'identifier les activités suspectes, telles que les tentatives de connexion répétées et échouées, qui peuvent indiquer une attaque par force brute ou d'autres tentatives d'accès non autorisé.

Configurer la Politique de Mot de Passe Locale sous Linux pour la Complexité et l'Âge

Dans cette étape, vous apprendrez à renforcer la sécurité d'un système Linux en configurant une politique de mot de passe robuste. Une politique de mot de passe forte est un contrôle de sécurité fondamental qui applique deux aspects critiques : la complexité et l'âge. Les règles de complexité garantissent que les mots de passe ne sont pas facilement devinables en exigeant un mélange de types de caractères, tandis que les règles d'âge forcent les utilisateurs à changer leurs mots de passe périodiquement, réduisant ainsi le risque de compromission des identifiants. Vous utiliserez des utilitaires Linux standard pour modifier les fichiers de configuration système et appliquer ces politiques.

Commençons par explorer la complexité des mots de passe. Sur les systèmes modernes basés sur Debian comme Ubuntu, la qualité des mots de passe est gérée par le module pam_pwquality. Sa configuration est stockée dans le fichier /etc/security/pwquality.conf.

Commençons par examiner les paramètres par défaut. Utilisez la commande cat pour visualiser le contenu du fichier de configuration. Nous utiliserons grep pour filtrer les lignes commentées et les lignes vides afin de rendre la sortie plus claire.

grep -vE '^#|^$' /etc/security/pwquality.conf

Vous pourriez voir certains paramètres par défaut ou le fichier pourrait être vide de configurations actives. Maintenant, nous allons imposer une politique plus stricte. Nous devons éditer ce fichier avec des privilèges d'administrateur, nous utiliserons donc sudo avec l'éditeur nano.

sudo nano /etc/security/pwquality.conf

Ajoutez les lignes suivantes au fichier pour appliquer notre nouvelle politique. Ces paramètres exigent que le mot de passe ait au moins 10 caractères et contienne au moins un chiffre, une lettre majuscule et une lettre minuscule.

minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1

Décortiquons ces options :

  • minlen = 10: Définit la longueur minimale acceptable pour le mot de passe à 10 caractères.
  • dcredit = -1: Exige au moins un chiffre. Le nombre négatif signifie "au moins un".
  • ucredit = -1: Exige au moins un caractère majuscule.
  • lcredit = -1: Exige au moins un caractère minuscule.

Après avoir ajouté ces lignes, enregistrez le fichier et quittez nano en appuyant sur Ctrl+X, puis Y, et Enter.

Passons maintenant à la configuration de l'âge des mots de passe (expiration). Ces paramètres définissent la durée de vie maximale et minimale d'un mot de passe. Les valeurs par défaut pour les nouveaux comptes utilisateurs sont stockées dans /etc/login.defs.

Utilisez grep pour trouver les paramètres pertinents dans ce fichier.

grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs

Vous verrez les valeurs par défaut, qui sont souvent définies sur un nombre très élevé pour PASS_MAX_DAYS, désactivant effectivement l'expiration.

##       PASS_MAX_DAYS   Maximum number of days a password may be used.
PASS_MAX_DAYS   99999
##       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
PASS_MIN_DAYS   0
##       PASS_WARN_AGE   Number of days warning is given before a password expires.
PASS_WARN_AGE   7

Appliquons une politique d'expiration de 9000 jours. Ouvrez le fichier avec sudo nano.

sudo nano /etc/login.defs

Trouvez la ligne PASS_MAX_DAYS et changez sa valeur de 99999 à 9000. Vous pouvez également définir PASS_MIN_DAYS à 7 pour empêcher les utilisateurs de changer leur mot de passe trop fréquemment.

##       PASS_MAX_DAYS   Maximum number of days a password may be used.
PASS_MAX_DAYS   9000
##       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
PASS_MIN_DAYS   7
##       PASS_WARN_AGE   Number of days warning is given before a password expires.
PASS_WARN_AGE   14

Enregistrez le fichier et quittez nano. Ces paramètres dans /etc/login.defs s'appliquent aux utilisateurs créés après cette modification. Pour appliquer la politique à un utilisateur existant, comme notre utilisateur labex, nous utilisons la commande chage.

Vérifiez d'abord les informations d'âge actuelles pour l'utilisateur labex.

sudo chage -l labex

La sortie indiquera que le mot de passe n'expire jamais.

Last password change                                    : Jul 22, 2023
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Maintenant, utilisez chage avec l'indicateur -M pour définir le nombre maximum de jours à 9000 pour l'utilisateur labex.

sudo chage -M 9000 labex

Vérifiez le changement en consultant à nouveau les informations d'âge de l'utilisateur.

sudo chage -l labex

Vous verrez maintenant que la date Password expires a été mise à jour, et le nombre maximum de jours est fixé à 9000, appliquant ainsi avec succès la politique d'âge.

Last password change                                    : Jul 22, 2023
Password expires                                        : Jan 01, 2048
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 9000
Number of days of warning before password expires       : 7

Vous avez maintenant configuré avec succès les politiques de complexité et d'âge des mots de passe sur votre système Linux.

Appliquer des mots de passe forts pour les nouveaux comptes utilisateurs

Dans cette étape, vous allez vérifier que les politiques de complexité et d'expiration des mots de passe que vous avez configurées à l'étape précédente sont appliquées aux nouveaux comptes utilisateurs. La meilleure façon de tester cela est de créer un nouvel utilisateur et de tenter de définir un mot de passe qui viole les règles. Cela démontrera comment le module pam_pwquality et les paramètres par défaut du système collaborent pour sécuriser les nouveaux comptes dès leur création.

Nous utiliserons la commande adduser, qui est un script interactif et convivial pour créer des utilisateurs sur les systèmes basés sur Debian. Créons un nouvel utilisateur nommé testuser.

sudo adduser testuser

Le système vous invitera immédiatement à définir un mot de passe pour le nouvel utilisateur. C'est ici que notre politique sera testée.

Tout d'abord, essayons de définir un mot de passe simple et faible qui viole notre politique. Lorsque vous êtes invité à entrer le nouveau mot de passe, tapez password et appuyez sur Entrée.

Adding user `testuser' ...
Adding new group `testuser' (1001) ...
Adding new user `testuser' (1001) with home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
New password:

Étant donné que password viole nos règles (il est trop court et ne contient pas de majuscules ni de chiffres), le système le rejettera. Voyons la raison invoquée.

BAD PASSWORD: The password contains less than 1 digits

Le système le rejette, signalant le manque de chiffres. Il viole plusieurs politiques, mais c'est la première qu'il signale.

Le système vous invitera à nouveau. Maintenant, essayons un mot de passe qui respecte l'exigence de longueur mais viole toujours les règles de complexité. Tapez 12345 et appuyez sur Entrée.

BAD PASSWORD: The password contains less than 1 uppercase letters
New password:

Conseils : Si vous créez accidentellement un utilisateur, vous pouvez utiliser sudo deluser testuser pour supprimer l'utilisateur et réessayer.

Le système le rejette à nouveau. Cette fois, c'est parce que le mot de passe manque d'un chiffre. Il manque également une lettre majuscule, il ne satisfait donc pas nos exigences de complexité. Maintenant, fournissons un mot de passe qui répond à tous nos critères. Lorsque vous y êtes invité, tapez StrongPass2025 et appuyez sur Entrée. Il vous sera demandé de le retaper pour confirmation.

New password:
Retype new password:
passwd: password updated successfully

Succès ! Le système a accepté le mot de passe fort. Il vous demandera maintenant des informations supplémentaires sur l'utilisateur. Vous pouvez simplement appuyer sur Entrée pour chaque invite afin d'accepter les valeurs par défaut.

Changing the user information for testuser
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

L'utilisateur testuser a maintenant été créé. Vous pouvez vérifier que l'utilisateur existe en utilisant la commande id.

id testuser

Ceci affichera l'ID de l'utilisateur, l'ID de groupe et les appartenances aux groupes.

uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)

Ensuite, confirmons que la politique d'expiration des mots de passe que nous avons définie dans /etc/login.defs a été automatiquement appliquée à ce nouvel utilisateur. Utilisez la commande chage pour afficher les informations d'expiration pour testuser.

sudo chage -l testuser

Le résultat montrera que le Maximum number of days between password change (Nombre maximum de jours entre le changement de mot de passe) est défini sur 9000, exactement comme nous l'avons configuré.

Last password change                                    : Jul 22, 2023
Password expires                                        : Jan 01, 2048
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 9000
Number of days of warning before password expires       : 14

Enfin, pour maintenir notre système propre, supprimons l'utilisateur de test. La commande deluser supprimera le compte utilisateur.

sudo deluser testuser

Le système confirmera que l'utilisateur a été supprimé.

Removing user `testuser' ...
Warning: group `testuser' has no more members.
Done.

Vous avez réussi à créer un nouvel utilisateur, à tester l'application de la politique de mot de passe et à vérifier que les règles d'expiration par défaut ont été appliquées.

Surveiller les journaux d'authentification pour les tentatives de connexion échouées

Dans cette étape, vous apprendrez à surveiller les journaux d'authentification du système pour détecter les menaces de sécurité potentielles, telles que les attaques par force brute. Une partie essentielle de l'administration système consiste à examiner régulièrement les journaux pour détecter les activités suspectes. Les tentatives de connexion échouées sont un indicateur critique des tentatives d'accès non autorisées. Vous simulerez une connexion échouée, puis utiliserez des commandes Linux standard pour trouver et analyser les entrées de journal correspondantes.

Sur les systèmes basés sur Debian comme Ubuntu, les événements d'authentification (réussis et échoués) sont généralement enregistrés dans le fichier /var/log/auth.log. Ce fichier nécessite des privilèges d'administrateur pour être lu.

Tout d'abord, générons une tentative de connexion échouée. Nous pouvons le faire en toute sécurité en utilisant la commande su (substitute user) pour essayer de basculer vers notre propre compte utilisateur, labex, mais en fournissant intentionnellement le mauvais mot de passe.

su labex

Le système vous demandera un mot de passe. Tapez un mot de passe incorrect, comme wrongpassword, et appuyez sur Entrée.

Password:
su: Authentication failure

Faisons-le une fois de plus pour créer un schéma d'échecs.

su labex

Encore une fois, entrez un mot de passe incorrect. Maintenant que nous avons généré des données de journal, examinons le fichier de journal d'authentification. Nous utiliserons la commande tail avec sudo pour afficher les dernières lignes de /var/log/auth.log, qui est l'endroit où les événements les plus récents sont enregistrés.

sudo tail /var/log/auth.log

Vous verrez plusieurs nouvelles lignes relatives à vos tentatives su échouées. La sortie ressemblera à ceci, montrant l'horodatage, le processus (su) et le message d'échec.

Jul 22 16:45:01 labex-vm su[12345]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost=  user=labex
Jul 22 16:45:01 labex-vm su[12345]: FAILED SU (to labex) labex on /dev/pts/0
Jul 22 16:45:15 labex-vm su[12346]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost=  user=labex
Jul 22 16:45:15 labex-vm su[12346]: FAILED SU (to labex) labex on /dev/pts/0

La recherche manuelle dans les journaux peut prendre du temps. Une méthode plus efficace consiste à utiliser grep pour filtrer les mots-clés spécifiques. Recherchons toutes les lignes contenant "authentication failure".

sudo grep "authentication failure" /var/log/auth.log

Cette commande affichera uniquement les lignes qui correspondent au modèle, ce qui permet de repérer facilement les tentatives échouées que vous venez de créer.

Maintenant, créons un script shell simple pour automatiser ce processus de surveillance. Ce script vérifiera le journal des échecs et rapportera un résumé. Dans votre répertoire ~/project, créez un nouveau fichier nommé log_monitor.sh en utilisant nano.

nano log_monitor.sh

Entrez le script Bash suivant dans l'éditeur. Ce script utilise grep avec l'option -c pour compter le nombre de tentatives de connexion échouées, puis affiche un message d'état.

#!/bin/bash

LOG_FILE="/var/log/auth.log"
FAILURE_COUNT=$(sudo grep -c "authentication failure" $LOG_FILE)

echo "--- Authentication Log Monitor ---"
if [ "$FAILURE_COUNT" -gt 0 ]; then
  echo "WARNING: Found $FAILURE_COUNT failed login attempts."
else
  echo "OK: No failed login attempts found."
fi
echo "--------------------------------"

Enregistrez le fichier et quittez nano en appuyant sur Ctrl+X, puis Y, et Entrée.

Ensuite, rendez votre nouveau script exécutable en utilisant la commande chmod.

chmod +x log_monitor.sh

Enfin, exécutez votre script de surveillance pour voir le résultat.

./log_monitor.sh

Étant donné que vous avez généré des connexions échouées, le script les détectera et affichera un message d'avertissement avec le nombre exact.

--- Authentication Log Monitor ---
WARNING: Found 2 failed login attempts.
--------------------------------

Vous avez maintenant appris à simuler, détecter et créer un script de surveillance de base pour les tentatives d'authentification échouées, une compétence cruciale pour maintenir la sécurité du système.

Résumé

Dans ce laboratoire, vous avez appris à renforcer la sécurité des systèmes Linux en configurant une politique de mots de passe locaux robuste. Vous avez modifié le fichier /etc/security/pwquality.conf pour appliquer des règles de complexité des mots de passe à l'aide du module pam_pwquality. Cela impliquait de définir une longueur minimale de mot de passe et d'exiger l'inclusion d'au moins un chiffre, une lettre majuscule et une lettre minuscule pour se protéger contre les identifiants facilement devinables.

De plus, vous avez exploré comment garantir que ces politiques de mots de passe forts sont appliquées lors de la création de nouveaux comptes utilisateurs. Le laboratoire a également couvert la compétence essentielle de la surveillance des journaux d'authentification du système pour détecter et analyser les événements de sécurité, tels que les tentatives de connexion échouées répétées, qui peuvent indiquer une attaque potentielle.