Active Directory - il mistero UnicodePwd di AD LDS

Active Directory Lightweight Directory Services utilizza sofisticata procedura per convertire e l'autenticazione delle password.

Da Frank C. Rettig

Recentemente, uno dei miei clienti necessario esporre alcune informazioni tramite Internet da Active Directory. L'intento era l'autenticazione (per motivi di accesso) a un'applicazione esterna senza esporre tali attributi selezionare. Ci si potrebbe chiedere Qual è il punto di autenticazione all'esterno dell'applicazione. Inserisce il onus sugli utenti dell'applicazione, invece di provider, riducendo pertanto la responsabilità del proprietario.

Esposizione di un controller di dominio a Internet è in genere una pessima abitudine, se tale esposizione proviene direttamente dall'ambiente di produzione o tramite una rete perimetrale. L'alternativa naturale consiste nel collocare un server Windows Server 2008 con ruolo di Active Directory Lightweight Directory Services (AD LDS) in esecuzione nella rete perimetrale.

AD LDS originariamente era noto come Active Directory Application Mode (ADAM). È stato innanzitutto un componente aggiuntivo per Windows 2003, incluso Windows 2003 R2 ed è ora disponibile come ruolo server per Windows 2008 o Windows 7. In molti modi, è quasi come Active Directory. Come alcuni hanno detto, è una versione toned verso il basso che non dispone di capacità dell'organizzazione completa. L'implementazione AD LDS è praticamente lo stesso su qualsiasi versione di Windows, Windows Server 2008 R2 è la scelta migliore perché include Windows PowerShell v2. Questa nuova versione di Windows PowerShell fornisce la gestione avanzata di attributi di Active Directory o AD LDS semplicemente non disponibili in altre versioni del sistema operativo.

Passare questo

Se l'obiettivo è di Active Directory o AD LDS, entrambi può avere l'attributo unicodePwd. Questo attributo viene archiviato nella partizione della directory o l'applicazione. Questo presuppone che il server è stato innalzato di livello a un controller di dominio Active Directory o il modello LDIF corretto con l'attributo per un'applicazione server di AD LDS.

Con Active Directory o AD LDS applicazioni utilizzano LDAP (Lightweight Directory Access Protocol) versione 3.0 per interrogare la directory. A tale scopo, l'applicazione, che potrebbe essere LDP.exe, CSVDE.EXE, LDIFDE.exe, ADSIEdit.exe o alcune applicazioni estemporanei, deve fornire l'account e la password.  Sembra abbastanza semplice, così perché quindi è un valore ma? Fornire la password è la parte più semplice. Ottenere la password memorizzata nell'attributo unicodePwd è la sfida. Ecco perché: Con le directory o le applicazioni più interattive, in genere viene richiesto immettere la password in forma nativa. Se la password era “ automobile ”, che è ciò che è necessario immettere. Quando si accede a un dominio o insieme di strutture di Active Directory o l'accesso a un'istanza di AD LDS utilizzando ADSIedit o LDP per assegnare o reimpostare una password per un account specifico, ad esempio è il caso.

Quando è necessario apportare massa aggiunte o modifiche in una sola volta, il programma LDIFDE.exe è lo strumento ideale. Per aggiungere o aggiornare l'attributo unicodePwd, Microsoft richiede che il valore dell'attributo unicodePwd sia in formato unicode base64.

Logica Base64 Unicode

Come viene calcolato il valore unicode base64 Si tratta in cui inizia il divertimento. È auspicabile che abbiamo verrà dispel Mistero il unicodePwd (e altri attributi che seguono la stessa codifica) una volta e ad tutti.

In primo luogo, si noti che le frasi seguenti sono annotate. Vedere i passaggi da 1 a 12 in di Figura 1. Microsoft richiede la password essere racchiuso tra virgolette doppie e quindi ogni carattere (comprese le virgolette) deve essere convertiti nel relativo equivalente unicode. Ciò significa che è necessario innanzitutto trovare equivalente per ciascun carattere ASCII e derivare il valore esadecimale da ogni valore ASCII quindi ogni valore esadecimale con due zeri di riempimento (perché Windows è conforme a UTF16) in modo da 16 bit sono rappresentati.

Dopo la conversione, questi insiemi esadecimali riempiti sono tutti riuniti in una stringa lunga. Poiché base64 si basa su 6 bit, questa stringa viene analizzata ogni sei caratteri da sinistra. Se rimane un sextet esadecimale incompleto, vengono inserito a destra con zero fino a sei caratteri sono rappresentati. Convertirlo ogni sextet esadecimale in binario. Come per il file binario, l'analisi viene generato da destra e ogni sei caratteri.

Sebbene inutili, per un binario sextet incompleto riempimento a sinistra con zero fino a sei caratteri rappresentati (ricordare sempre uguale zero di zeri iniziali, ma ciò semplifica la lettura poiché altri set dispone anche di sei caratteri). Ora è possibile convertire ogni valore binario analizzato nel relativo numerico 11 equivalente. Tale numero può essere utilizzato come indice aspetto fino a fronte di una tabella base64 (Figura 2 ) e di ottenere il carattere. Quando un sextet completo solo costituito riempiti di zeri, questi sono rappresentati dal segno di uguale.

Figura 1 , illustrato nei passaggi da 1 a 12, modalità di Auto la parola viene convertito in **IgBjAGEAcgAiAA ==.**Spaziatura interna a destra è necessaria per la preparazione di unicode base64, può essere visualizzato mediante il testo evidenziato in blu. Come per la spaziatura interna sinistra rappresentata dal testo della luce rossa, si tratta per renderlo più leggibile rispetto alle altre sextets di binari e coerente.

Figure 1 Steps to create a unicode-base64 password

Figura 1Procedura per creare una password base64 unicode.

Figure 2 Base64 Mapping

Figura 2Mapping Base64.

Se chiediate se questa logica anomali è corretta, ottenere una copia del programma stringconverter.exe gbordier.com/gbtools/stringconverter.htm ed eseguire la seguente stringa di comando prompt DOS:

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

Come si può vedere, i risultati sono gli stessi.

Creazione di Password Base64 Unicode

Per il test iniziale semplice utilizzando le seguenti funzioni di Excel (Figura 1 creata in Excel) sarà possibile generare rapidamente base64 unicode corretta del testo immesso:

  • CODE() – restituisce il valore numerico di un carattere
  • DEC2HEX() – converte un numero decimale in esadecimale.
  • Concatenate() – join più stringhe in un'unica stringa
  • BIN2DEC() – converte un numero binario in decimale
  • MID() – restituisce il carattere dal centro di una stringa

Il modo migliore per gestire la generazione di numerosi valori unicodePwd è scrivere uno script. In questo modo utilizzando VBA di Excel consente di vedere tutti i valori generati e mantenerli all'interno del foglio di calcolo per riferimento futuro. Utilizzando un altro script VBA, ero in grado di generare rapidamente un file LDIF per l'importazione in istanza AD LDS.

Caricamento del valore UnicodePwd Base64 Unicode

Poiché la unicodePwd manipolato tramite il programma LDIFDE.exe, caricando la unicodePwd deve essere conforme al formato file LDIF. Poiché il ruolo di Windows Server 2008 R2 AD LDS il matrimonio, questo formato file LDIF è ciò che seguito in modo che le informazioni di base è state caricate. Si noti che l'account utente di Ivan Gagliardi è il primo che ha valore di Auto come IgBjAGEAcgAiAA unicodePwd ==.

 

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

Per importare questo file, supponendo che il nome del file è Accounts.ldf, immettere la seguente sintassi alla console del prompt dei comandi di Windows Server 2008 R2:

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

Associazione e verifica la password dell'account

Dopo il caricamento di uno o più account appena creato applicativa e la connessione o l'associazione per il servizio LDAP con l'account userPrincipalName e unicodePwd, esso ‘ s importante per essere certi che il formato base64 unicode la unicodePwd è corretto. Lo strumento adatto e semplice da utilizzare è LDP.exe. Si potrebbe pensare che IgBjAGEAcgAiAA == è la password corretta per immettere quando si utilizza questo ma non. È ciò che abbiamo originariamente avviato con: automobile.

Una volta collegate all'istanza AD LDS utilizzando LDP, associare con l'UPN dell'account caricato e immettere la password. Se è stata seguita la logica per creare il valore unicode base64 unicodePwd correttamente, si vedrà una conferma positiva visualizzata nella finestra LDP che in realtà sono associati a tale istanza AD LDS con tale account.

Utilizzo di Windows PowerShell per aggiornare l'attributo UnicodePwd

Ora, sarebbe opportuno se ho detto che LDIFDE.exe era l'unico strumento intorno in grado di eseguire modifiche di massa all'attributo unicodePwd. Non sarebbe quindi hanno appreso come generare il valore unicode base64.

In Windows Server 2008 R2, Windows PowerShell v2 portare un po' più granularità nella sua capacità di manipolare gli attributi selezionare in Active Directory e AD LDS. Lavorare con AD LDS, ho trovato con la sintassi Figura 3 (note that for the sake of readability, I placed each command option on its own line) per ottenere gli stessi risultati che esegue lo script VBA all'interno del foglio di calcolo di Excel.

È ovvio che con poche righe di codice di Windows PowerShell, è possibile rapidamente apportare le modifiche necessarie senza dover passare attraverso hoops quando si crea il valore unicode base64 per ogni password. Si tratta di un'istruzione di potente funzionalità di Windows PowerShell, ma fornito a discapito della fase di elaborazione, considerando tutto ciò che avviene in background. Questo è particolarmente evidente se l'elaborazione di centinaia o migliaia di account.

Talvolta è necessario creare o aggiornare tanto adesso e quindi alcuni account, utilizzare Windows PowerShell. Sempre creare o aggiornare centinaia o migliaia a intervalli regolari, utilizzando Ldifde.exe è molto più rapido nel lungo termine.

Figura 3Script di Windows PowerShell v2 per aggiornare la password dell'account.

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

Se l'utilizzo di Active Directory o AD LDS (o persino ADAM parimenti), esistono diversi modi per aggiornare l'attributo unicodePwd. Se si dispone di un account da modificare, utilizzare LDP.exe o ADSIedit per ottenere tale operazione. Se è presente solo pochi tanto adesso e quindi, utilizzando Windows PowerShell v2 su Windows Server 2008 R2 AD/AD LDS funziona benissimo.

Tuttavia, se si sta ancora lavorando con Windows Server 2003 o versione successiva e avere centinaia di migliaia di account che necessitano di aggiornamento costante, eseguire il lavoro di preparazione preliminare per generare il valore unicode base64 dell'attributo unicodePwd. Quindi utilizzare LDIFDE.exe per caricare le modifiche in una sola volta.

Frank Rettig

Frank Rettig è un consulente negli Stati Uniti. Esercitazione di settore pubblico all'interno di Washington, D.C., area, con 26 anni di esperienza nazionale e internazionale. Si è specializzato in integrazione delle directory, gestione delle identità, soluzioni di mobilità e governo elaborazione standard. Frank può essere contattato al frank.rettig@microsoft.com.

 

Riconoscimenti:

Vorrei ringraziare i membri del team Microsoft Information Security ACE Services (Principal Security Architect) di Roger Grimes e Shawn Rabourn (Senior Security Consultant) per convalidare questo articolo Anthony de Lagarde ’ servizi di USPS Federal (Senior Consultant) per la revisione del contenuto.

 

Contenuto correlato: