Question:
Avantages de tuer des sessions après 5 minutes?
jpmc26
2016-04-28 01:01:23 UTC
view on stackexchange narkive permalink

J'ai affaire à un serveur qui n'est pas à moi à configurer. Quelque chose quelque part entre moi et ce serveur tue toute connexion après 5 minutes si aucun trafic ne passe entre les deux machines. Cela inclut les connexions actives où une commande est exécutée sur le serveur; plus précisément, j'ai démontré que cette déconnexion se produit à l'aide d'une connexion SSH (exécutant une commande bash qui n'imprime aucune sortie pendant plus de 5 minutes) et d'une base de données SQL (exécutant une commande SQL qui dure plus de 5 minutes). Il se déconnecte également si je vais lire quelque chose et n'envoie aucune commande pendant 5 minutes, bien sûr.

Pour le paramètre SSH, le groupe responsable du serveur a recommandé que j'active Keep Alive côté client. Ils n'ont fourni aucune suggestion pour les connexions à la base de données.

Je suis cependant complètement confus. Quel est l'avantage de sécurité ici? Pour SSH, je peux contourner complètement leurs paramètres du côté client, et ils recommandent de le faire. (Ce dernier signifie qu'il ne peut même pas y avoir d'argument de "sécurité par l'obscurité", car il ne sera pas obscur car chaque utilisateur devra le savoir. Je ne pense pas que cela déjouerait une attaque même si elle était obscure, d'autant plus que Je l'ai découvert par moi-même avant même qu'ils ne le recommandent.) Pour les deux, cela dégrade manifestement la disponibilité. Je pourrais potentiellement voir que la déconnexion des sessions actives après quelques heures d'inactivité pourrait être bénéfique (bien que les menaces possibles de longues sessions ouvertes ne soient pas immédiatement claires pour moi.), Mais toutes les 5 minutes ? Cela signifie que je ne peux même pas lire un message DBA.SE pendant que je travaille sur mon SQL sans être déconnecté. Est-ce aussi ridicule que cela me semble, ou y a-t-il quelque chose qui me manque?

Clarifications

Certains points ont été mentionnés dans les commentaires, alors je voudrais clarifier un peu.

  • Je suis capable de reproduire systématiquement le délai d'attente à 5 minutes. J'ai utilisé des commandes qui enregistrent un côté serveur d'horodatage toutes les quelques secondes, et après une déconnexion, le dernier horodatage enregistré était toujours exactement 5 minutes après le premier horodatage. Les déconnexions n'ont donc jamais été sporadiques.
  • Peu de temps après avoir écrit ce post, les administrateurs système / réseau ont répondu que c'était effectivement intentionnel. Je cite: "Plus de retombées par rapport au délai de 5 minutes fixé sur les F5 il y a quelques semaines?" Je ne sais pas ce qu'est un F5; certains googlages suggèrent que c'est un commutateur très coûteux, qui correspond à quelqu'un qui essayait de trouver une solution de contournement pour mes connexions de base de données mentionnant plus tard les paramètres du commutateur.

(je ne pense pas que cette information invalide toutes les réponses.)

Pourquoi pensez-vous que cela est fait intentionnellement?
@NickBastin En raison de la réponse des administrateurs système.Apparemment, il s'agit d'un changement récemment mis en œuvre, et je ne suis pas le premier à en parler.
Êtes-vous fatigué de définir les options de `ServerAliveInterval` [.ssh / config] (http://linux.die.net/man/5/ssh_config)?Cela induit des messages «ping» périodiques au niveau de la couche d'application passant par le canal chiffré, de sorte que le proxy ne devrait pas être en mesure de les distinguer des données réelles qui circulent encore, lentement,.Cela devrait contourner le problème.
J'ai également remarqué que `TCPKeepAlive` [option ssh] (http://linux.die.net/man/5/ssh_config) est activée par défaut.S'il n'est pas désactivé de votre côté, cela indique que la fin des connexions est en effet délibérée, car les pare-feu / masquerades ne mettront pas fin aux connexions qui envoient des keepalives TCP.Les proxies le feront, cependant, car TCP keepalive envoie des paquets vides qui ne sont pas visibles au niveau de la couche socket.
@JanHudec Je connais `ServerAliveInterval`, mais comme je l'ai dit, ce n'est pas mon serveur à gérer.Ce que vous mentionnez est bien sûr l'équivalent côté serveur des paramètres côté client que j'ai mentionnés.Cependant, la base de données ne passe pas par SSH, pour autant que je sache, ce qui indique que la suppression de connexion est plus générale que SSH.Je ne suis vraiment pas tout à fait clair sur * où * exactement ils appliquent cela, c'est pourquoi j'ai essayé de ne pas être trop spécifique dans la question et de me concentrer uniquement sur la terminaison de la connexion elle-même.
@jpmc26, non, `ServerAliveInterval` est une option _client_.`ServerAliveInterval` et` TCPKeepAlive` sont des options _très différentes_.De plus, si vous pouvez SSH sur le serveur et si vous pouvez empêcher SSH d'expirer, vous pouvez utiliser sa fonction de transfert pour tunneler la connexion à la base de données à travers elle pour la protéger.
@JanHudec:, l'intervalle de conservation par défaut est de 2 heures sur Linux et MSWindows.
Il pourrait être en place pour libérer des ressources s'il s'agit d'un serveur partagé ou d'un serveur avec beaucoup de trafic.
Sans rapport avec la question de sécurité réelle de savoir pourquoi un tel scénario a été créé: si le serveur a tmux ou screen, ces commandes peuvent prendre en charge la reprise d'une session détachée, ce qui peut être un moyen efficace de ne pas perdre de travail.
Cinq réponses:
Steve Sether
2016-04-28 02:21:15 UTC
view on stackexchange narkive permalink

Je suis cependant complètement confus. Quel est l'avantage de sécurité ici?

Rien. Le scénario le plus probable est que quelque chose entre les deux expire la connexion après 5 minutes pour économiser les ressources. Cela pourrait être un pare-feu, un accélérateur WAN, un accélérateur SSL, etc. Ou ce pourrait être juste un mauvais paramètre par défaut. Qui sait?

Les administrateurs réseau ont souvent des préoccupations différentes de celles des autres, qui peuvent souvent entrer en conflit avec les autres. Nous travaillons dans un monde en silo où l'image holistique n'est pas prise en compte.

Ne supposez pas qu'il y a une raison particulièrement bonne pour chaque paramètre, mais laissez de la place pour le potentiel que le délai de 5 minutes soit une solution rapide pour un autre problème qu'ils rencontrent, et votre problème d'application était un retour .

J'ai remarqué que SSH active par défaut TCP keepalive.Cela empêcherait le pare-feu ou la mascarade d'interrompre la connexion.Un proxy pourrait toujours, car il ne verrait pas les keepalives TCP.
Le "routeur" que j'ai obtenu de mon fournisseur d'accès Internet par câble a déconnecté toutes les connexions après 15 minutes.Suce si vous devez utiliser SSH.J'ai découvert que ce morceau de plastique bon marché ne pouvait pas vraiment gérer plus de ~ 5000 connexions ouvertes sans se bloquer, c'est probablement pourquoi ils l'ont implémenté.
IME, la cause la plus probable n'est pas la connexion expirée mais un pare-feu mal configuré avec une table d'état débordante.
@symcbean Également très possible.Mais vous vous attendez à ce que ce soit moins régulier que 5 minutes.
Rory McCune
2016-04-28 01:18:43 UTC
view on stackexchange narkive permalink

Cela ressemble à un bon exemple de "culte du fret" de sécurité. Un contrôle de sécurité a été implémenté à l'aveugle sans comprendre le contexte impliqué ni même l'implémenter correctement.

De manière générale en sécurité, le point d'un timeout d'inactivité permet de réduire le risque de situations où une machine client est laissée sans surveillance et un utilisateur malveillant accède à la machine et exécute des commandes non autorisées dessus. L'équilibre dans ces délais d'expiration a tendance à être celui de la convivialité (qui favorise plus ou pas de délai d'expiration) et de la sécurité (qui favorise des délais d'expiration plus courts).

Vous pouvez parfois repérer la culture du fret de sécurité avec exactement ce que vous avez mentionné, à savoir que les opérateurs du système vous aident en fait à contourner le contrôle nominal (dans votre cas en recommandant d'utiliser des keep-alives)

Le risque de machines clientes laissées sans surveillance doit être atténué en s'assurant que le verrouillage automatique de l'écran est configuré.Sous Windows, il peut être forcé via la stratégie de groupe.
C'est bien sûr une bonne idée de contrôler toutes les machines clientes et de leur appliquer une politique, même si encore une fois, j'ai vu des environnements dans lesquels les gens insistent pour appliquer cela au niveau de la couche application et de la couche du système d'exploitation.
Vous oubliez clairement l'avantage de cette approche: si vous vous connectez à un système, verrouillez votre écran local, prenez une tasse de café, vous reviendrez pour constater que votre session a expiré, afin que vous puissiez vous connecter à nouveau etqui vous oblige à retaper votre mot de passe qui construit la mémoire musculaire afin que les administrateurs puissent commencer à monter la barre pour inclure des mots de passe de 64 caractères avec 4 émoticônes
Steffen Ullrich
2016-04-28 01:25:39 UTC
view on stackexchange narkive permalink

Je suis cependant complètement confus. Quel est l'avantage de sécurité ici?

Ce n'est peut-être pas une question de sécurité mais pour une raison différente. Malheureusement, votre question n'offre que votre point de vue, nous ne pouvons donc que spéculer sur la vraie raison.

Une explication pourrait être qu'il existe un simple filtre de paquets avec état où les états expirent après 120 secondes d'inactivité. Cela signifie que toutes les données transférées après cette inactivité seront bloquées car il n'y a plus d'état ouvert. La raison en est peut-être un appareil qui n'a que des ressources très limitées et ne peut donc pas garder trop d'états ouverts en même temps, par exemple un pare-feu qui a été conçu avec 10 utilisateurs à l'esprit mais qui est maintenant utilisé par 100 utilisateurs.

Bien sûr, il se peut aussi que un BOFH exécute le système, ce qui est probablement plus votre point de vue sur le problème :) Mais c'est difficile à dire sans avoir plus d'informations sur le système actuel .

Je prie que ce ne soit pas un problème de charge.Je ne l'ai pas mentionné dans la question (donc je comprends pourquoi vous notez cette possibilité), mais c'est censé être un environnement "cloud privé" complet qui hébergera des dizaines d'applications pour de nombreuses équipes de développement.Et cette restriction est en place même pour les serveurs dédiés au * développement *.
Bon point concernant les filtres de paquets - sans délai, un attaquant peut faire un DoS par une attaque de type SYN flood.Le délai d'expiration fournit une limite à la durée de validité après l'arrêt de l'attaque.
slebetman
2016-04-29 11:22:54 UTC
view on stackexchange narkive permalink

Comme vous l'avez peut-être remarqué, cela n'a absolument rien à voir avec la sécurité. Au lieu de cela, la pratique consistant à supprimer les connexions TCP dormantes de longue durée est liée à des bogues - c'est une solution de contournement pour les logiciels bogués.

L'un des exemples les plus célèbres de logiciels laissant les sessions TCP en suspens est Internet Explorer ( au moins jusqu'à la version 7). IE avait l'habitude de ne pas terminer correctement les sessions TCP, de sorte que, sur le PC / ordinateur portable / téléphone client, la prise est considérée comme fermée, le serveur voit toujours la connexion comme ouverte. Et IE n'est que l'un des exemples les plus connus. Il existe de nombreux logiciels bogués.

Alors, pourquoi un serveur devrait-il s'en soucier? Parce que chaque socket ouvert est également un descripteur de fichier ouvert. Ne pas gérer cette situation entraîne le serveur à manquer de descripteur de fichier. En théorie, le serveur peut également manquer d'ID de socket, mais ce nombre est beaucoup, beaucoup plus élevé que le nombre de descripteurs de fichiers ouverts qu'un système d'exploitation peut gérer.

Pour cette raison, diverses implémentations de la pile TCP incluent un timeout sur les sockets morts. Sur certains systèmes d'exploitation, vous pouvez configurer ce délai.

Serge Ballesta
2016-04-29 14:11:40 UTC
view on stackexchange narkive permalink

Vous avez presque toujours un timeout sur une session TCP inactive implémentée dans les routeurs, les commutateurs et toutes ces machines réseau de bas niveau. Cela n'a pas grand-chose à voir avec la sécurité dans le sens de la protection contre une attaque délibérée, mais essayez simplement de ne pas épuiser les ressources en raison d'un logiciel bogué qui ne parvient pas à fermer la connexion ou d'autres erreurs matérielles dans le réseau externe empêchant le paquet de fermeture d'atteindre sa destination.

En raison de ces éventuelles pannes transcendantes, un équipement réseau (normalement jamais réinitialisé à moins d'être interrompu) qui n'expirerait jamais une connexion inactive se terminerait par une pénurie de ressources et se générerait lui-même un déni de service ...

Le pire, c'est qu'il s'agit souvent de systèmes à faibles ressources (faible coût) et pour cette raison, les administrateurs réseau s'efforcent de réduire le risque que leur partie tombe en panne sous la charge et a donc tendance à utiliser timeouts agressifs. C'est la raison pour laquelle on utilise la connexion TCP Keep Alive (si le keep alive emballé passe, il y a quelque chose à l'autre bout) combiné avec de courts délais d'expiration du réseau.

Mais le vrai problème ici est que les développeurs d'applications en savent peu les utilisations du réseau et que les administrateurs réseau ne se soucient pas beaucoup des applications de haut niveau. La vie est comme ça ...



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...