Introduction
Dans le paysage numérique actuel, des politiques de mots de passe robustes sont cruciales pour protéger les informations sensibles. Cependant, même avec des politiques en place, des vulnérabilités peuvent exister. Ce laboratoire vous guidera à travers le processus d'utilisation de John the Ripper, un puissant outil de cassage de mots de passe, pour évaluer l'efficacité des politiques de mots de passe existantes. Vous apprendrez à identifier les faiblesses, à recommander des politiques plus strictes et à comprendre comment mettre en œuvre des vérifications de conformité automatisées pour améliorer la sécurité globale. Cette expérience pratique vous fournira des compétences pratiques en audit et en application de la sécurité des mots de passe.
Analyse des Politiques de Mots de Passe Existantes
Dans cette étape, vous commencerez par comprendre comment analyser les politiques de mots de passe existantes sur un système Linux. Bien que nous ne modifierons pas directement les politiques à l'échelle du système dans ce laboratoire, il est crucial de comprendre où ces politiques sont configurées pour l'audit. Nous nous concentrerons sur l'examen des fichiers de configuration courants qui dictent la complexité, l'âge et les paramètres de verrouillage des mots de passe.
Tout d'abord, examinons le fichier /etc/login.defs, qui contient les paramètres de configuration globaux pour la suite de mots de passe shadow. Ce fichier définit des paramètres tels que l'expiration des mots de passe, la longueur minimale des mots de passe et l'âge maximal des mots de passe.
Utilisez la commande grep pour rechercher les paramètres liés aux mots de passe dans /etc/login.defs :
grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|ENCRYPT_METHOD" /etc/login.defs
Vous devriez voir une sortie similaire à celle-ci, bien que les valeurs puissent varier :
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
ENCRYPT_METHOD SHA512
Ensuite, nous examinerons /etc/pam.d/common-password, qui est un fichier de configuration PAM (Pluggable Authentication Modules) qui contrôle les règles de complexité des mots de passe. Ce fichier inclut souvent des modules tels que pam_cracklib.so ou pam_pwquality.so qui appliquent des règles telles que l'exigence de casse mixte, de chiffres et de caractères spéciaux.
Utilisez cat pour afficher le contenu de /etc/pam.d/common-password :
cat /etc/pam.d/common-password
Vous verrez de nombreuses lignes, mais prêtez attention aux lignes contenant pam_pwquality.so ou pam_cracklib.so et leurs paramètres (par exemple, minlen, difok, ucredit, lcredit, dcredit, ocredit).
password [success=1 default=ignore] pam_unix.so obscure sha512 shadow
password requisite pam_pwquality.so retry=3 minlen=8 difok=3 reject_username enforce_for_root
password optional pam_gnome_keyring.so
password optional pam_kwallet.so
password optional pam_systemd.so
Enfin, vérifions le fichier /etc/security/pwquality.conf, qui offre un contrôle plus granulaire sur les paramètres de qualité des mots de passe lorsque pam_pwquality.so est utilisé.
cat /etc/security/pwquality.conf
Vous pourriez voir des paramètres tels que minlen, dcredit, ucredit, lcredit, ocredit, maxrepeat, etc.
## Configuration for the pam_pwquality module
#
## The setting of the PAM module is usually in /etc/pam.d/common-password
#
## minlen = 8
## difok = 3
## dcredit = -1
## ucredit = -1
## lcredit = -1
## ocredit = -1
## minclass = 0
## maxrepeat = 0
## maxsequence = 0
## gecoscheck = 0
## dictcheck = 1
## usercheck = 1
## enforce_for_root
En examinant ces fichiers, vous pouvez obtenir une bonne compréhension des paramètres actuels de la politique de mots de passe sur le système.
Utiliser John the Ripper pour Tester l'Efficacité des Politiques
Dans cette étape, vous utiliserez John the Ripper (JtR) pour tester l'efficacité des politiques de mots de passe. Nous simulerons un scénario où vous avez accès à un fichier de hachage de mots de passe et tenterez de casser des mots de passe faibles.
Tout d'abord, créons un fichier de mots de passe factice à des fins de démonstration. Nous allons créer un fichier nommé passwords.txt avec quelques mots de passe faibles.
echo "user1:password123" > ~/project/passwords.txt
echo "user2:welcome" >> ~/project/passwords.txt
echo "user3:labexrocks" >> ~/project/passwords.txt
Maintenant, nous devons convertir ces mots de passe en texte clair dans un format que John the Ripper peut comprendre. Nous utiliserons unshadow (un composant de JtR) pour combiner un fichier factice /etc/passwd et /etc/shadow. Pour simplifier, nous utiliserons directement le fichier passwords.txt avec le mode stdin de JtR pour le cassage.
Créons un fichier de liste de mots simple nommé wordlist.txt que John the Ripper utilisera pour tenter de casser les mots de passe.
echo "password123" > ~/project/wordlist.txt
echo "welcome" >> ~/project/wordlist.txt
echo "labexrocks" >> ~/project/wordlist.txt
echo "secret" >> ~/project/wordlist.txt
echo "123456" >> ~/project/wordlist.txt
Maintenant, utilisez John the Ripper pour casser les mots de passe de passwords.txt en utilisant wordlist.txt.
john --format=raw-md5 --wordlist=~/project/wordlist.txt ~/project/passwords.txt
Vous pourriez voir une sortie similaire à celle-ci, indiquant les mots de passe cassés :
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (Raw-MD5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (user1)
welcome (user2)
labexrocks (user3)
3g 0:00:00:00 DONE (2023-10-27 08:30) 100.0% 3g/s 100.0p/s 100.0c/s 100.0C/s password123 welcome labexrocks
Session completed.
Pour afficher les mots de passe cassés, vous pouvez utiliser l'option --show :
john --show ~/project/passwords.txt
Sortie :
user1:password123
user2:welcome
user3:labexrocks
3 password hashes cracked, 0 left
Cela démontre la facilité avec laquelle les mots de passe faibles peuvent être cassés à l'aide d'une simple liste de mots.
Identifier les Lacunes dans les Politiques de Mots de Passe
Dans cette étape, vous identifierez les lacunes dans les politiques de mots de passe simulées en vous basant sur les résultats de cassage de l'étape précédente. Le fait que John the Ripper ait pu facilement casser les mots de passe indique des faiblesses importantes.
Sur la base des mots de passe cassés (password123, welcome, labexrocks), voici quelques lacunes courantes qui ont permis de les casser :
- Absence d'Exigences de Complexité : Les mots de passe
welcomeetlabexrockssont des mots de dictionnaire simples ou des phrases facilement devinables.password123est un modèle courant. Une politique forte devrait imposer un mélange de lettres majuscules, de lettres minuscules, de chiffres et de caractères spéciaux. - Longueur Insuffisante : Bien que
password123etlabexrocksaient respectivement 11 et 10 caractères, ils restent vulnérables en raison de leur simplicité. Les politiques devraient imposer une longueur minimale, généralement de 12 caractères ou plus, pour augmenter l'espace de recherche pour les attaquants. - Aucune Vérification de Mots de Dictionnaire : La politique n'a pas empêché les utilisateurs de choisir des mots de dictionnaire courants ou des variations simples.
- Aucune Vérification de Modèles Courants : Les mots de passe comme
password123suivent des modèles prévisibles qui sont souvent inclus dans les listes de mots de cassage. - Absence d'Historique de Mots de Passe / Prévention de la Réutilisation : Si les utilisateurs sont autorisés à réutiliser d'anciens mots de passe, même s'ils étaient autrefois forts, ils deviennent vulnérables si ces anciens mots de passe sont divulgués.
Pour simuler l'identification de ces lacunes, considérons à quoi pourrait ressembler une politique de mots de passe plus forte. Par exemple, si notre politique actuelle autorise minlen=8 et aucune exigence de classe de caractères spécifique, alors welcome (7 caractères) échouerait, mais password123 (11 caractères, aucun caractère spécial) passerait. Les résultats du cassage soulignent que même si un mot de passe répond à une exigence de longueur de base, il peut toujours être faible si la complexité et les vérifications de dictionnaire ne sont pas appliquées.
Réfléchissez à la manière dont les paramètres du module pam_pwquality.so (comme minlen, dcredit, ucredit, lcredit, ocredit, dictcheck) pourraient être ajustés pour empêcher de tels mots de passe faibles. Par exemple, définir dcredit=-1 exigerait au moins un chiffre, ucredit=-1 pour les majuscules, etc.
Cette étape est principalement conceptuelle, axée sur l'analyse des résultats de l'exercice de cassage précédent pour comprendre les lacunes de la politique.
Recommander des Politiques de Mots de Passe Plus Fortes
Dans cette étape, vous formulerez des recommandations pour des politiques de mots de passe plus fortes basées sur les lacunes identifiées. Des politiques de mots de passe efficaces équilibrent la sécurité et la facilité d'utilisation.
Voici quelques recommandations pour une politique de mots de passe plus robuste :
- Longueur Minimale : Augmentez la longueur minimale du mot de passe à au moins 12-14 caractères. Les mots de passe plus longs sont exponentiellement plus difficiles à casser.
- Exemple de configuration PAM :
minlen=12dans/etc/security/pwquality.confoupam_pwquality.so minlen=12dans/etc/pam.d/common-password.
- Exemple de configuration PAM :
- Exigences de Complexité : Imposer l'utilisation d'un mélange de types de caractères :
- Lettres majuscules (A-Z)
- Lettres minuscules (a-z)
- Chiffres (0-9)
- Caractères spéciaux (!@#$%^&*()_+-=[]{}|;':",./<>?)
- Exemple de configuration PAM :
dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1dans/etc/security/pwquality.confoupam_pwquality.so dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1dans/etc/pam.d/common-password.
- Vérification de Dictionnaire et de Modèles Courants : Empêcher l'utilisation de mots de dictionnaire courants, de noms courants et de modèles facilement devinables (comme
password123,qwerty,123456).- Exemple de configuration PAM :
dictcheck=1 usercheck=1dans/etc/security/pwquality.confoupam_pwquality.so dictcheck=1 usercheck=1dans/etc/pam.d/common-password.
- Exemple de configuration PAM :
- Historique de Mots de Passe / Prévention de la Réutilisation : Empêcher les utilisateurs de réutiliser un certain nombre de leurs mots de passe précédents. Cela atténue le risque si un ancien mot de passe est compromis.
- Exemple de configuration PAM :
remember=5avecpam_unix.sodans/etc/pam.d/common-password(par exemple,password required pam_unix.so obscure sha512 shadow remember=5).
- Exemple de configuration PAM :
- Politique de Verrouillage de Compte : Mettre en œuvre une politique de verrouillage de compte après un certain nombre de tentatives de connexion échouées pour dissuader les attaques par force brute.
- Exemple de configuration PAM : Utilisation de
pam_tally2.sooupam_faillock.sodans/etc/pam.d/common-auth(par exemple,auth required pam_faillock.so deny=3 unlock_time=600).
- Exemple de configuration PAM : Utilisation de
- Changements Réguliers de Mots de Passe (avec prudence) : Bien que traditionnellement recommandés, des changements de mots de passe obligatoires fréquents peuvent amener les utilisateurs à choisir des mots de passe plus simples et plus prévisibles. Une meilleure approche consiste à imposer une complexité et une longueur fortes, et à n'exiger des changements que si une violation est suspectée.
Pour démontrer un changement conceptuel, imaginons que nous mettons à jour une politique. Nous ne modifierons pas réellement les fichiers système, mais vous pouvez voir comment le fichier pwquality.conf pourrait être modifié.
Ouvrez un fichier factice pour simuler les recommandations de politique :
nano ~/project/recommended_policy.txt
Ajoutez le contenu suivant au fichier :
## Recommended Password Policy Settings
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
dictcheck = 1
usercheck = 1
maxrepeat = 3
maxsequence = 3
Enregistrez et quittez nano (Ctrl+S, Ctrl+X).
Ces paramètres imposeraient une longueur minimale de 14 caractères, exigeraient au moins un chiffre, une majuscule, une minuscule et un caractère spécial, et empêcheraient l'utilisation de mots de dictionnaire et de noms d'utilisateur.
Implémenter des Vérifications Automatisées de Conformité des Politiques
Dans cette étape, vous apprendrez à implémenter des vérifications automatisées de conformité des politiques. Alors que l'application directe des politiques à l'échelle du système se fait via PAM et d'autres fichiers de configuration, des vérifications automatisées peuvent être utilisées pour auditer régulièrement les mots de passe des utilisateurs ou les configurations système par rapport aux politiques définies.
Pour ce laboratoire, nous allons simuler une vérification de conformité simple à l'aide d'un script shell. Ce script vérifiera si le mot de passe d'un utilisateur factice répond à une exigence de longueur de base. Dans un scénario réel, de tels scripts seraient plus complexes, s'intégrant potentiellement à des outils comme OpenSCAP ou à des scripts personnalisés pour auditer les hachages de mots de passe réels (si autorisé et éthique) ou les fichiers de configuration.
Tout d'abord, créons un utilisateur factice et un fichier de hachage de mot de passe factice pour simuler un état système. Nous ne créerons pas de vrais utilisateurs système.
echo "testuser:\$6\$salt\$hashedpassword" > ~/project/dummy_shadow.txt
Maintenant, créez un script shell simple nommé check_password_compliance.sh qui vérifie si la longueur du mot de passe pour testuser dans dummy_shadow.txt est supérieure à une certaine valeur (par exemple, 10 caractères).
nano ~/project/check_password_compliance.sh
Ajoutez le contenu suivant au script :
#!/bin/bash
## This script simulates a basic password length compliance check.
## In a real scenario, you would parse actual shadow file entries
## or use more sophisticated tools.
MIN_LENGTH=10
PASSWORD_HASH=$(grep "testuser" ~/project/dummy_shadow.txt | cut -d':' -f2)
## For demonstration, we'll just check the length of a placeholder hash.
## In reality, you'd need to crack or analyze the actual hash.
## Here, we're just checking if the hash string itself is long enough,
## which is NOT how real password length checks work, but serves as a
## placeholder for a compliance check.
if [ ${#PASSWORD_HASH} -ge $MIN_LENGTH ]; then
echo "Compliance Check: testuser password hash length meets minimum requirement ($MIN_LENGTH characters)."
exit 0
else
echo "Compliance Check: testuser password hash length DOES NOT meet minimum requirement ($MIN_LENGTH characters)."
exit 1
fi
Enregistrez et quittez nano (Ctrl+S, Ctrl+X).
Rendez le script exécutable :
chmod +x ~/project/check_password_compliance.sh
Exécutez maintenant le script de vérification de conformité :
~/project/check_password_compliance.sh
Vous devriez voir une sortie indiquant la conformité en fonction de la longueur du hachage factice :
Compliance Check: testuser password hash length meets minimum requirement (10 characters).
Cet exemple simple illustre le concept d'une vérification automatisée de conformité. Dans un environnement de production, de tels scripts pourraient être planifiés pour s'exécuter périodiquement à l'aide de cron afin d'assurer une adhésion continue aux politiques de mots de passe. Des vérifications plus avancées impliqueraient l'analyse des hachages de mots de passe réels (si autorisé et avec les considérations de sécurité appropriées), la vérification par rapport à des listes de dictionnaires, ou l'intégration avec des cadres de conformité de sécurité.
Résumé
Dans ce laboratoire, vous avez acquis une expérience pratique dans l'audit et l'application des politiques de mots de passe. Vous avez appris à analyser les configurations de politiques de mots de passe existantes sur un système Linux en examinant des fichiers clés tels que /etc/login.defs, /etc/pam.d/common-password et /etc/security/pwquality.conf. Vous avez ensuite utilisé John the Ripper pour démontrer la facilité avec laquelle les mots de passe faibles peuvent être cassés, soulignant l'importance de politiques robustes. Sur la base de ces découvertes, vous avez formulé des recommandations pour des politiques de mots de passe plus fortes, en vous concentrant sur la longueur, la complexité et les vérifications de dictionnaire. Enfin, vous avez exploré le concept de vérifications automatisées de conformité en créant un script simple pour vérifier l'adhésion à la politique de mots de passe. Ce laboratoire fournit une compréhension fondamentale de l'audit de sécurité des mots de passe, vous dotant des compétences nécessaires pour identifier et atténuer les vulnérabilités liées aux mots de passe.


