Le PortKnocking
Présentation
Question de sécurité
Un système totalement sécurisé vis-à-vis du réseau est un système qui n'y est pas connecté. Mais ce système n'est pas utilisable. Il faut donc le connecter et lui appliquer plusieurs couches de sécurité afin de le rendre le moins vulnérable possible. PortKnocking propose une couche de sécurité supplémentaire. Un part -feu permet d'authentifier un hote sur le réseau. PortKnocking permet d'authentifier un utilisateur de ce réseau.
Une forme d'encodage
Globalement, PortKnocking décrit une communication au sein de laquelle les informations arrivent encodées sous forme de tentatives de connexion à des ports fermés. Cette séquence de ports forme un code, et déclanche un évenement sur le recepteur. Le récepteur ne retourne rien à l'émetteur durant cette transaction.
D'une certaine manière, le PortKnocking est une méthode de communication entre deux ordinateurs (ici appelés client et serveur) dans laquel l'information est codée (et probablement chiffré) dans une séquence de tentatives de connexion. Cette séquence se nomme knocks
. Au commencement, le serveur ne présente aucun port ouvert et surveille toutes les tentatives de connexion. Le client lance des tentatives de connexion vers le serveur en envoyant des paquets SYN
aux ports indiqués dans les knocks
. Ce processus de "frappement" est ce qui donne au PortKnocking son nom. Le serveur n'offre aucune réponse au client pendant cette phase, car il traite "silencieusement" la séquence. Quand le serveur décode un valide le knock
, il déclenche un processus définit.
La définition des knocks
valides est arbitraire, et défini par l'administrateur. Le processus déclanché sur le serveur est également arbitraire, et défini par l'administrateur. Le déclenchement peut avoir comme conséquence la modification dynamique des règles de filtrage ou d'autres commandes du système.
L'objectif initial
Au départ, PortKnocking était conçu pour permettre à un utilisateur donné d'établir des connexions réseau à une machine dont tout les ports sont fermés par le firewall. De cette manière, la machine ne paraissait pas exister sur le réseau.
Des possibilités étendues
Du moment que le serveur est capable d'interpréter convenablement une séquence, il est possible de faire transiter des informations supplémentaires. Ces informations peuvent être par exemple :
- Un checksum pour réduire les risques de mauvaise transition ;
- Un drapeau qui indique si les prochaines tentatives de communication à venir du client doivent être acceptées ou non ;
- Un drapeau qui indique si ce même client n'a pas le droit de revenir se connecter durant les N prochaines minutes ;
- Un drapeau qui indique si le serveur doit accepter ou non des connexions concurrentes depuis la même IP ;
- Un drapeau qui indique au serveur s'il doit lancer ou arrêter un service derrière un port donné ;
- Etc.
Il est donc possible d'éffectuer des opérations d'administration sur un serveur en utilisant PortKnocking.