TP 4 – Réalisation pratique : Le protocole SSH
Des éléments de correction pour ce TP sont disponibles dans le dépôt d'exercices : 👉 module-16 – Corrections
Pour une explication détaillée des types de cartes réseau (NAT, Internal Network, Host-Only, Bridged) et leur équivalent VMware, consultez : 👉 Module 15 - Bonus : Cartes réseau VirtualBox vs VMware
Objectif
Ce TP vise à mieux comprendre l'utilisation de Netcat et SSH dans un environnement réseau, en mettant en avant leurs différences en termes de sécurité et de fonctionnalités.
Directives
- Répondez aux questions tout en fournissant des captures d'écran pertinentes avec des commentaires de chaque étape de configuration demandée ainsi que des résultats obtenus.
- Gardez vos machines virtuelles même après avoir remis ce travail.
Environnement requis
Hyperviseur
- VirtualBox (ou VMware Workstation / VMware Player)
Machines virtuelles à créer
| Machine | Système d'exploitation | RAM | Disque | CPU | Réseau |
|---|---|---|---|---|---|
| SSH-SRV | Ubuntu Server 24.04 LTS (ou 22.04 LTS) | 1 Go minimum | 20 Go | 1 vCPU | Réseau interne (intnet) |
| SSH-CLI | Ubuntu Server 24.04 LTS (ou 22.04 LTS) | 1 Go minimum | 20 Go | 1 vCPU | Réseau interne (intnet) |
Les deux machines doivent être connectées sur le même réseau interne (mode « Internal Network » dans VirtualBox, nommé par exemple intnet).
Aucune des deux machines n'a besoin d'accès Internet pour ce TP.
Logiciels requis sur les VMs
openssh-serveretopenssh-clientnetcat-openbsd(ouncat)tcpdump- Wireshark (sur la machine hôte ou sur une VM avec interface graphique pour analyser les captures
.pcap)
Topologie réseau
Mise en place de l'environnement
Question 1 – Création des machines virtuelles
Créez deux machines virtuelles : SSH-SRV et SSH-CLI et configurez-les selon la topologie ci-dessus.
| Machine | Rôle | Adresse IP | Masque |
|---|---|---|---|
| SSH-SRV | Serveur Netcat / SSH | 10.11.12.1 | /24 |
| SSH-CLI | Client Netcat / SSH | 10.11.12.2 | /24 |
Question 2 – Installation du service SSH
Installez sur le serveur Linux SSH-SRV le service SSH (openssh-server).
sudo apt install -y openssh-server # Ubuntu/Debian
# ou
sudo dnf install -y openssh-server # AlmaLinux/RHEL
Question 3 – Description de Netcat
Décrivez brièvement l'outil Netcat.
Question 4 – Installation de Netcat
Installez sur les serveurs Linux SSH-SRV et le client Linux SSH-CLI l'outil Netcat.
# AlmaLinux / RHEL
sudo dnf install -y nmap-ncat
# Ubuntu / Debian
sudo apt install -y netcat
Première partie – Transfert avec Netcat (non chiffré)
Question 5 – Capture du trafic réseau
À l'aide de la commande tcpdump, capturez le trafic réseau sur l'interface 10.11.12.1 en utilisant la commande :
tcpdump -i <interface> -w capture1.pcap
Où <interface> est l'interface de communication entre SSH-SRV et SSH-CLI.
Question 6 – Ouverture de la communication Netcat
Créez un répertoire appelé rep sur SSH-SRV puis ouvrez une communication via Netcat et exécutez la commande :
mkdir -p rep
cd rep
nc -l -p 64321 > tonfichier.txt
Question 7 – Envoi du fichier depuis le client
La commande ci-dessus permettra au serveur SSH-SRV d'attendre que le client ouvre une connexion vers le serveur écoutant sur le port 64321. Le fichier à envoyer par le client au serveur portera le nom monfichier.txt et sera copié sous le nom tonfichier.txt sur le serveur une fois que le transfert sera effectué.
Vous devez, au préalable, créer sur SSH-CLI le fichier monfichier.txt avec un contenu (par exemple : « Ceci est un contenu secret »).
La commande à exécuter au niveau de la machine cliente SSH-CLI est :
nc 10.11.12.1 64321 < monfichier.txt
Question 8 – Arrêt de la capture
Arrêtez la capture de paquets (Ctrl+C sur le terminal tcpdump).
Question 9 – Vérification du fichier
Sur SSH-SRV, vérifiez que le contenu du fichier tonfichier.txt est identique à celui de monfichier.txt du client.
cat tonfichier.txt
Question 10 – Analyse avec Wireshark
Ouvrez le fichier capture1.pcap à l'aide de Wireshark (vous pouvez l'installer au préalable sur SSH-SRV, sinon vous pouvez transférer la capture de la VM vers votre PC).
# Installation de Wireshark (si nécessaire)
sudo apt install -y wireshark # Ubuntu/Debian
Question 11 – Identification du 3-way handshake
En analysant le trafic capturé, identifiez les segments assurant la connexion entre le client et le serveur :
Pour cela, utilisez le filtre Wireshark :
tcp.flags.syn == 1 || tcp.flags.ack == 1
Donnez les numéros des paquets correspondants.
Question 12 – Port TCP du client Netcat
Quel port TCP est utilisé par le client Netcat ?
Question 13 – Numéro de paquet du transfert
Identifiez le numéro de paquet permettant le transfert de fichier monfichier.txt du client.
Question 14 – Capture du contenu transféré
Faites une capture d'écran (sur Wireshark) du contenu du fichier transféré.
Question 15 – Déduction
Que peut-on déduire ?
Avec Netcat, les données transitent en clair sur le réseau. N'importe qui capturant le trafic peut lire le contenu du fichier transféré. C'est là que SSH entre en jeu pour chiffrer les communications.
Deuxième partie – Transfert via tunnel SSH (chiffré)
Question 1 – Authentification par mot de passe
Configurez l'authentification du client SSH par mot de passe.
Question 2 – Vérification de l'authenticité du serveur
Vérifiez l'authenticité du serveur SSH SSH-SRV. Pour cela, vous devez calculer le hachage de la clé publique du serveur et le comparer avec celui proposé avant de décider de se connecter à celui-ci.
# Sur SSH-SRV : afficher l'empreinte de la clé publique
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Question 3 – Authentification par clé
Configurez l'authentification du client SSH par clé.
# Sur SSH-CLI : générer la paire de clés
ssh-keygen -t ed25519
# Copier la clé publique vers le serveur
ssh-copy-id root@10.11.12.1
Question 4 – Capture du trafic réseau (tunnel SSH)
À l'aide de la commande tcpdump, capturez le trafic réseau sur l'interface 10.11.12.1 en utilisant la commande :
tcpdump -i <interface> -w capture2.pcap
Question 5 – Ouverture de la communication Netcat sur le serveur
Sur le répertoire rep sur SSH-SRV, ouvrez une communication via Netcat et exécutez la commande :
cd rep
nc -l -p 64321 > tonfichier2.txt
Question 6 – Configuration du tunnel SSH
Configurez le tunnel SSH pour le serveur créé précédemment par Netcat et le client. Nous allons supposer que le client choisisse de se connecter sur le port local 10111/TCP.
Exécutez (sur le client) la commande suivante :
ssh -L 10111:10.11.12.1:64321 root@10.11.12.1
Explication du tunnel :
Question 7 – Envoi du fichier via le tunnel
Sur un autre terminal du client, exécutez la commande :
nc localhost 10111 < monfichier.txt
Question 8 – Arrêt de la capture
Arrêtez la capture tcpdump des paquets.
Question 9 – Vérification du fichier
Sur SSH-SRV, vérifiez que le contenu du fichier tonfichier2.txt est identique à celui de monfichier.txt du client.
Question 10 – Analyse avec Wireshark
Ouvrez le fichier capture2.pcap à l'aide de Wireshark.
Question 11 – Port aléatoire du tunnel
Quel est le numéro de port aléatoire TCP qui a été utilisé par le client SSH pour le tunneling de Netcat ?
Question 12 – Filtre Wireshark sans résultat
Pourquoi le filtre Wireshark suivant ne ramène aucun résultat :
tcp.port == 64321 || tcp.port == 10111
Réfléchissez à ce que le tunnel SSH fait aux ports et au trafic. Les ports 64321 et 10111 sont-ils visibles sur le réseau entre les deux machines ?
Question 13 – Identification du transfert chiffré
Pouvez-vous identifier le numéro de paquet ayant servi au transfert de fichier monfichier.txt ? Si oui, pouvez-vous capturer le contenu du fichier transféré ?
Comparaison : Netcat vs tunnel SSH
| Critère | Netcat seul (Partie 1) | Netcat + tunnel SSH (Partie 2) |
|---|---|---|
| Chiffrement | Aucun | Oui (SSH) |
| Port visible sur le réseau | 64321 | 22 (SSH uniquement) |
| Contenu visible dans Wireshark | Oui (en clair) | Non (chiffré) |
| Authentification | Aucune | Par mot de passe ou clé |
| Sécurité | Faible | Forte |
TP créé le : Février 2025