Question:
Pourquoi ai-je besoin de Kerberos alors que je pourrais simplement utiliser un nom d'utilisateur et un mot de passe pour accéder aux services?
Minaj
2016-07-21 00:17:54 UTC
view on stackexchange narkive permalink

J'ai lu que Kerberos est utilisé pour authentifier les utilisateurs qui souhaitent accéder aux services sur différents serveurs dans un réseau d'entreprise, mais je ne comprends toujours pas le but de Kerberos. Pourquoi l'administrateur système ne crée-t-il pas simplement un compte utilisateur pour chaque utilisateur sur chaque serveur, afin que les utilisateurs puissent utiliser leur nom d'utilisateur et leur mot de passe pour accéder aux ressources auxquelles ils souhaitent accéder? Pourquoi un protocole d'authentification aussi élaboré est-il nécessaire?

pour cela: `pour chaque utilisateur sur chaque serveur`.Imaginez la maintenance et le cauchemar pour les utilisateurs
Comment garderiez-vous ces mots de passe synchronisés?
Kerberos a le même objectif pour les réseaux d'entreprise qu'OpenID pour les sites Web - tout comme vous pouvez utiliser votre session de connexion Google ou Facebook pour accéder à Stack Exchange, vous pouvez vous connecter à votre réseau une fois, puis utiliser tous les services.
De @LuisCasillas answer: `Imaginez que vous avez 50 utilisateurs ...`.Je suis tombé sur un serveur avec plus de 300 000 utilisateurs définis, et beaucoup d'entre nous peuvent imaginer bien plus.Créer des comptes n'est pas anodin si vous voulez des serveurs sécurisés.
Cinq réponses:
Luis Casillas
2016-07-21 01:55:28 UTC
view on stackexchange narkive permalink

Pourquoi l'administrateur système ne crée-t-il pas simplement un compte utilisateur pour chaque utilisateur sur chaque serveur, afin que les utilisateurs puissent utiliser leur nom d'utilisateur et leur mot de passe pour accéder aux ressources auxquelles ils souhaitent accéder?

Imaginez que vous avez 50 utilisateurs et 50 serveurs. Par souci de simplicité, supposons que les 50 utilisateurs sont censés avoir accès aux 50 serveurs, ils ont tous les mêmes privilèges sur tous les serveurs, et nous n'avons jamais à changer ces privilèges. Il s'agit au total de 2 500 entrées de mot de passe à créer.

Ajout d'un nouvel utilisateur

Lorsque vous ajoutez un nouvel utilisateur, l'administrateur doit partir aux 50 serveurs et ajoutez cet utilisateur à tous. Cela nécessiterait que l'administrateur exécute la commande create user sur les 50 serveurs. Ce bit peut être automatisé, mais la partie qui ne peut être automatisée en toute sécurité est que l’utilisateur doit entrer son mot de passe 50 fois, une fois par serveur.

Pourquoi ce dernier problème? Parce que les systèmes d'authentification par mot de passe sont conçus de manière à ne pas conserver une copie du mot de passe, pas même une copie chiffrée. Ainsi, lorsque l'utilisateur saisit son nouveau mot de passe sur le serveur n ° 1, ce serveur oublie immédiatement le mot de passe, il devra donc le saisir à nouveau pour le serveur n ° 2, et n ° 3, etc.

Ajout d'un nouveau serveur

Vous pensez peut-être maintenant que vous pourriez écrire un script qui:

  1. S'exécute sur le serveur X;
  2. Demande au nouvel utilisateur d'entrer son nouveau mot de passe;
  3. Demande à l'administrateur son mot de passe;
  4. Se connecte aux serveurs # 1 à # 50 et crée le compte utilisateur sur chacun d'eux avec le même mot de passe.

C'est un peu douteux, mais même si vous y allez, vous vous retrouvez toujours avec un autre problème plus grave. Supposons que votre entreprise achète un nouveau serveur et que nous ayons maintenant besoin de nos 50 utilisateurs pour avoir accès à ce serveur. Eh bien, étant donné qu'aucun des serveurs ne contient une copie des mots de passe des utilisateurs, l'administrateur devrait accéder à chaque utilisateur et leur demander de saisir un mot de passe pour leur compte sur le nouveau serveur. Et il est impossible de contourner ce problème à moins de conserver des copies des mots de passe des utilisateurs, ce qui, encore une fois, n'est pas une pratique sûre.

Base de données de mots de passe centralisée

Pour résoudre ces problèmes, vous avez vraiment besoin que votre base de données utilisateur / mot de passe soit centralisée en un seul endroit, et que tous les serveurs consultent cette base de données pour authentifier les noms d'utilisateur et les mots de passe. C'est vraiment le strict minimum dont vous avez besoin pour un environnement multi-utilisateur / multiserveur gérable. Maintenant:

  1. Lorsque vous ajoutez un nouvel utilisateur, tous les serveurs le récupèrent automatiquement dans la base de données centrale.
  2. Lorsque vous ajoutez un nouveau serveur, il récupère automatiquement tout les utilisateurs de la base de données centrale.

Il existe une variété de mécanismes pour ce faire, même s'ils manquent encore de ce que propose Kerberos.

Kerberos

Une fois que vous avez une telle base de données centralisée, il est logique de la perfectionner avec plus de fonctionnalités, à la fois pour faciliter la gestion et pour plus de commodité. Kerberos ajoute la possibilité que, lorsqu'un utilisateur s'est connecté avec succès à un service, ce service "se souvient" du fait et est capable de "prouver" à d'autres services que cet utilisateur s'est connecté avec succès. Ainsi, ces autres services, présentés avec une telle preuve, permettront à l'utilisateur d'entrer sans lui demander de mot de passe.

Cela offre un mélange de commodité et de sécurité:

  1. Les utilisateurs ne on ne leur demande pas encore et encore leur mot de passe lorsqu'ils l'ont déjà saisi une fois ce jour-là.
  2. Lorsque des programmeurs écrivent des programmes qui accèdent à plusieurs serveurs et que ces serveurs nécessitent une authentification, les programmes peuvent désormais s'authentifier auprès de ces serveurs sans avoir à présenter de mot de passe, en réutilisant les informations d'identification du compte de serveur sous lequel ils s'exécutent.

Ce dernier est important car il minimise ou tue une pratique non sécurisée mais trop courante: des programmes automatisés qui vous obligent à mettre des copies des noms d'utilisateur et des mots de passe dans les fichiers de configuration. Encore une fois, une idée clé de la gestion sécurisée des mots de passe est de ne pas stocker de copies de mots de passe, pas même de copies chiffrées .

Ajout d'un nouveau serveur: Vous pouvez mettre en miroir `/ etc / passwd` et` / etc / shadow` (c'est-à-dire les hachages de mot de passe + sel) sur le nouveau serveur.Il ne vous donne pas d'authentification unique, mais il résout la plupart des autres problèmes.J'ai écrit un script qui a fait cela (pour UID 500 et supérieur uniquement), et cela a bien fonctionné sur quelques petits clusters de calcul.La plupart des utilisateurs n'utilisaient qu'un seul cluster à la fois, le manque de SSO n'était donc pas un problème.Cette solution ghetto évitait qu'un cluster ne devienne inutilisable simplement parce qu'une * autre * machine était en panne, il n'y avait donc pas de point de défaillance sans avoir besoin d'une authentification répliquée ou de serveurs LDAP.
C'était dans un cadre universitaire où la plupart des utilisateurs géraient leurs propres bureaux et leurs comptes d'utilisateur de bureau n'étaient pas connectés à leurs comptes sur les clusters du groupe de recherche.Comme je l'ai dit, solution à petite échelle et hack-ish, mais très fiable et n'a jamais causé de problème.:) Petit inconvénient: les gens ne pouvaient changer leur mot de passe que sur le cluster maître.
@PeterCordes: Oui, cela fait partie de ma catégorie "base de données de mots de passe centralisée".Mon concept consistant à accéder à chaque machine et à saisir manuellement le mot de passe est certes hyperbolique, mais j'y suis allé car cela permet de souligner le fait que la gestion sécurisée des mots de passe signifie ne pas enregistrer les mots de passe - ce qui est une condition préalable pour comprendre si votre solution est sécurisée.Bien qu'une autre considération soit que vous pouvez avoir des systèmes non-Unix qui ne peuvent pas utiliser les DB de mots de passe Unix.
Une base de données de mots de passe centralisée est très vulnérable à l'escalade latérale.Si un attaquant compromet un serveur, il peut renifler les mots de passe, puis les utiliser pour compromettre d'autres serveurs.Kerberos essaie au moins d'arrêter cela.
@paj28: Je suis généralement d'accord, mais j'ai vu des environnements Kerberos où les utilisateurs se connectent directement à des serveurs individuels et envoient leurs mots de passe via SSH;les serveurs individuels se procurent ensuite les jetons Kerberos.Si quelqu'un compromet l'un de ces serveurs, vous courez les mêmes risques.Donc, bien que Kerberos * essaie * d'arrêter cela, «essaie» est un mot clé ici.
@LuisCasillas Au moins en théorie, vous devriez envoyer un ticket.Ayant un ticket sur ma machine locale, je peux me connecter via GSSAPI au serveur ssh (m'authentifier par le ticket Kerberos que j'ai localement) et obtenir un ticket sur la télécommande.Bien sûr, rien n'empêche TLS_NULL_WITH_NULL_NULL d'exister mais le serveur configuré sur TLS_NULL_WITH_NULL_NULL n'est pas moins une faute de TLS puis oblige les utilisateurs à se connecter par mot de passe par SSH de Kerberos.
DKNUCKLES
2016-07-21 00:27:54 UTC
view on stackexchange narkive permalink

En termes simples, ce serait un cauchemar administratif.

Kerberos permet aux administrateurs de faire en sorte que n'importe quel nombre d'employés utilise les mêmes informations d'identification pour se connecter aux ressources de leur domaine.

Disons que cela n'existait pas dans un réseau simple.

  1. L'utilisateur entre le mot de passe pour déverrouiller son ordinateur.
  2. L'utilisateur souhaite mapper un lecteur réseau. Il doit maintenant saisir à nouveau son mot de passe
  3. L'utilisateur souhaite alors recevoir un e-mail. Ils ouvrent Outlook et doivent ensuite entrer un autre mot de passe.
  4. L'utilisateur doit alors se connecter à l'intranet de l'entreprise. C'est un autre mot de passe.

Vous voyez l'idée. Ne pas utiliser Kerberos signifie que l'utilisateur doit conserver les mots de passe de tous les serveurs hébergeant les services auxquels il doit accéder. Ce serait un casse-tête pour les utilisateurs et les administrateurs. La plupart des politiques d'entreprise stipulent que les utilisateurs doivent changer leur mot de passe tous les X jours. Pouvez-vous imaginer être un utilisateur final et avoir besoin de changer votre mot de passe sur 5 serveurs à chaque fois que vous devez le faire?

Du point de vue de la sécurité, l'administrateur obtient toutes ses tentatives de connexion (réussies et échouées) dans un seul endroit au lieu d'être connecté sur 5 serveurs différents. Cela aide à la fois à résoudre les problèmes de connexion (par exemple, les verrouillages) et rend les journaux d'audit beaucoup plus faciles.

Donc, vous dites essentiellement que grâce à Kerberos, les utilisateurs ne conservent les informations d'identification que sur un serveur?Alors ce serveur s'authentifie auprès des différents services?
@Minaj avec Kerberos, les utilisateurs conservent les informations d'identification d'un * domaine * et non d'un serveur.Le serveur d'authentification Kerberos indique ensuite à diverses ressources du domaine à quelles ressources cet utilisateur a accès (c'est-à-dire les fichiers sur un partage de fichiers, les imprimantes, etc.).C'est ce qu'on appelle l'authentification unique (ou SSO pour faire court)
Pourquoi ce serveur d'authentification ne transmet-il pas simplement mon nom d'utilisateur et mon mot de passe au service (ou serveur auquel je souhaite accéder?).Par exemple - Si je veux accéder au service A, je contacte le serveur d'authentification B qui prouve mon identité, puis le serveur B transmet ma demande à A. Si je veux contacter le serveur C, je contacte à nouveau le serveur d'authentification B qui vérifie mes informations d'identificationpuis transmet ma demande à C. Pourquoi avons-nous besoin d'un protocole d'authentification élaboré?Il me semble que la simple transmission des demandes authentifiées que je viens d'expliquer ci-dessus fonctionnerait très bien.
@Minaj Parce que dans votre cas, vous auriez besoin de stocker des mots de passe dans tous ces endroits - et stocker les mots de passe (ou plus correctement, les hachages de mots de passe) est difficile.Vous devrez également gérer les changements de mot de passe - répliquer tout changement de mot de passe sur chaque serveur, gérer divers changements de serveur.Que se passe-t-il si un serveur rejette le changement de mot de passe (en raison d'exigences de force) mais que d'autres l'acceptent?SSO est une réponse beaucoup plus propre et meilleure avec beaucoup moins d'administration requise.Kerberos n'est qu'une des nombreuses normes SSO, mais c'est une très ancienne et respectée
@crovers Le système que je viens de décrire ci-dessus aurait uniquement des hachages de mot de passe stockés sur le serveur B. Le serveur B vérifie mon identité.Ensuite, il peut transmettre ma demande aux serveurs A ou C qui lui font déjà confiance (et donc ont confiance qu'il m'a authentifié correctement).
Le problème, @Minaj, c'est cette confiance.L'adage est «faites confiance mais vérifiez» et la vérification est impossible avec le système que vous avez décrit.De plus, la transmission des mots de passe devient difficile pour la révocation.Vous pouvez révoquer un ticket.Vous ne pouvez pas facilement révoquer un mot de passe tout en gardant le compte intact.
Si le hachage de mot de passe est uniquement sur le serveur B, alors ce que vous décrivez est très similaire à SSO - sauf que dans SSO Server B (le serveur d'authentification) n'est pas dans la ligne de toutes les demandes.Dans votre schéma, le serveur B aurait ses doigts dans chaque requête, ajoutant une latence, obligeant B à être beaucoup plus costaud.Dans SSO, une fois que le serveur B a émis son ticket à l'utilisateur, l'utilisateur parle directement au serveur qui fournit la ressource.Cela signifie que si le serveur d'authentification est situé dans un pays et le serveur de fichiers situé à proximité de l'utilisateur, l'utilisateur obtient tous les avantages de localité du serveur local.
@Minaj, Le problème avec les demandes de transfert est que le serveur B, le serveur d'authentification, aurait toutes les demandes vers et depuis les serveurs qui le traversent.Cela signifie que le serveur utiliserait plus de bande passante réseau et aurait besoin de ressources supplémentaires dédiées au traitement des demandes.Le protocole Kerberos permet aux serveurs A et C de s'enregistrer simplement avec le serveur B sans avoir à déplacer de communications via B.
En outre, il faudrait que chaque serveur détienne un mot de passe (hachage) pour chaque utilisateur.Ce qui augmente considérablement le risque de fuite.
DKNUCKLES est absolument correct.Je suis l'administrateur d'un réseau de plus de 100 utilisateurs, des dizaines de serveurs, d'applications, d'imprimantes, de partages, etc. La gestion de la connexion de chaque utilisateur individuel sur chaque système individuel est un cauchemar administratif. De plus, il y a un énorme avantage et un gain de temps pour l'utilisateur final.Imaginez si l'utilisateur utilise constamment 5 à 10 systèmes ou applications différents et devrait se connecter et se déconnecter en permanence de ces applications, en oubliant les mots de passe, en se verrouillant, etc. Cela tuerait sa productivité.
DKNUCKLES n'a jamais entendu parler de grabfiles.
@Minaj, si des mots de passe littéraux sont transmis, cela signifie que tout service qui a besoin de valider un utilisateur doit pouvoir accéder à son mot de passe littéral, et peut divulguer ce mot de passe s'il est compromis.Si vous avez beaucoup de services différents, écrits et maintenus par différentes personnes avec différents niveaux de conscience de la sécurité, cela signifie que celui qui est la fuite la plus faible peut être attaqué pour voler les mots de passe littéraux de tous les utilisateurs utilisant ce service - alors qu'avec Kerberos,le serveur Kerberos (renforcé) qui les a tous.
duffbeer703
2016-07-21 01:47:01 UTC
view on stackexchange narkive permalink

Kerberos n'est pas là pour des raisons de commodité, c'est une mesure de sécurité améliorée. La commodité est un avantage secondaire.

Une bonne explication est Concevoir un système d'authentification: un dialogue en quatre scènes

En gros, au lieu de simplement passer un jeton magique autour (c'est-à-dire votre mot de passe), vous obtenez un "ticket", qui est signé par une source fiable de vérité (par exemple Kerberos KDC, Microsoft AD, etc.). Votre ticket indique aux services qui sont et à quels groupes de droits vous appartenez. Pensez-y comme acheter un billet d'entrée à un parc d'attractions ou donner de l'argent à un préposé à chaque trajet dans un parc.

paj28
2016-07-21 23:55:32 UTC
view on stackexchange narkive permalink

Pour éviter une escalade latérale .

La complexité administrative de la gestion des mots de passe peut être réduite en utilisant une base de données de mots de passe centralisée, telle que LDAP. Cependant, cela crée un risque d'escalade latérale. Si un attaquant prend le contrôle d'un serveur, il peut rester présent en silence, reniflant les mots de passe. Ces mots de passe peuvent ensuite être utilisés pour compromettre d'autres serveurs - escalade latérale.

Kerberos tente de résoudre ce problème: les utilisateurs n'envoient pas leur mot de passe à chaque serveur; ils l'envoient uniquement au serveur d'authentification et présentent un ticket aux autres serveurs. Récemment, certaines failles ont été identifiées et exploitées par des outils comme mimikatz. Cependant, au moins Kerberos est conçu pour empêcher l'escalade latérale; LDAP ne fait rien pour l'arrêter.

Tant que tous les serveurs ont été configurés pour utiliser _feulement_ Kerberos (c'est-à-dire avec des tickets), et pas simplement vérifier les mots de passe contre un KDC avec pam_krb5 comme certains administrateurs ont tendance à le faire.
Celui qui vient de voter: je serais intéressé de savoir ce qui ne va pas avec ma réponse
Joshua
2016-07-21 21:35:55 UTC
view on stackexchange narkive permalink

Le principal avantage de Kerberos est de permettre la synchronisation immédiate du changement de compte et du changement de mot de passe.

J'ai des solutions à portée de main pour l'administration centralisée des comptes distribués et des agents de mot de passe côté client qui répondent à 99% des invites de mot de passe après la connexion, mais toutes supposent que l'utilisateur change de mot de passe est rare et que nous pouvons attendre que le travail par lots de nuit pour que le changement de mot de passe prenne effet. Il en va de même pour les changements d'autorisation dans la plupart des cas; si nous avons besoin d'un changement d'autorisation pour prendre effet maintenant, les outils les plus petits ne peuvent pas le faire.

Kerberos énumère dans ses capacités la capacité d'authentifier en toute sécurité les connexions sans les chiffrer. Cela s'avère moins que souhaitable dans la pratique et cette capacité ne doit pas être invoquée. Voler des tickets Kerberos était l'essence même d'une attaque contre SMB il y a un an qui fournirait tous les accès en tant qu'utilisateur à condition que l'utilisateur utilise n'importe quel partage réseau n'importe où.

Le "principal avantage" donné ici peut être reçu de LDAP seul, donc cela ne couvre pas vraiment pourquoi on voudrait Krb5 + LDAP sur seulement LDAP (avec des mots de passe hachés dans l'annuaire).
@CharlesDuffy: J'ai du mal à compter un «avantage» qui ne fonctionne pas vraiment comme un avantage.
Hein?Il y a certainement des avantages pratiques par rapport aux autres approches de service d'annuaire (c'est-à-dire uniquement LDAP);vous obtenez une authentification unique (les utilisateurs ne ressaisissent pas leurs mots de passe, ce qui augmente la commodité, réduit la quantité de place pour les renifleurs et décourage des choses comme les scripts de saisie de mot de passe basés sur «expect» / les littéraux stockés).Vous obtenez une résistance contre l'escalade latérale (si vous faites l'effort de le faire correctement).Vous bénéficiez d'une prise en charge des informations d'identification mises en cache d'une manière spécifique à un service unique et à une période configurable, ce qui permet un contrôle bien meilleur que les moyens habituels.Vous disposez d'une journalisation centralisée.
@CharlesDuffy: J'ai obtenu une connexion unique sans Krb5;La protection contre les escalades latérales Krb5 est généralement cassée;le délai d'expiration des informations d'identification mises en cache est intéressant, mais cela me gêne généralement (les processus de longue durée ne peuvent pas être expirés ou interrompus);la journalisation centrale existait avant LDAP, sans parler de Krb5.
Bien sûr, la journalisation centralisée peut être effectuée autrement, mais c'est quelque chose que vous devez explicitement configurer autrement - avec Kerberos, vous obtenez la journalisation des tentatives d'authentification de manière centralisée gratuitement.Re: "SSO w / o krb5", avec quelle précision?Re: "la protection contre l'escalade latérale est principalement cassée", c'est sur les gens qui la déploient mal.(Oui, ajouter le support GSSAPI partout est un travail, mais cela en vaut la peine, putain).
Si vous GSSAPI vers un serveur compromis et que votre compte dispose de privilèges élevés, ne soyez pas surpris si quelque chose de vraiment mauvais arrive à vos serveurs maîtres.J'ai du code écrit spécialement pour en profiter.


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...