# Port knocking

Le tocage à la porte, ou port-knocking, est une méthode permettant de modifier le comportement d'un pare-feu (firewall) en temps réel en provoquant l'ouverture de ports permettant la communication, grâce au lancement préalable d'une suite de connexions sur des ports distincts dans le bon ordre, à l'instar d'un code frappé à une porte.
Cette technique est notamment utilisée pour protéger l'accès au port 22 dédié au Secure shell (SSH), elle ne nécessite pas beaucoup de ressources et reste facile à mettre en œuvre. En 2008, cette technique n'est pas encore largement adoptée par la communauté informatique, mais elle a déjà été intégrée dans certains rootkits.

## Fonctionnement théorique

Un processus s'exécute en arrière-plan (daemon) et scrute le journal des connexions du pare-feu, dans lequel une analyse des paquets passant par un port déjà ouvert permet de détecter une séquence particulière. Le serveur garde une liste des ports sur lesquels ont été tentées des connexions en fonction de l'adresse IP de l'émetteur. À chaque tentative de connexion, le port est ajouté à la liste des ports pour cette adresse IP. Si la liste contient une séquence reconnue, les règles du pare-feu seront modifiées pour ouvrir un port défini à l'avance, et d'autres commandes peuvent être exécutées de cette manière. La complexité de la séquence peut varier de la simple liste (par exemple : TCP port 1000, TCP port 2000, UDP port 3000) à une vérification de la durée et à des données chiffrées.
La seule indication d'échec est de ne pas avoir de port nouvellement ouvert à la fin de la séquence. À aucun moment des informations sont envoyées au lanceur de séquence ; le système reste muet.
Lorsqu'un port a été ouvert par la séquence correcte, les règles du pare-feu n'autorisent que l'adresse IP ayant lancé la séquence à communiquer sur le port ouvert. Le port peut de nouveau être fermé après un délai prévu ou à la demande.

## Des avantages reconnus

Une simple séquence de trois tentatives de connexion (par exemple : port 1000, 2000, 3000) requiert, pour un attaquant ne connaissant pas la séquence, d'utiliser la méthode force brute pour être découverte. Il lui faudra tester chaque combinaison avec 65535 ports à scanner, et vérifier à chaque scan si un port s'est ouvert ; cela donne approximativement 18 445 618 199 572 250 000 paquets de données possibles à envoyer, soit 65535$^4$ paquets (65535³ pour la séquence de trois ports, multiplié par 65535 tentatives à chaque fois pour découvrir un éventuel port).
Mais tout cela n'est plus valable dans le cas où un sniffer est employé ; une écoute efficace des séquences rend alors possible l'accès sans autorisation. C'est pourquoi une séquence autrement complexe rendrait la tâche plus difficile.

## Un atout sécuritaire

La technique du port-knocking procure un atout sécuritaire supplémentaire, mais ne remplace pas les autres mesures de sécurité. Bien que n'apportant pas de faiblesse dans la chaîne de la sécurité, l'utilisation d'un logiciel supplémentaire induit un possible nouveau problème de sécurité. Cela dit, la plupart des programmes de port-knocking se basent sur l'analyse des fichiers journaux produit par le pare-feu et n'ont donc pas d'interaction avec le réseau. l'apport de faiblesse est donc réellement limité.