Aller au contenu principal

TP 4 – Réalisation pratique : Le protocole SSH

Éléments de correction

Des éléments de correction pour ce TP sont disponibles dans le dépôt d'exercices : 👉 module-16 – Corrections

Module Bonus : Comprendre les cartes réseau VirtualBox et VMware

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​

MachineSystème d'exploitationRAMDisqueCPURéseau
SSH-SRVUbuntu Server 24.04 LTS (ou 22.04 LTS)1 Go minimum20 Go1 vCPURéseau interne (intnet)
SSH-CLIUbuntu Server 24.04 LTS (ou 22.04 LTS)1 Go minimum20 Go1 vCPURéseau interne (intnet)
Configuration réseau dans VirtualBox

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-server et openssh-client
  • netcat-openbsd (ou ncat)
  • 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.

MachineRôleAdresse IPMasque
SSH-SRVServeur Netcat / SSH10.11.12.1/24
SSH-CLIClient Netcat / SSH10.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 ?

À retenir

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
Indice

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èreNetcat seul (Partie 1)Netcat + tunnel SSH (Partie 2)
ChiffrementAucunOui (SSH)
Port visible sur le réseau6432122 (SSH uniquement)
Contenu visible dans WiresharkOui (en clair)Non (chiffré)
AuthentificationAucunePar mot de passe ou clé
SécuritéFaibleForte

TP créé le : Février 2025