web-dev-qa-db-fra.com

Port Knocking est-ce une bonne idée?

Normalement, pour un serveur, j'aime verrouiller SSH et d'autres services non publics pour qu'ils ne soient accessibles que par certaines adresses IP. Cependant, cela n'est pas toujours pratique si l'entreprise ne dispose pas d'adresses IP statiques ou si des développeurs externes ont besoin d'un accès.

J'ai entendu parler de Port Knocking il y a quelque temps et j'ai finalement eu la chance de l'examiner comme une solution au problème ci-dessus. À la suite de cela, j'ai beaucoup de questions, j'espère que les gens pourront m'aider.

  • Quelqu'un l'a-t-il déployé dans son entreprise/organisation et peut-il offrir des conseils?
  • Quel est le meilleur démon qui fonctionne sous Linux?
  • Quels sont les meilleurs clients pour Linux, Windows et OSX?
  • Quelle est la longueur recommandée pour la séquence de cliquetis et est-il préférable d'utiliser TCP, UDP ou les deux?
  • Quels sont les inconvénients et les problèmes associés à son utilisation?
  • Est-ce juste la sécurité par l'obscurité?
  • Existe-t-il des alternatives à l'approche du port à quai?
41
Mark Davidson

Bien que je ne l'ai pas encore déployé, je connais de nombreuses personnes qui l'ont déployé. Chacun d'eux a en conséquence noté une réduction significative de la quantité de bande passante consommée par des choses comme les attaques par force brute SSH.

Cependant, cela ne veut pas dire qu'il n'y a pas d'inconvénients. AFAIK, il n'y a pas d'implémentations de knocking de port basées sur le noyau disponibles, ce qui pour moi serait la vraie clé de l'adoption. Les démons de suppression de port reposent sur la lecture des entrées de fichier journal qui ont échoué (et filtrées/interdites) à partir d'un système de pare-feu. C'est très bien et dandy, mais que se passe-t-il si le système de fichiers est plein? Que se passe-t-il lorsque le démon est tué à cause d'un processus incontrôlable qui dévore le système RAM et échange? Que se passe-t-il si quelque chose d'autre dont l'une de ces deux choses dépend juste et cesse de fonctionner? Vous avez le plus vous vous retrouverez probablement avec un serveur auquel vous devrez accéder physiquement. Cela pourrait s'avérer plus coûteux que ce qui est raisonnable, surtout si vous êtes à plus de quelques dizaines de kilomètres du serveur et que vous n'avez personne à qui vous pouvez appeler. arriver vite.

Une chose que je peux dire, c'est que ce n'est pas "la sécurité par l'obscurité". Le détournement de port est une forme d'authentification et, comme tout système d'authentification, il peut être aussi simple ou complexe que souhaité. Quelque chose d'aussi simple que "frapper sur le port 10 000 + realPortNumber" peut être fait, ce qui équivaudrait à une interruption triviale, ou le détournement de port pourrait lui-même être utilisé pour transmettre une certaine forme d'authentification réelle (disons, 1 bloc de données codées AES donné un clé dérivée par une autre méthode). Il ne serait pas possible d'utiliser le port knocking pour transmettre de grandes quantités de données, car cela prendrait beaucoup plus de temps que d'envoyer un seul paquet, et si le paquet est terminé TCP qu'au moins on peut savoir s'il a été reçu avec succès ou s'il a rencontré une forme d'erreur.

Une question intéressante que cela soulève, cependant, est de savoir comment gérer les fichiers journaux --- les implémentations de l'espace utilisateur nécessitent principalement les fichiers journaux afin de déterminer si un coup a été envoyé avec succès, et que se passe-t-il si ces journaux sont divulgués? Les données d'authentification deviennent connues, et ce n'est évidemment pas une très bonne chose.

Je ne peux pas vous dire si vous souhaitez utiliser ou non le port knocking dans votre configuration. Je ne le suis pas encore et je ne suis pas sûr à 100% que je le serai jamais. Il est plus logique pour moi d'utiliser des systèmes d'authentification forts basés sur une cryptographie forte (comme une infrastructure PKI) que de jeter un coup de port sur le chemin. En outre, l'ajout d'un seul point de défaillance pour accéder à l'infrastructure critique, pour moi en tout cas, semble être une mauvaise idée, et beaucoup plus difficile à prendre en charge correctement avec toute sorte de garantie. Encore une fois, cependant, cela est basé sur la notion que le logiciel de suppression de port n'est pas intégré au pare-feu au niveau du noyau du système d'exploitation; si jamais cela change, je peux aussi changer ce que je ressens à propos de son utilisation.

34
Michael Trausch

Le portage n'est pas simplement un autre mot de passe en texte brut - du moins lorsqu'il est utilisé pour protéger les services qui écoutent sur un port TCP comme SSH. Le port knocking implique que la découverte de service avec nmap n'est plus possible en raison de la utilisation d'une politique de pare-feu par défaut. SSHD a également des vulnérabilités exploitables à distance, et celles-ci n'ont rien à voir avec des mots de passe faibles. Je ne veux pas que quiconque puisse lancer nmap et voir que j'écoute SSHD.

En outre, il existe une variante plus puissante du knocking de port appelée "Single Packet Authorization", mais il s'agit également d'un schéma d'authentification complètement passif, il conserve donc les avantages du knocking de port mais résout ses limites (les attaques par rejeu sont faciles, les attaques DoS sont faciles, etc.) .).

13
Michael Rash

Il est facile de vérifier que tous les services accessibles sur Internet présentent des vulnérabilités de sécurité relativement souvent - des services tels que SSH, OpenSSL, etc. Les attaques sur ces derniers sont essayées en masse sur Internet, ciblant tous les systèmes qui ont des ports ouverts appropriés.

Le détournement de port, dans mon esprit, a pour but d'éloigner ces attaquants aléatoires d'Internet, qui recherchent des vulnérabilités génériques. Autrement dit, il n'est pas censé éloigner un attaquant dédié, ni faire partie de la sécurité réelle des services. L'avantage du portage devrait être qu'il serait vraiment assez simple pour qu'il ne soit jamais probable qu'il contienne des bogues exploitables.

Cette utilisation signifie que le détournement de port peut être aussi laxiste que possible, tant qu'il éloigne la majorité des attaquants. Il peut être juste une sécurité par obscurité, mais un meilleur moyen est de l'avoir comme une forme faible d'authentification par "mot de passe".

Ainsi, le "meilleur" service de suppression de port serait un service contre lequel il est inconcevable d'imaginer des attaques, tout en étant assez trivial pour qu'un utilisateur légitime puisse l'utiliser à partir de n'importe quel type de machine client.

9
Nakedible

Le détournement de port n'est pas une sécurité par l'obscurité. C'est une défense en profondeur. C'est comme garer votre voiture à côté d'une voiture plus volable - cela ne fera pas grand-chose pour empêcher une attaque ciblée, mais cela pourrait simplement envoyer des opportunistes regardant dans l'autre direction.

8
jl6

Selon mes commentaires ailleurs, bien qu'il existe de nombreuses implémentations qui utilisent toutes sortes de trucs spéciaux pour répondre au coup, il peut être implémenté en utilisant uniquement iptables sur un système Linux. c'est-à-dire qu'il s'agit effectivement d'une implémentation de knocking de port basée sur le noyau

Étant donné que le coup est visible sur le réseau, l'utilisation de séquences de plus de 3 coups donne peu d'avantages. Je recommanderais d'utiliser TCP - bien que ce sera plus lent, vous avez de meilleures garanties que le coup a été livré.

Cependant, bien qu'il repose sur des programmes de l'espace utilisateur, ma préférence est pour fail2ban car il ne nécessite aucune étape/logiciel supplémentaire pour se connecter, fonctionne de manière fiable, et s'il échouait jamais, cela ne m'empêcherait pas d'accéder aux serveurs .

Cela m'étonne qu'il y ait si peu d'adoption de l'identifiant crypté - bien que la RFC1413 mentionne simplement cette approche possible en utilisant le protocole plutôt que de définir comment il devrait fonctionner.

Mais bien sûr, vous devez vous assurer que vous avez limité l'accès autant que possible indépendamment de cela (c'est-à-dire pas de connexion root, restreindre l'accès au groupe nommé, si cela est nécessaire, exiger des paires de clés). SSH est conçu pour être sécurisé - et historiquement, il y a eu relativement peu de vulnérabilités dans les implémentations du flux principal. La raison pour laquelle les attaques réussissent est généralement due à une combinaison de noms d'utilisateur devinables, de mots de passe simples et d'attaques par force brute ou d'ingénierie sociale. Notez que je ne vous conseille pas d'appliquer une validation de phrase secrète complexe (autre que la longueur minimale) ni que vous obligez les utilisateurs à continuer de changer leurs mots de passe, il existe de meilleures approches (par exemple à deux facteurs), mais malheureusement très peu d'implémentations.

7
symcbean

Je n'ai pas mis en œuvre le détournement de port depuis un certain nombre d'années, cependant, je soupçonne qu'il n'a pas changé de manière significative en principe. D'autres commentaires contiennent de nombreux points valables et je ne les répéterai pas simplement ici.

Un aspect du knocking de port que j'ai toujours implémenté est bien sûr de baser la séquence de knock sur une valeur pseudo-aléatoire mais répétable, comme la date et l'heure actuelles. Cette stratégie n'élimine pas en gros le danger d'une attaque de rejeu, cependant, elle limite l'exposition d'une séquence de frappes donnée. Évidemment, pour que cela réussisse un temps synchronisé, dans mon exemple, la source serait nécessaire pour la cohérence.

4
Tok

Port Knocking est juste un autre mot de passe en texte brut. Il peut être forcé par la force, découvert, capturé et rejoué comme tout autre mot de passe en texte brut. Pourquoi réinventer les connexions Telnet?

Vous devez faire confiance à quelque chose. Supposons donc que vous faites confiance à votre pile de mise en réseau du système d'exploitation et que vous faites confiance à sshd lors de l'exécution avec une compression retardée, une séparation des privilèges et n'autorise qu'une forme raisonnable d'authentification à deux facteurs (par exemple, basée sur des clés).

Vous pouvez utiliser des services "simples" comme sshd qui invoque authpf pour protéger vos services plus complexes et vulnérables.

authpf vous permet de modifier vos ensembles de règles de pare-feu en fonction de qui s'authentifie correctement contre sshd, de sorte que seules les adresses IP qui parviennent à se connecter à vos passerelles ssh sont autorisées à se connecter à votre batterie de compilation/calcul/base de données.

2
Alex Holst