Pourquoi utiliser Kerberos au lieu de NTLM dans IIS?

41

C'est quelque chose auquel je n'ai jamais vraiment pu répondre aussi bien que je l'aime: quel est le véritable avantage d'utiliser l'authentification Kerberos dans IIS au lieu de NTLM?

J'ai vu beaucoup de gens se battre vraiment pour l'installer (moi-même) et je n'ai pas été en mesure de trouver une bonne raison pour l'utiliser. Il doit cependant y avoir des avantages assez importants, sinon cela ne vaudrait pas la peine de tout mettre en place pour le configurer, non?

Infotekka
la source

Réponses:

67

Sous Windows uniquement:

NTLM

  • fonctionne avec les deux externe (non-domaine) et internes clients
  • fonctionne avec les comptes de domaine et les comptes d'utilisateurs locaux sur la boîte IIS
    • Si vous utilisez des comptes de domaine, seul le serveur nécessite une connectivité directe à un contrôleur de domaine.
    • En utilisant des comptes locaux, vous n’avez besoin de connectivité nulle part :)
    • vous n'avez pas besoin d'être connecté en tant qu'utilisateur en question pour utiliser des informations d'identification
    • Mis à part : ce n'est pas rare pour un courant continu d'être submergé par un serveur NTLM occupé (IIS, Exchange, TMG / ISA, etc.) avec le volume des demandes NTLM (pour atténuer: MaxConcurrentAPI, AuthPersistSingleRequest(faux) ., Plus rapide DC) ( Auto- bonus référentiel .)
  • nécessite une connectivité client uniquement au serveur IIS (sur le port du site, rien d’autre. C’est-à-dire que tout se passe via HTTP (ou HTTPS).)
  • peut traverser toute procuration de support HTTP Keep-Alive s
    • vous pourrez peut-être utiliser TLS / SSL pour contourner les autres
  • nécessite plusieurs allers-retours pour s'authentifier, avec de petits paquets
    • (le modèle de journal est 401.2, 401.1, 200 avec nom d'utilisateur)
  • ne peut pas être utilisé dans des scénarios où une authentification à double saut est requise
    • c'est-à-dire que les informations d'identification de l'utilisateur doivent être transmises à un service sur un autre ordinateur
  • prend en charge les clients plus anciens (<Win2000)
  • Est sensible aux écarts de niveau d'authentification LM (incompatibles lmcompatibilitylevel)
  • est utilisé comme solution de secours par le package Negotiate si Curb échoue.
    • ( pas "si l'accès est refusé avec Curb", Curb doit rompre pour que NTLM soit utilisé - cela ressemble généralement à ne pas recevoir de ticket. Si le client obtient un ticket et que ce n'est pas parfait, cela ne provoque pas de repli.)

Kerberos

  • travaille avec actuellement les clients appartenant au domaine uniquement
    • nécessite une connectivité client à un contrôleur de domaine AD (tcp / udp 88) ET au serveur (les tickets sont extraits par le client du contrôleur de domaine via le port Curb, puis fournis au serveur via HTTP)
  • peut être en mesure de traverser un proxy, mais voir Point DC ci-dessus: vous devez toujours vous trouver sur le même réseau qu'un contrôleur de domaine actif, à l'instar du serveur .

    • Donc, en théorie, si vous avez un domaine dans lequel des clients connectés à Internet discutent directement avec un contrôleur de domaine connecté à Internet, c'est faisable. Mais ne faites pas ça si vous ne le saviez pas déjà.
    • Dans les scénarios de proxy inverse (ISA / TMG), le serveur de transition de protocole doit se trouver sur ce réseau, c'est-à-dire pas sur le client ... mais le client n'est pas vraiment celui qui effectue le bit Kerberos (nécessairement - pensez que l'authentification par formulaire est forcée pour Curb. transition).
  • Le ticket a une longue durée de vie (10h), ce qui signifie moins de communication DC pendant la durée du ticket - et soulignons: cela pourrait économiser des milliers de millions de requêtes par client au cours de cette durée - ( AuthPersistNonNTLMc'est toujours une chose; la validation Kerberos PAC était autrefois une chose)

  • nécessite un aller-retour unique pour s'authentifier, mais la taille de la charge utile d' authentification est relativement grande (généralement de 6 à 16 Ko) ( 401 , taille du jeton {(codé)} 200 )
  • peut être utilisé avec une délégation (toujours contrainte ) pour activer l'authentification Windows de l'utilisateur qui se connecte au prochain service
    • Par exemple, pour autoriser l' UserAaccès à IIS et utiliser ce même compte d'utilisateur lorsque IIS accède à SQL Server, il s'agit de "délégation d'authentification".
    • ( Dans ce contexte, contraint signifie "mais pas autre chose", par exemple Exchange ou une autre boîte SQL)
  • est actuellement le package de sécurité principal pour l'authentification par négociation
    • ce qui signifie que les membres du domaine Windows préfèrent quand ils peuvent l'obtenir
  • nécessite l’ enregistrement de SPN , ce qui peut être délicat. Des règles qui aident .
  • nécessite l'utilisation d'un nom comme cible et non d'une adresse IP
  • raisons possibles de Curb peut échouer:
    • en utilisant une adresse IP au lieu d'un nom
    • pas de SPN enregistré
    • doublons SPN enregistrés
    • SPN enregistré contre un compte erroné ( KRB_ERR_AP_MODIFIED)
    • pas de connectivité DNS / DC client
    • paramètre de proxy client / zone intranet locale non utilisée pour le site cible

Tant qu'on y est:

De base

  • peut faire plusieurs sauts. Mais le fait en exposant votre nom d'utilisateur et votre mot de passe directement à l'application Web cible.
    • qui peut alors faire tout ce qu'il veut avec eux. N'importe quoi .
    • "Oh, un administrateur de domaine vient-il d'utiliser mon application? Et je viens de lire leur courrier électronique? Ensuite, réinitialisez leur mot de passe? Awww. Dommage. "
  • a besoin de la sécurité de la couche transport (c'est-à-dire TLS / SSL) pour toute forme de sécurité.
    • et ensuite, voir le numéro précédent
  • fonctionne avec n'importe quel navigateur
    • (mais voir le premier numéro )
  • nécessite un aller-retour pour s'authentifier ( 401 , 200 )
  • peut être utilisé dans des scénarios à sauts multiples, car Windows peut effectuer une connexion interactive avec des informations d'identification de base
    • Il peut être nécessaire LogonTypede configurer le pour y parvenir (pensez que la valeur par défaut a été changée en texte clair de réseau entre 2000 et 2003, mais cela pourrait être une erreur de mémoire).
    • mais encore une fois , voir le premier numéro .
    • Vous avez l'impression que le premier problème est vraiment, vraiment important? C'est.

Pour résumer:

Curb peut être difficile à configurer, mais il existe de nombreux guides (le mien ) qui tentent de simplifier le processus, et les outils se sont considérablement améliorés de 2003 à 2008 (la SetSPNrecherche de doublons est le problème le plus courant) ; utilisezSETSPN -S quand vous voyez des conseils pour utiliser -A, et la vie sera plus heureuse).

Délégation contrainte vaut le coût d'admission.

TristanK
la source
2
Techniquement, il n'est pas nécessaire que les clients Curb soient associés au domaine / domaine qu'ils souhaitent utiliser. Tant qu'ils sont connectés au contrôleur de domaine, vous pouvez utiliser des runas avec le drapeau / netonly et lancer un processus dans le contexte d'un utilisateur de domaine qui extraira encore un TGT valide si les contrôleurs de domaine peuvent être trouvés via des recherches DNS. . Et même si le DNS est déréglé, vous pouvez techniquement le contourner avec des conseils de registre à l'aide de ksetup.exe. Vous pouvez également faire la même chose avec un client Linux. Clairement, ce sont des cas extrêmes cependant.
Ryan Bolger
10
  • Kerberos a la réputation d'être un mécanisme d'authentification plus rapide et plus sécurisé que NTLM.
  • Par le passé, il était également plus facile de se connecter via des serveurs proxy que NTLM, en raison de la nature basée sur la connexion de NTLM.
  • Cela dit, comme vous le constatez, Kerberos est plus difficile à mettre en place et nécessite une connexion à AD qui n’est pas toujours pratique.

Une autre approche consisterait à définir l'authentification sur negotiateet à utiliser les deux plutôt que l'un au lieu de l'autre.

nedm
la source
9

À partir de Microsoft Application Verifier , qui détecte les erreurs courantes des développeurs. Une de ces erreurs est l'utilisation de NTLM :

NTLM est un protocole d'authentification obsolète avec des failles pouvant compromettre la sécurité des applications et du système d'exploitation. Le défaut le plus important est l’absence d’authentification du serveur, qui pourrait permettre à un attaquant de tromper les utilisateurs en leur demandant de se connecter à un serveur usurpé. En corollaire de l'authentification de serveur manquante, les applications utilisant NTLM peuvent également être vulnérables à un type d'attaque appelé attaque «de réflexion». Ce dernier permet à un attaquant de détourner la conversation d'authentification d'un utilisateur vers un serveur légitime et de l'utiliser pour authentifier l'attaquant sur l'ordinateur de l'utilisateur. Les vulnérabilités de NTLM et les moyens de les exploiter sont l’objet d’une activité de recherche croissante dans la communauté de la sécurité.

Bien que Kerberos soit disponible depuis de nombreuses années, de nombreuses applications sont toujours conçues pour utiliser NTLM uniquement. Cela réduit inutilement la sécurité des applications. Kerberos ne peut toutefois pas remplacer NTLM dans tous les scénarios - principalement ceux dans lesquels un client doit s’authentifier auprès de systèmes qui ne sont pas joints à un domaine (un réseau domestique étant peut-être le plus courant). Le package de sécurité Négocier permet un compromis rétrocompatible qui utilise Kerberos chaque fois que possible et ne revient à NTLM que s’il n’ya pas d’autre option. Changer de code pour utiliser Négocier au lieu de NTLM augmentera considérablement la sécurité de nos clients tout en introduisant peu ou pas de compatibilité d’applications. Négocier en soi n’est pas une solution miracle: il existe des cas dans lesquels un attaquant peut forcer la rétrogradation vers NTLM, mais ceux-ci sont nettement plus difficiles à exploiter. Cependant, une amélioration immédiate réside dans le fait que les applications écrites pour utiliser correctement Negotiate sont automatiquement immunisées contre les attaques par réflexion NTLM.

Pour terminer, il convient de mettre en garde contre l’utilisation de NTLM: dans les futures versions de Windows, il sera possible de désactiver l’utilisation de NTLM sur le système d’exploitation. Si les applications dépendent fortement de NTLM, elles ne pourront tout simplement pas s'authentifier lorsque NTLM est désactivé.

Ian Boyd
la source
3
Citation terrible. Signé il.
Michael-O
4

Vous devriez ajouter un point très important:

Kerberos est un protocole standard et ouvert sous Unix depuis 20 ans, alors que NTLM est une solution purement propriétaire de Microsoft et connue uniquement de Microsoft.

Michael-O
la source
Il est connu par presque tous les navigateurs de bureau (Mac et Windows) et mobiles (modernes). Donc pas seulement "Microsoft".
Aardvark
Non, uniquement en raison de l'ingénierie inverse. NTLM n'est pas ouvert et n'est pas documenté publiquement par Microsoft. Donc, ceci est un mécanisme de sécurité inutile.
Michael-O
Je ne sais pas ce qu'il y a dedans, mais: msdn.microsoft.com/en-us/library/cc236621.aspx
thinkOfaNumber
@thinkOfaNumber, c'est-à-dire reconnu, a été publié il y a des années, même s'il n'existe pas une seule implémentation complète de la technologie NTLM en open source. Pensez pourquoi pas?
Michael-O
1

Kerberos est requis si vous devez emprunter l'identité de l'utilisateur pour accéder à des ressources qui ne se trouvent pas sur le serveur IIS.

Greg Askew
la source