Active Directory - le mystère UnicodePwd d'AD LDS

Lightweight Directory Services d'Active Directory utilise la procédure sophistiquée permettant de convertir et authentifier les mots de passe.

En C. de Frank Rettig

Récemment, un de mes clients requis pour exposer certaines informations sur Internet à partir de Active Directory. L'objectif était de fournir une authentification (à des fins d'ouverture de session) pour une application externe sans exposer ces attributs de sélection. Vous pouvez vous demander quel est le point de l'authentification à l'extérieur de l'application. Il place la charge sur les utilisateurs de l'application, par opposition au fournisseur, ce qui réduit la responsabilité du propriétaire.

L'exposition d'un contrôleur de domaine à Internet est normalement une mauvaise pratique, si cette exposition est livré directement à partir de l'environnement de production ou via un réseau de périmètre. L'alternative naturelle consiste à placer un serveur Windows Server 2008 avec le rôle d'Active Directory Lightweight Directory Services (AD LDS) en cours d'exécution sur le réseau périphérique.

AD LDS était appelée à l'origine en tant que Active Directory Application Mode (ADAM). Il a été tout d'abord un module complémentaire pour Windows 2003, inclus avec Windows 2003 R2 et est désormais disponible sous la forme d'un rôle de serveur pour Windows 2008 ou Windows 7. De nombreuses manières, c'est presque comme Active Directory. Comme certains ont dit, il est une version de tons vers le bas qui n'a pas de capacités de l'entreprise complète. Mise en œuvre d'AD LDS est pratiquement la même sur n'importe quelle version de Windows, bien que Windows Server 2008 R2 est le meilleur choix car il inclut Windows PowerShell v2. Cette nouvelle version de Windows PowerShell fournit la gestion améliorée des attributs d'Active Directory/AD LDS simplement ne sont pas disponibles dans d'autres versions de système d'exploitation.

Accédez à la légère

Si votre focus est Active Directory ou AD LDS, à la fois peuvent avoir l'attribut unicodePwd. Cet attribut est stocké dans la partition de répertoire ou cette application. Cela suppose que le serveur a été promu un contrôleur de domaine Active Directory ou dans le bon modèle LDIF qui possède l'attribut pour un serveur a été appliqué de AD LDS.

Avec Active Directory ou AD LDS, applications, utilisez LDAP (Lightweight Directory Access Protocol) version 3.0 pour interroger l'annuaire. Pour ce faire, l'application (ce qui pourrait être LDP.exe, CSVDE.EXE, LDIFDE.EXE, ADSIEdit.exe ou d'applications «maison») doit fournir le compte et le mot de passe.  Semble assez simple, par conséquent, pourquoi puis est tout sauf la ? Fournir le mot de passe est la partie facile. Le mot de passe stockée dans l'attribut unicodePwd est le véritable défi. Voici pourquoi : Avec plus interactives des répertoires ou des applications, nous sommes généralement invités à entrer le mot de passe sous sa forme native. Par conséquent, si le mot de passe a été “ voiture ”, c'est ce que nous entrez. C'est le cas lorsque vous accédez à un domaine ou forêt d'Active Directory, ou lorsque vous accédez à une instance AD LDS, à l'aide d'ADSIedit ou LDP à attribuer ou réinitialiser un mot de passe pour un compte particulier.

Lorsque vous avez besoin effectuer des ajouts en bloc ou des modifications en une seule fois, le programme LDIFDE.EXE est l'outil de choix. Pour ajouter ou mettre à jour de l'attribut unicodePwd, Microsoft requiert que la valeur de l'attribut unicodePwd être au format unicode-en base 64.

Unicode-Base64 Logic

Par conséquent, comment la valeur unicode base64 est-elle calculée ? Il s'agit là où débute le plaisir. Nous espérons que nous allons chasser le mystère de l'attribut unicodePwd (et autres attributs qui suivent le même codage) qu'une seule fois pour toutes.

Tout d'abord, notez que les phrases suivantes sont annotés. Reportez-vous aux étapes 1 à 12 dans de la figure 1 . Microsoft nécessite le mot de passe est entre guillemets doubles, et puis chaque caractère (y compris les guillemets) doit être converti en son équivalent d'unicode. Cela signifie qu'il doit tout d'abord de trouver l'ASCII équivalente pour chaque caractère, dérivez de la valeur hexadécimale de chaque valeur ASCII, puis remplir chaque valeur hexadécimale de deux zéros (parce que Windows est conforme à UTF16) afin que les 16 bits sont représentés.

Une fois converti, ces jeux hex rembourré est tous regroupés dans une longue chaîne. Base64 est basée sur 6 bits, cette chaîne est analysée à tous les six caractères à partir de la gauche. Si un sextet hex incomplète reste, il est rempli à droite par des zéros jusqu'à ce que les six caractères sont représentés. Chaque sextet hexadécimal est converti en binaire. Comme pour le fichier binaire, l'analyse se produit à partir de la droite et tous les six caractères.

S'il est inutile, pour un sextet binaire incomplète, complète, à gauche avec des zéros jusqu'à ce que les six caractères sont représentés (n'oubliez pas que la pointe des zéros toujours égal à zéro, mais cela le rend plus facile à lire dans la mesure où les autres jeux ont également six caractères). Maintenant convertir chaque valeur binaire analysée dans son numérique 11 équivalente. Utilisez ce nombre en tant que l'index pour rechercher la présence d'un tableau en base 64 (figure 2 ) et obtenir son caractère. Lorsqu'un sextet complète est composée uniquement de zéros non significatifs rembourrées, ils sont représentés par le signe égal.

La figure 1 affiche, dans les étapes 1 à 12, comment la de voiture mot est convertie en **IgBjAGEAcgAiAA ==.**Marge intérieure droite est requis lorsque vous préparez l'unicode en base64, qui peuvent être vus par le texte en surbrillance bleue. À la marge intérieure gauche représentée par le texte en surbrillance rouge, il s'agit juste pour le rendre cohérent et plus facile à lire par rapport à l'autres sextets binaires.

Figure 1 Steps to create a unicode-base64 password

La figure 1Étapes pour créer un mot de passe unicode-en base 64.

Figure 2 Base64 Mapping

La figure 2Mappage en base 64.

Si vous vous poseriez la question si cette logique par exemple, est correcte, obtenir une copie du programme stringconverter.exe à partir de gbordier.com/gbtools/stringconverter.htm et d'exécuter la chaîne d'invite de commande MS-DOS suivante :

stringconverter \"car\" /encode /unicode
IgBjAGEAcgAiAA==

Comme vous pouvez le voir, les résultats sont identiques.

Création mot de passe Unicode Base64

Pour simples tests initiaux, en utilisant les fonctions Excel suivantes (figure 1 de a été créé dans Excel) vous permet rapidement générer unicode correcte-en base64 de tout texte entré :

  • CODE() – renvoie la valeur numérique d'un caractère
  • DEC2HEX() – convertit un nombre décimal en hexadécimal.
  • Concatenate() – les jointures de plusieurs chaînes en une seule chaîne
  • BIN2DEC() – convertit un nombre binaire en décimal
  • MID() – renvoie le caractère à partir du milieu d'une chaîne

La meilleure façon de faire face à générer beaucoup de valeurs de l'attribut unicodePwd doit écrire un script. Cette opération dans Excel à l'aide de VBA vous permet de voir toutes les valeurs générées et de les conserver dans la feuille de calcul pour référence ultérieure. À l'aide d'un autre script VBA, j'ai pu pour immédiatement générer un fichier LDIF pour l'importation dans l'instance AD LDS.

Téléchargement de la valeur de UnicodePwd Unicode Base64

Dans la mesure où l'attribut unicodePwd est ainsi manipulé à l'aide du programme LDIFDE.exe, téléchargement de l'attribut unicodePwd doit respecter le format de fichier LDIF. Étant donné que la mission impliqué le rôle de Windows Server 2008 R2 AD LDS, ce format de fichier LDIF est ce que j'ai suivi afin que les informations de base a été téléchargées. Notez que le compte d'utilisateur d'Olivier Renaud est le premier qui a la valeur de l'attribut unicodePwd de voiture est en tant que IgBjAGEAcgAiAA ==.

 

dn: CN=JohnDoe,OU=Accounts,DC=CONTOSO,DC=COM
Changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: John Doe
givenName: John
sn: Doe
userPrincipalName: johnd@Contoso.COM
mail: johnd@Contoso.COM
unicodePwd::IgBjAGEAcgAiAA==\
msDS-UserAccountDisabled: FALSE

dn: CN=Jess  Wanders,OU=Accounts,DC=CONTOSO,DC=COM
Changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Jess Wanders
givenName: Jess
sn: Wanders
userPrincipalName: JessW@Contoso.COM
mail: JessW@Contoso.COM
unicodePwd::IgA3ACQANQBNAHMAIwA0AEQAaQBHACIA
msDS-UserAccountDisabled: FALSE

Par conséquent, pour importer ce fichier, en supposant que son nom de fichier est Accounts.ldf, entrez la syntaxe suivante à la console de ligne de commande de Windows Server 2008 R2 :

C:\Windows\system32\LDIFDE –i –f Accounts.ldf.

La liaison et de test de mot de passe du compte

Après avoir téléchargé un ou plusieurs comptes nouvellement créés pour la partition d'application et la connexion ou la liaison au service LDAP avec userPrincipalName du compte et de l'attribut unicodePwd, il ‘ s importantes pour vous assurer que le format unicode-base64 de l'attribut unicodePwd est correct. L'outil qui fonctionne le mieux et facile à utiliser est LDP.exe. Si vous pensez que IgBjAGEAcgAiAA == est le mot de passe à entrer lors de l'utilisation de cette, mais il n'est pas. C'est que nous avons commencé à l'origine avec : voiture.

Une fois que vous êtes connecté à l'instance AD LDS, à l'aide de LDP, lier avec le nom UPN du compte téléchargé et entrez le mot de passe. Si vous avez suivi correctement la logique pour créer la valeur unicode base64 de l'attribut unicodePwd, vous verrez une confirmation positive s'affichée dans la fenêtre LDP sont en fait lié à cette instance d'AD LDS avec ce compte.

À l'aide de Windows PowerShell pour mettre à jour de l'attribut UnicodePwd

À présent, il ne serait juste si je l'ai dit que LDIFDE.exe était le seul outil autour capable d'effectuer des modifications en bloc à l'attribut unicodePwd. Puis vous ne voudriez pas ont expliqué comment générer la valeur unicode-en base 64.

Dans Windows Server 2008 R2, Windows PowerShell v2 mis un peu plus de granularité dans sa capacité à manipuler la sélection des attributs dans Active Directory et AD LDS. A travaillant avec AD LDS, j'ai proposé la syntaxe de figure 3 (note that for the sake of readability, I placed each command option on its own line) pour obtenir les mêmes résultats que mon script VBA au sein de la feuille de calcul Excel.

Il est évident avec seulement quelques lignes de code de Windows PowerShell, vous pouvez rapidement que les modifications nécessaires sans avoir à passer par le biais d'omégas lors de la création de la valeur unicode base64 pour chaque mot de passe. Il s'agit d'une instruction puissante des capacités de Windows PowerShell, mais il s'agit au détriment du temps de traitement, en tenant compte que c'est le cas en arrière-plan. Ceci est particulièrement évidente si traitement des centaines ou des milliers de comptes.

Par conséquent, si vous devez parfois créer ou mettre à jour quelques comptes tous ici là, utiliser Windows PowerShell. Si vous toujours créez ou mettre à jour des centaines de milliers de manière régulière, à l'aide de LDIFDE.exe est à long terme beaucoup plus rapide.

La figure 3Script de version 2 de Windows PowerShell pour mettre à jour le mot de passe de compte.

Import-Csv c:\scripts\accounts.csv | 
New-ADUser
–Name $_.commonName
–GivenName $_.givenName
–Surname $_.sn

-EmailAddress $_.email
-Type user
-UserPrincipalName $_.userPrincipalName
–Server LDS01:389 |
Set-ADAccountPassword
-Identity $_.distinguishedName
-NewPassword (ConvertTo-SecureString -AsPlainText $_.Password -Force)
-Reset

-Server LDS01:389 |

Enable-ADAccount

-Identity $_.distinguishedName

-Server LDS01:389

Si vous utilisez Active Directory ou AD LDS (ou même d'ADAM dans notre exemple), il existe plusieurs façons de mettre à jour de l'attribut unicodePwd. Si vous avez un compte à modifier, utilisez Ldp.exe ou ADSIedit pour qu'il fait. S'il existe seulement quelques tous ici là, à l'aide de Windows PowerShell v2 par rapport à Windows Server 2008 R2 Active Directory/AD LDS fonctionne très bien.

Toutefois, si vous travaillez encore avec Windows Server 2003 ou version ultérieure et que vous avez des centaines de milliers de comptes qui ont besoin constant de la mise à jour, effectuez votre travail de préparation dès le départ pour générer la valeur unicode base64 pour l'attribut unicodePwd. Puis utilisez LDIFDE.exe pour télécharger les modifications en une seule fois.

Frank Rettig

Frank Rettig est consultant aux États-Unis. Pratique du secteur public, que qui se trouve dans la zone, Washington, D.C. expérience 26 années de travail sur le marché intérieur et à l'échelle internationale. Il est spécialisé dans l'intégration d'annuaire, la gestion des identités, solutions orientées mobilité et normes de l'informatique des administrations. Frank peut être contacté à frank.rettig@microsoft.com.

 

Accusés de réception :

J'aimerais remercier les membres de l'équipe Microsoft Information Security ACE Services (architecte de sécurité principal) de Roger Grimes et Shawn Rabourn (Conseiller en sécurité senior) pour la validation de cet article et Anthony de Lagarde ’ services USPS fédérale (Senior Consultant) pour réviser le contenu.

 

Contenu associé :