Le matériel nécessaire à la réalisation de ce travail est disponible à l’url suivante : http://infoweb-ens/~hernandez-n.
L'objectif de ce travail est d'apprendre à manupuler des tunnels sécurisés.
La commande netcat (nc) est présentée comme le couteau suisse de la gestion des connexions TCP/IP.
Netcat est un outil très facile d'utilisation qui peut lire et écrire sur des connexions réseaux (socket) utilisant les protocoles TCP ou UDP.
Il permet ainsi de faire du debugging de réseau, de l'exploration (port scanning). Il peut agir en tant que client ou en tant que serveur, servir à du transfert de données (input standard ou fichier), exécuter des scripts lors de connexions, voire même servir de relais (proxy) entre pour un serveur.
Netcat peut aussi être utilisé pour diverses autres pratiques : banner-grabbing, Tar, Shell Shoveling UDP, port scanning UDP, Spoofing, Cryptcat... Nous ne les verrons pas ici.
Il vous est demandé de rédiger un rapport succin correspondant à vos réponses aux questions. Relevez et expliquez les manipulations que vous réalisez si besoin est.
Pour réaliser ce travail, les réponses sont à chercher dans le support de cours, les man(uels) des commandes utilisées et éventuellement sur l'Internet (en priorité les sites de la section bibliographie ci-dessous). N'hésitez pas à utilisez les commandes que vous connaissez déjà pour auditer le bon fonctionnement des outils que vous utilisez (netstat pour les ports locaux ouvert en lecture, nmap les ports distants ouverts, wireshark pour voir qui communique et le contenu ce qui est communiqué ...).
Pour ce travail, vous utiliserez le réseau accessible via votre interface eth1. Configurez cette interface. Chaque machine reçoit une adresse IP privée de classe C de type : 192.168.0.<votreIdentifiantSurLaPriseAuDosDeVotreMachine>. Fermer eth2 pour contrôler votre réseau (ifconfig eth2 down).
Tout le monde est tenu de changer le mot de passe de son compte root et de créer (adduser) un compte avec comme nom de login et mot de passe : distant/distant.
Parfois on souhaiterait pouvoir relier
directement deux machines appartenant à deux réseaux distincts.
C'est par exemple mon cas quand j'ai besoin d'accéder à ma machine
du boulot (machine "BOULOT"
sur le réseau "à
l'entreprise") depuis ma
machine personnelle (machine "MAISON"
sur le réseau "à
la maison"). Dans ce genre de
cas, il existe en général une machine sur le réseau "à
l'entreprise" qui possède à la fois une interface vers le
réseau extérieure et une interface susceptibles d'accéder à
chacune des machines du réseau interne de l'entreprise. Nous
appellerons cette machine RELAIS
,
car elle servira de relai au tunnel.
Postulat :
MAISON
possède un client SSH capable de créer un tunnel (ssh
,
par exemple)
RELAIS
possède un serveur SSH qui tourne et qui est accessible de
l'extérieur ; notamment par MAISON
; vous possédez un compte utilisateur sur cette machine.
BOULOT a des services qui sont
accessibles
aux seules machines
internes dont notamment RELAIS
; vous possédez un compte sur le service souhaité qui tourne sur
cette machine.
Bien, allons y franchement, la commande, à
executer depuis MAISON
,
permettant de créer un tunnel SSH entre MAISON
et BOULOT
est la suivante :
ssh <login_sur_RELAIS>@<RELAIS_IP> -L <MAISON_port>:<BOULOT_IP>:<BOULOT_port>
L'option -L indique que le données arrivant sur le port <MAISON port> de la machine locale doivent être envoyées sur le port <BOULOT port> de la machine <BOULOT IP> en sortie d'une connexion SSH sur la machine <RELAIS IP>.
En anglais, on utiliser le terme bind/binder pour désigner le fait de "lier" un port d'une machine à un port d'une autre machine.
Pour le reste de l'exercice vous travaillerez en trinôme, chacun pouvant jouer les rôles de MAISON, RELAIS et BOULOT à la fois.
Vous êtes MAISON. Demandez à BOULOT de lancer un
serveur apache et de mettre un fichier msg.txt dans /var/www.
Puis créer un tunnel passant par RELAIS pour atteindre BOULOT qui commence sur le port 7777 de votre MAISON. Ensuite, de MAISON, simuler un client web avec netcat pour récupérer le contenu de msg.txt en passant par votre tunnel. Est ce que cela marche ? Pourquoi si vous lancer le client dans le même terminal qui a permis l'établissement du tunnel ca ne marche pas ?
L'option – f,
qui force ssh
à s'exécuter en tâche de fond, peut elle vous aider à ne pas
faire cette erreur ? L'option
-N,
qui
permet
de pas donner de prompt après la connexion à SSH, peut elle vous
aider à ne pas faire cette erreur ?
A partir d'un compte utilisateur arrivez vous à forwarder un port privilégié de 1 à 1024 ?
L'option -g permet d'autoriser les connexion d'autres machines, différentes de celle qui établie la connexion, à utiliser le canal sécurisé.
Arrivez vous à sniffer le contenu de la communication ? La partie MAISON-RELAIS devrait être protégé mais pas la partie RELAIS-BOULOT. Remarquez que RELAIS et BOULOT pourraient être la même machine. Et dans ce cas votre communication serait sécurisée. Faire tourner un serveur apache avec un msg.txt dans /var/www sur relais. Quelle commande tappez vous pour mettre en place un tunnel de MAISON à RELAIS sans rebond ?
Mettre en place un tunnel avec ou sans rebond en sortie vers une machine BOULOT. Demandez à un de vos collègues d'essayer d'utiliser votre tunnel à partir de sa machine. Nous appelerons cette machine COLLEGUE. Y arrivez vous ? L'option -g ajoutée à la commande ssh lors du création du tunnel apporte t elle quelque chose ?
L'option
-2
force ssh à utiliser la version 2 du protocole (A ne pas utiliser
si on utilise de vieux serveurs SSH )
Les commandes suivantes vous permettent d'auditer l'état des services ouverts, des ports en écoute, et des connexions en cours sur votre machine. Utilisez les afin de mieux comprendre les mécanismes du tunneling.
netstat -taupe # permet de connaître les services qui tournent sur votre machine, les programmes clients qui attaquent des services distants ainsi que les noms des programmes exécutés, les IP/port source et cible. Pour les services connus sur les ports réservés (cad déclarés dans /etc/services) le nom du service est donné plutôt que son port.
nmap -A -T4 -p1-65535 IP # vous informe les services qui tournent sur une machine désignée par son IP
La commande last montre la liste des dernières connexions sur la machine (elle fonctionne à partir du journal /var/log/wtmp). Si jamais l'un de vous s'amuse à arrêter volontairement la machine d'un autre, non seulement il serait identifié mais en plus il aurait 1 point en moins au DS.
De même n'hésitez pas à abuser des commandes who et ifconfig
wireshark permet de voir des contenus