Le PortKnocking
Fonctionnement
Détecter les "frappes"
PortKnocking fonctionne actuellement en suivant constamment les fichiers de log du firewall afin d'en extraire les tentatives de connexions sur les ports concernés.
Si une séquence est reconnue, alors les commandes correspondantes seront exécutées, notamment des modifications "à chaud" des règles du firewall, mais aussi le lancement ou l'arrêt d'un service ou l'éxecution d'une commande quelconque.
En interne, le serveur garde une liste des ports sur lesquels ont été tentés des connexions en fonction de l'adresse IP de l'émetteur. A chaque tentative de connexion sur un port surveillé par Port Knocking, le port est ajouté à la liste des ports pour cette adresse IP. Si la nouvelle liste contiens une séquence, les commandes de la séquence sont exécutées.
Etablire une connexion
Pour ce faire, l'utilisateur doit venir "frapper" aux ports du serveur de manière prédéfinie. S'il ne s'est pas trompé dans la manière de frapper, le serveur lui ouvre le port demandé. La "frappe" se fait sous forme de tentatives de connexion infructueuses à certains ports du système et dans un certains ordre. Ces tentatives de connexions se nomment une séquence.PortKnocking est une forme d'authentification réseau dans le sens ou il faut impérativement connaître la bonne séquence pour interagir avec le serveur.
Configuration
Le serveur est chargé de réagir aux séquences reçues. Ses réactions sont définies dans son fichier de configuration. Les réponses se trouvent entre les balises <actions>, qui comprennent 2 types de sous balises :
- <action> défini les conditions nécessaires à l'exécution des commandes concernées, le délais avant de les exécuter et le nom des actions a effectuer.
- <template> défini les commandes shell à exécuter et les associent à des nom utilisables dans les balises <action>.
Pour plus de sécurité, il est possible de crypter les séquences. Le résultat est que l'information utile n'est plus directement discernable dans la séquence.
Les séquences peuvent contenir des informations additionnelles telles que l'adresse IP concernée par l'action, celle de l'emmeteur, un numéro de port, un temps, la date, l'heure, etc.
Ceci permet d'avoir véritablement la possibilité de définir des tâches sur le serveur et de pouvoir les lancer à tout moment sans pour autant être obligé de se connecter à la machine de manière classique.
Un générateur de séquence est disponible sur le site de PortKnocking.
Un exemple en images
Etape 1 : (A) Le client ne peut pas se connecter à l'application qui écoute sur le port n; (B) le client ne peut établire de connexion sur quelque port que ce soit. | Etape 2 : (1,2,3,4) Le client se connecte (eg. envoie des paquets SYN) à un ensemble de ports pré-définis dans une séquence qui représente un message crypté; Le client doit connaitre au préalable l'éxistance du démon PortKnocking et de sa configuration, mais il ne recoit aucun retour d'information durant cette phase car les rêgles de filtrage du pare-feu l'en empêche. |
Etape 3 : (A) Le processus système intercepte les tentatives de connexion et les interprète (il les décrypte et les décode) et détermine que ce comportement correspond à sa configuration ; Le serveur éxecute alors une tâche spécifique grâce au contenu du message, telle qu'ouvrir le port n pour ce client. | Etape 4 : (A) Le client se connecte au port n et communique avec l'application sous-jaccente par son mécanisme habituel. |