Nicolas SURRIBAS

Développement / Réseau / Sécurité Informatique

Bypass de firewall sur le port source

Rédigé par devloop - -

Un firewall n'est rien de plus qu'un ensemble de règles qui détermine ce qui passe sur un réseau et ce qui ne passe pas.
Si les règles sont mal écrites, ou si le logiciel firewall est buggé ou peu évolué, il peut être possible de passer à travers ces règles pour accèder à des services normalement filtrés.

Fixer un port source pour ses connexions est l'un des méthodes utilisées pour passer un firewall. Les pare-feux vérifient principalement les adresses IP ainsi que les ports source et destination de chaque paquet qui passe, ce qui permet d'écrire des règles assez facilement
On distingue ensuite deux catégories de firewall : les stateless et les statefull.
Les firewalls "statefull" mémorisent l'état des connexions (demande de connexion, connexion établie...), ce que les "stateless" ne font pas.

Mais certaines applications ou certains protocoles comme FTP sont de vrais casse-têtes pour le filtrage des paquets.
Le protocole FTP indique en effet que le serveur renvoit les données depuis son port 20 vers un port du client. Par conséquent si un administrateur veut permettre aux personnes sur son réseau d'utiliser des clients FTP il va probablement autoriser tout paquet dont le port source est 20.

Un attaquant pourra alors découvrir des services normalement cachés en effectuant un scan de port avec des paquets dont le port source est 20. L'option -g de Nmap permet de faire ça très facilement.

Une fois que l'intrus aura trouvé un service accessible, il va devoir faire en sorte que ses connexions viennent du port source lui ouvrant l'accès à la machine.
Pour cela j'ai relevé différentes solutions plus ou moins efficaces. Par la suite on considérera que l'attaquant possède l'adresse IP 192.168.0.2 et tente d'accèder au port 80 de la machine 192.168.0.3 en fixant son port source à 20.

Netcat 1.10
Netcat est le "couteau suisse TCP/IP". Ce serait trop long de décrire toutes les opérations que l'on peut faire avec mais vous trouverez différents documents sur le sujet sur Internet.
Notre visiteur l'utilisera de la façon suivante :
netcat -v -p 20 192.168.0.3 80

Cela va ouvrir une connexion à destination du port 80 de la machine filtrée et avec le port source 20.
Le premier souci c'est que netcat récupère ce qu'il doit envoyer sur l'entrée standard. Pour les protocoles utilisant des caractères ASCII ça va encore mais dans la majorité des cas il faut avoir recours à des redirections d'entrées/sorties.
On pourrait alors chainer deux netcat, l'un écoutant sur un port en renvoyant ce qu'il reçoit vers l'entrée du second netcat (avec la commande précédente).
Le second souci c'est que netcat ne fonctionne pas comme un serveur qui tournerait en fond pour réceptionner en continu les requêtes et convient mal à certains protocoles qui effectuent des connexions courtes et nombreuses (HTTP par exemple).
La version Windows de netcat a bien une option -L pour l'écoute continue mais on croise à nouveau le problème des redirections.

KevProxy
KevProxy comble avec succès les lacunes que l'on avait avec netcat.
Le programme a certes moins de fonctionnalités mais fait exactement ce dont on a besoin pour cet exercice. Il ouvre un port en local en créant un thread pour chaque connexion. Chaque connexion est renvoyée sur une ip et un port spécifié en prenant soin de modifier le port source.
Pour l'utiliser dans notre cas on utilisera la commande suivante :
kp 8080 192.168.0.3 80 20 v

Il n'y a plus qu'à lancer son navigateur sur localhost:8080 et on accèdera par notre tunnel au port 80 de la machine filtrée. Le "v" final est optionnel et ajoute de la verbosité.
Un excellent outil qui mérite à être connu.

Fpipe 2.1
Fpipe est le célèbre outil de redirection de port de Foundstone et fonctionne sous Windows. Il fait tout ce que KevProxy peut faire et offre quelques options supplémentaires.
La commande à lancer sera :
fpipe -v -l 8080 -s 20 -r 80 192.168.0.3

Le principe est exactement le même que pour KP.

Netfilter / iptables
Quoi de mieux qu'un firewall pour passer un autre firewall ?
Ici on va se servir des fonctionnalités de SNAT de Netfilter pour réécrire au vol le port source des paquets à destination du port 80 de la machine 192.168.0.3 :
iptables -t nat -A POSTROUTING -p TCP -m tcp -s 192.168.0.2 --dport 80 -j SNAT --to-source 192.168.0.2:20

Tout se fait de façon complétement transparente.

Des documents sur le même sujet :
Phrack : Breaking through a Firewall using a forged FTP command
Nmap : Évitement de pare-feux/IDS et mystification
Pyramid BenHur Firewall Active FTP Portfilter Ruleset Results in a Firewall Leak

Classé dans : Non classé - Mots clés : réseau

Les commentaires sont fermés.