Introduction
Les clés SSH (Secure Shell) constituent un moyen sécurisé d'authentification auprès des serveurs distants, offrant une alternative plus robuste aux connexions basées sur des mots de passe. Pour une sécurité accrue, une clé privée SSH peut être chiffrée avec une phrase secrète (passphrase). Si un attaquant obtient l'accès à votre fichier de clé privée, il aura toujours besoin de la phrase secrète pour l'utiliser.
Cependant, une phrase secrète faible peut représenter une vulnérabilité significative. Dans ce laboratoire, vous vous mettrez dans la peau d'un analyste de sécurité pour comprendre ce risque. Vous apprendrez à utiliser John the Ripper, un puissant outil open-source de cassage de mots de passe, pour casser la phrase secrète d'une clé privée SSH. Cet exercice est à des fins éducatives pour souligner l'importance d'utiliser des phrases secrètes robustes.
Générer une clé privée SSH protégée par un mot de passe
Dans cette étape, vous allez générer une nouvelle paire de clés SSH. La clé privée sera protégée par une phrase secrète simple et facile à deviner. Cette clé servira de cible pour notre exercice de cassage dans les étapes suivantes.
Nous utiliserons la commande ssh-keygen pour créer la clé. Nous spécifierons le type de clé, la taille en bits et le nom du fichier pour nous assurer qu'elle est créée dans notre répertoire de projet.
Exécutez la commande suivante pour générer une paire de clés RSA SSH. Lorsque vous serez invité à entrer une phrase secrète, tapez labex.
ssh-keygen -t rsa -b 2048 -f ./my_ssh_key -C "labex@labex.io"
Il vous sera demandé d'entrer et de confirmer une phrase secrète. Tapez labex et appuyez sur Entrée pour les deux invites.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): labex
Enter same passphrase again: labex
Your identification has been saved in ./my_ssh_key
Your public key has been saved in ./my_ssh_key.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx labex@labex.io
The key's randomart image is:
+---[RSA 2048]----+
| . |
| . . |
| . . |
| . . . . |
| . . S . |
| . . . o |
| . . . + . |
| . . . =.o.o |
|.. .oo*+E+ |
+----[SHA256]-----+
Maintenant, listez les fichiers du répertoire courant pour voir la paire de clés nouvellement créée : la clé privée my_ssh_key et la clé publique my_ssh_key.pub.
ls -l
total 12
-rw------- 1 labex labex 1823 Jan 01 12:00 my_ssh_key
-rw-r--r-- 1 labex labex 401 Jan 01 12:00 my_ssh_key.pub
-rw-r--r-- 1 labex labex 48 Jan 01 12:00 wordlist.txt
Vous avez créé avec succès une clé privée SSH protégée par un mot de passe.
Extraire le Hash de la Clé SSH avec ssh2john
John the Ripper ne peut pas travailler directement avec le format de fichier de clé SSH. Il nécessite un format de hash spécifique qui représente la phrase secrète chiffrée. Pour obtenir ce hash, nous utiliserons un utilitaire appelé ssh2john, qui est inclus dans la suite John the Ripper.
Dans cette étape, vous exécuterez ssh2john sur la clé privée que vous avez créée (my_ssh_key) et enregistrerez sa sortie dans un nouveau fichier. Ce fichier contiendra le hash que john pourra ensuite tenter de casser.
Exécutez la commande suivante pour extraire le hash et l'enregistrer dans un fichier nommé ssh_hash.txt :
ssh2john my_ssh_key > ssh_hash.txt
Cette commande ne produit aucune sortie dans le terminal car nous l'avons redirigée vers le fichier ssh_hash.txt en utilisant l'opérateur >.
Pour voir le contenu du fichier de hash généré, utilisez la commande cat :
cat ssh_hash.txt
Vous verrez une longue chaîne de texte, qui est la représentation hash de la phrase secrète de votre clé. Elle ressemblera à ceci :
my_ssh_key:$ssh2$0$16$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$1040$xxxxxxxx...
Vous avez maintenant le fichier de hash prêt pour le processus de cassage.
Casser le Hash de la Clé SSH avec John the Ripper
Une fois le hash extrait, il est temps d'utiliser John the Ripper pour le casser. Nous allons effectuer une "attaque par dictionnaire", où john essaie chaque mot d'une liste donnée comme phrase secrète potentielle. Pour ce laboratoire, nous utiliserons le fichier wordlist.txt qui a été pré-créé dans votre environnement.
Dans un scénario réel, les attaquants utilisent des listes de mots massives contenant des millions de mots de passe courants, de noms et de mots de dictionnaire. Notre simple liste de mots contient la phrase secrète correcte, labex, garantissant que le cassage sera réussi pour cette démonstration.
Exécutez la commande john, en spécifiant la liste de mots et le fichier de hash :
john --wordlist=wordlist.txt ssh_hash.txt
John commencera le processus de cassage. Comme la phrase secrète se trouve dans notre courte liste de mots, elle sera trouvée presque instantanément.
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH private keys ssh2john])
Cost 1 (KDF/cipher) is 0 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
labex (my_ssh_key)
1g 0:00:00:00 DONE (2023-01-01 12:05) 12.50g/s 12.50p/s 12.50c/s 12.50C/s sunshine..labex
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Succès ! La ligne de sortie labex (my_ssh_key) indique que la phrase secrète labex a été récupérée avec succès pour la clé my_ssh_key.
John the Ripper enregistre les mots de passe cassés dans un fichier appelé "pot file" (~/.john/john.pot par défaut). Pour afficher à nouveau le mot de passe cassé sans relancer l'attaque, vous pouvez utiliser l'option --show :
john --show ssh_hash.txt
my_ssh_key:labex
1 password hash cracked, 0 left
Cela confirme la phrase secrète cassée. Vous avez maintenant réussi à casser une phrase secrète faible d'une clé SSH.
Comprendre la Sécurité des Clés SSH
Ce laboratoire démontre un point critique : la sécurité d'une clé SSH protégée par une phrase secrète n'est aussi forte que la phrase secrète elle-même. Décomposons les composants de la sécurité des clés SSH.
Force de la Clé (Cryptographie) : Cela fait référence à l'algorithme (par exemple, RSA, ECDSA, Ed25519) et à la taille de la clé (par exemple, 2048, 4096 bits) utilisés pour générer la clé. Une taille de clé plus grande rend exponentiellement plus difficile pour un attaquant de casser la cryptographie sous-jacente par force brute. Cela protège contre les attaques visant à dériver la clé privée à partir de la clé publique.
Force de la Phrase Secrète (Chiffrement) : Cela protège le fichier de clé privée lui-même. Lorsque vous définissez une phrase secrète, le fichier de clé privée est chiffré. Si quelqu'un vole ce fichier, il ne peut pas l'utiliser sans le déchiffrer d'abord. Comme vous l'avez vu, une phrase secrète faible, courante ou basée sur un dictionnaire peut être facilement cassée. Une phrase secrète forte doit être longue, complexe et unique, rendant une attaque par dictionnaire ou par force brute infaisable sur le plan computationnel.
Permissions de Fichier (Contrôle d'Accès) : Les permissions de fichier de votre système d'exploitation constituent la première ligne de défense. Un fichier de clé privée doit toujours avoir des permissions qui restreignent l'accès au seul propriétaire (par exemple,
600ou-rw-------). Cela empêche les autres utilisateurs du même système de lire le fichier de clé.
Dans notre laboratoire, la force cryptographique de la clé était sans importance car le vecteur d'attaque n'était pas la cryptographie elle-même, mais la phrase secrète faible utilisée pour chiffrer le fichier.
Bonnes Pratiques pour la Gestion des Clés SSH
Comprendre les risques est la première étape. L'application des bonnes pratiques est la manière de les atténuer. Voici des règles essentielles pour gérer vos clés SSH en toute sécurité dans un environnement réel.
Utilisez des Phrases Secrètes Fortes et Uniques :
- N'utilisez jamais de mots courants, de noms ou de motifs simples.
- Une phrase secrète forte doit être longue (15+ caractères) et contenir un mélange de lettres majuscules, de lettres minuscules, de chiffres et de symboles.
- Envisagez d'utiliser un gestionnaire de mots de passe pour générer et stocker des phrases secrètes très complexes.
Utilisez des Algorithmes Modernes et des Tailles de Clé Adéquates :
- Préférez les algorithmes modernes comme Ed25519 ou ECDSA à l'ancien RSA. Ils offrent une meilleure sécurité et performance.
- Si vous utilisez RSA, assurez-vous d'une taille de clé d'au moins 2048 bits, 4096 bits étant recommandé pour une sécurité à long terme.
Sécurisez les Fichiers de Clé Privée :
- Assurez-vous toujours que vos fichiers de clé privée (par exemple,
~/.ssh/id_rsa) ont des permissions de fichier strictes. Utilisezchmod 600pour autoriser uniquement l'accès en lecture/écriture à votre utilisateur.
- Assurez-vous toujours que vos fichiers de clé privée (par exemple,
Utilisez un Agent SSH :
- Un agent SSH (
ssh-agent) est un programme d'arrière-plan qui met en cache vos clés privées déchiffrées en mémoire. Vous saisissez votre phrase secrète une seule fois lorsque vous ajoutez la clé à l'agent, et vous n'aurez plus à la taper pendant votre session. C'est à la fois pratique et sécurisé, car la phrase secrète n'est pas tapée à plusieurs reprises ni stockée sur le disque.
- Un agent SSH (
Faites Pivoter Régulièrement les Clés :
- Générez périodiquement de nouvelles paires de clés SSH et désactivez les anciennes. Cela limite la fenêtre d'opportunité pour un attaquant si une ancienne clé est compromise.
Ne Partagez Jamais les Clés Privées :
- Une clé privée est privée. C'est votre identité unique. Ne l'envoyez jamais par e-mail, chat ou tout autre moyen. Si une autre personne a besoin d'accéder, elle doit générer sa propre paire de clés et vous fournir sa clé publique.
Résumé
Dans ce laboratoire, vous avez acquis une expérience pratique d'une tâche courante d'audit de sécurité. Vous avez réussi à :
- Générer une nouvelle paire de clés SSH protégée par une phrase secrète.
- Utiliser l'utilitaire
ssh2johnpour extraire un hash crackable du fichier de clé privée. - Effectuer une attaque par dictionnaire à l'aide de John the Ripper pour casser la phrase secrète faible.
- Apprendre les principes fondamentaux de la sécurité des clés SSH, y compris les rôles distincts de la force cryptographique et de la force de la phrase secrète.
- Examiner les meilleures pratiques essentielles pour une gestion sécurisée des clés SSH.
Cet exercice démontre que même des outils cryptographiques robustes peuvent être compromis par des pratiques humaines faibles. Protégez toujours vos clés SSH avec des phrases secrètes fortes et uniques pour garantir l'intégrité de votre identité numérique.


