jeudi 27 février 2014

Vos administrateurs respectent-ils la politique de mot de passe que vous avez définie ?


Bonjour à tous,

Je vous propose un petit article sur un cas que j'ai rencontré récemment.

Imaginez : Vous avez mis en place des Fine-Grained Password Policies (FGPP) pour vos comptes d'administration et vos comptes de service. Les FGPP sont bien configurées et appliquées, tout va bien dans le meilleur des mondes. Puis vous décidez de faire un audit sur vos comptes Active Directory, et là, vous vous apercevez que certains comptes de service et d'administration ont un mot de passe qui n'expire jamais ... Ils ne respectent donc pas la politique de mot de passe que vous avez définie avec vos FGPP.


Nous allons donc voir pourquoi il est possible d'outrepasser la politique de mot de passe que vous avez définie via vos FGPP et comment éviter ce type de transgression.

On va commencer par parler tout d'abord des droits étendus.


Extended Rights

La délégation d'administration Active Directory consiste à donner à un utilisateur ou un groupe de sécurité des accès en lecture ou en écriture à un objet ou à une propriété de cet objet.

Par exemple, vous pouvez donner à un groupe le droit de modifier le numéro de téléphone d'une population d'utilisateur sans pour autant lui donner le droit de modifier d'autres attributs de ces comptes.

Il existe d'autres droits, appelés droits étendus, qui consistent en l'exécution de tâches spécifiques, telles que changer le mot de passe d'un utilisateur.

Ces droits étendus sont visibles dans le conteneur "Extended Rights" de la partition de Configuration.




Si vous voulez plus de détails sur les droits étendus vous pouvez consulter le lien suivant : Extended Rights Reference


Pour notre problématique, nous allons nous intéresser aux 3 droits étendus suivant :

Le droit Enable-Per-User-Reversibly-Encrypted-Password permet d'activer ou de désactiver le "Stockage les mots de passe en utilisant un chiffrement réversible" pour les objets utilisateur et ordinateur.

Le droit  Unexpire-Password permet de restaurer un mot de passe expiré pour les objets utilisateur. Il permet aussi de configurer un mot de passe qui n'expire jamais.

Le droit Update-Password-Not-Required-Bit permet d'activer ou de désactiver le "mot de passe n'est pas nécessaire" pour les objets utilisateur. Ce droit permet d'utiliser un mot de passe vide.

Lorsque vous configurez ces paramètres pour un compte utilisateur, vous modifiez certains flags de l'attribut UserAccountControl.
Si vous voulez plus d'informations sur les différentes valeurs que peut prendre l'attribut UserAccountControl : How to use the UserAccountControl flags to manipulate user account properties


Ces droits étendus sont configurés à la racine du domaine. Il faut savoir que par défaut ces droits sont autorisés pour le groupe 'Utilisateurs Authentifiés" mais qu'il faut bien évidemment les droits de modification de l'attribut UserAccountControl pour les configurer.




On va voir maintenant comment on peut interdire ce genre de modifications.


Démonstration

J'ai un domaine avec la politique de mot de passe par défaut et utilisateur standard (test-user-001).
Cet utilisateur a les propriétés AllowReversiblePasswordEncryption, PasswordNeverExpires et PasswordNotRequired à la valeur "False"




Un utilisateur qui a les droits de modification de l'attribut UserAccountControl sur le compte de cet utilisateur peut modifier ces paramètres et donc transgresser la politique de mot de passe définie pour cet utilisateur.



Avec la propriété PasswordNotRequire configurée à la valeur "True", on peut désormais renseigner un mot de passe vide pour le compte. On a donc complètement outrepasser la politique de mot de passe ...




On va maintenant interdire la possibilité de faire ces modifications.
Pour cela, j'ai créé 3 groupes de sécurité (un pour chaque droit étendu, on aurait pu aussi créer un seul groupe, tout dépend de ce que vous souhaitez faire). On positionne ensuite les permissions en Deny pour ces groupes au niveau du domaine.




Désormais, les membres de ces groupes ne peuvent plus modifier les 3 flags de l'attribut UserAccountControl.


On reprend notre utilisateur de test.



On prend un compte d'administrateur (Admin001) qui a les droits de modification sur les comptes utilisateurs (et qui peut donc outrepasser la politique de mot de passe) et on l'ajoute au 3 groupes que l'on a créés précédemment.



On va maintenant modifier un des flags de l'attribut UserAccountControl de l'utilisateur en le désactivant. Notre administrateur a donc bien les droits de modification sur l'attribut.



On essaie maintenant de modifier nos 3 paramètres.



Notre administrateur ne peut plus modifier ces flags de l'attribut UserAccountControl.
Je ne vais pas aller plus loin dans la démonstration je pense que vous avez compris le concept.

La stratégie à adopter concernant ces 3 droits étendus dépend de la stratégie de mot de passe que vous avez définie et si vous voulez la verrouiller complètement.
Attention toutefois si vous utilisez des comptes configurés avec le paramètre PasswordNeverExpires (compte de service par exemple, même si ce n'est pas une bonne pratique), vous ne pourrez plus configurer ce paramètre.



Vous pouvez commencer par vérifier si vous avez des comptes avec ces flags configurés dans vos environnements.

On peut utiliser des commandes Powershell avec le filtre LDAP suivant en remplaçant XXX par la valeur décimale du flag (voir : How to use the UserAccountControl flags to manipulate user account properties) :
(&(objectCategory=person)(userAccountControl:1.2.840.113556.1.4.803:=XXX))





J'espère que cet article vous a intéressé et que vous avez appris quelque chose.

Merci de m'avoir lu et à très bientôt.

samedi 22 février 2014

Combien de Maître d'Infrastructure pensez-vous avoir dans votre forêt ?



Bonjour à tous.

Je vous propose aujourd’hui un article sur un sujet que j’avais commencé sur mon blog précédent.

C’est un sujet purement Active Directory et qui n’a pas de lien avec la sécurité mais c’est une problématique qui peut être rencontrée dans beaucoup d’environnements Active Directory.

Je vais faire quelques petits rappels avant d’attaquer directement le sujet.


Les rôles FSMO en bref

Active Directory Domain Services définit cinq rôles de maître d'opérations:
  • Maître de Schéma
  • Maître de Nommage
  • Maître RID
  • Emulateur PDC 
  • Maître d’Infrastructure

Chacun de ces maîtres d’opérations a un rôle bien spécifique dans un domaine et une forêt Active Directory :
  • Le maître de schéma contrôle les mises à jour et les modifications apportées au schéma.
  • Le maître de nommage contrôle l'ajout ou la suppression de domaines dans la forêt.
  • Le maître RID alloue des séquences d'ID relatifs (RID) à chacun des différents contrôleurs de domaine de son domaine.
  • L’Emulateur PDC traite les changements de mot de passe des clients et réplique ces changements à tous les contrôleurs de domaine de son domaine.
  • Le maître d'infrastructure est responsable de la mise à jour des références des objets de son domaine à des objets dans d'autres domaines.

Les cinq rôles de maître d'opérations sont attribués automatiquement lorsque le premier contrôleur de domaine d’une forêt est créé. Deux rôles de forêt sont affectés au premier contrôleur de domaine créé dans une forêt, et trois rôles de domaine sont attribués au premier contrôleur de domaine créé dans un domaine.

Le maître de Schéma et le maître de Nommage sont des rôles d’une portée de forêt, ce qui signifie qu'il n'y a qu'un seul maître de schéma et un nom de domaine maître dans l'ensemble de la forêt.
Les autres maîtres d’opérations sont des rôles de portée de domaine, ce qui signifie que chaque domaine dans une forêt possède son propre Maître RID, son Emulateur PDC et son Maître d'Infrastructure.

Je ne vais pas rentrer plus dans le détails pour les rôles FSMO, si vous souhaitez plus d’informations je vous conseille de consulter les liens suivant:

Donc, si je vous demande combien de maître d'infrastructure pensez-vous avoir dans votre forêt ?
Eh bien, votre réponse devrait être naturellement un pour chaque domaine puisque l’on a dit que chaque domaine dans une forêt possède un maître d’Infrastructure.
Évidemment, si je pose cette question c'est que peut-être pas la bonne réponse …

Avant d'aller plus loin, nous devons parler d’un autre sujet, les partitions Active Directory.


Les partitions Active Directory en bref

La base de données Active Directory est divisée de façon logique en partition d'annuaire.
On y retrouve les partitions suivantes :
  • Partition de configuration
  • Partition de schéma
  • Partition de domaine

La partition de configuration contient les objets de configuration de la forêt. Les mises à jour de ce conteneur sont répliquées sur tous les contrôleurs de domaine de la forêt.
La partition de Schéma contient la définition des classes et attributs pour tous les types objets Active Directory existant dans la forêt. Les mises à jour de ce conteneur sont répliquées sur tous les contrôleurs de domaine de la forêt. 

La partition de domaine contient les utilisateurs, les ordinateurs, les groupes, et d’autres objets d’un domaine. Les mises à jour de la partition de domaine sont répliquées uniquement sur les contrôleurs de domaine du domaine et sur les serveurs de catalogue global si les attributs sont marqués pour être répliqués.


Windows Server 2003 a introduit un nouveau type de partition, les partitions d’application.

Une partition d'applications est une partition d'annuaire qui est répliquée uniquement sur les contrôleurs de domaine que l’on spécifie. Les partitions d'applications sont généralement créées par des applications qui les utilisent pour stocker et répliquer les données.

Les données peuvent être répliquées sur un contrôleur de domaine spécifique ou un ensemble de contrôleurs de domaine de la forêt. Les partitions d'applications peuvent contenir n'importe quel type d'objet, à l'exception des entités de sécurité.

Si votre DNS est intégré dans Active Directory, vous avez deux partitions d'application pour les zones DNS : ForestDNSZones et DomainDNSZones.

Pour plus d'informations sur les partitions Active Directory, vous pouvez consulter les liens suivant :

Peut-être vous demandez-vous pourquoi je vous parle des partitions d'annuaire Active Directory.
La réponse est simple, il y a un maître d'infrastructure pour chaque partition d'applications.

Donc, vous avez désormais la réponse à notre question,  il y a un maître d’Infrastructure pour chaque domaine et pour chaque partition d'applications.

Par exemple, si j'ai une forêt composée de 3 domaines avec du DNS intégré à Active Directory, j'aurais 7 Maîtres d'Infrastructure dans la forêt :
  • 1 pour chaque domaine (3 domaines)
  • 1 pour la partition d’applications ForestDNSZones (1 par forêt)
  • 1 pour chaque partition d’applications DomainDNSZones (3 domaines)


Comment pouvons-nous le vérifier ?

J'ai construit le lab suivant, une Forêt composée de 3 domaines avec du DNS intégré à Active Directory :
  • ROOT.ADDS  
  • CHILD1.ROOT.ADDS  
  • CHILD2.ROOT.ADDS

Nous allons d'abord voir comment on peut voir les partitions d'application.

C'est relativement facile avec Powershell:

Import-Module ActiveDirectory
Get-ADForest



On peut aussi utiliser la commande dsquery :

dsquery * "CN=CONFIGURATION,DC=ROOT,DC=ADDS" -filter "(systemflags=5)" -attr ncname



Nous avons désormais le contexte de nommage de nos 4 partitions d'application, mais cela ne suffit pas à trouver leur maître d'infrastructure.

Pour cela nous avons besoin de l'attribut suivant: ms-DS-NC-Replica-Location

Pour récupérer cet attribut, nous pouvons utiliser la commande suivante:

Get-ADObject -Filter {systemFlags -eq 5} -SearchBase ((Get-adforest).PartitionsContainer) -properties msDS-NC-Replica-Locations,ncname | fl



Nous avons désormais pour chaque partition d'application les contrôleurs de domaine qui ont un réplicat de la partition d'application.

Vous avez probablement remarqué que c'est un tableau composé des objets nTDSDSA de chaque contrôleur de domaine qui ont un réplicat de la partition d'application.

Avec cette information, nous ne pouvons pas récupérer le maître d'infrastructure de chaque partition d'application directement, mais avec l’objet nTDSDSA nous pouvons récupérer le nom DNS d’un contrôleur de domaine qui héberge un réplicat de la partition d’application puis rechercher les objets de classe infrastructureUpdate.

Voici le script qui permet d’afficher les maîtres d’Infrastructure de chaque partition d’application :

 Import-Module ActiveDirectory
Get-ADObject -Filter {systemFlags -eq 5} -SearchBase ((Get-adforest).PartitionsContainer) -properties msDS-NC-Replica-Locations,ncname|%{
$nTDSDSADN=$_.'msDS-NC-Replica-Locations'[0]
$Server=$nTDSDSADN.Replace("CN=NTDS Settings,","")
$DC = Get-adobject $Server -Properties dNSHostName
Get-ADObject -SearchBase $_.ncname -filter {objectclass -eq "infrastructureUpdate"} -properties objectclass,fsmoroleowner -server $DC.dNSHostName | select DistinguishedName, ObjectClass, FSMORoleOwner}|fl



On a désormais le contrôleur de domaine qui a le rôle de maître d’Infrastructure pour chacune des partitions d’applications.

Il faut maintenant se poser la question suivante, en quoi cette information est-elle importante ?

Lorsque vous faites un transfert de rôle (forcé ou non) du maître d’Infrastructure vous transférez le maître d’Infrastructure du contexte de nommage de votre domaine uniquement (Partition de Domaine), les maitres d’infrastructure des partitions d’application ne sont donc pas impactés.

Si vous avez fait des transferts forcés (Seize) de rôle et un metadata cleanup suite à un incident sur un contrôleur de domaine et que ce contrôleur de domaine hébergeait une partition d’application (DNS intégré AD par exemple), il est possible que le maître d’Infrastructure de la partition d’applications fasse encore référence à ce contrôleur de domaine.

J’ai rejoué ce scénario dans mon lab et voici le résultat :



On voit bien que l’attribut FSMORoleOwner  du maître d’Infrastructure fait toujours référence à l’ancien contrôleur de domaine qui a été supprimé.

Cette référence à un contrôleur de domaine supprimé peut générer différents incidents lors des promotions et dépromotions ou lors de l'exécution de commande adprep.

Si on regarde les contrôleurs de domaine hébergeant un réplicat des partitions d’application, il n’y a pas de référence à l’ancien contrôleur de domaine.


Il faut donc corriger uniquement l’attribut FSMORoleOwner de l’objet infrastructureUpdate.

Il existe une KB avec un script vbs permettant de corriger de ce problème : KB949257

Pour faire cette correction j'ai préféré utiliser Powershell :

$IM=Get-ADObject "CN=Infrastructure,DC=DomainDnsZones,DC=ROOT,DC=ADDS" -Properties FSMORoleOwner
$IM.FSMORoleOwner = (Get-ADDomainController -Identity ROOT-DC02).NTDSSettingsObjectDN
Set-ADObject -Instance $IM



On fait la correction pour la seconde partition d'applications:

$IM=Get-ADObject "CN=Infrastructure,DC=ForestDnsZones,DC=ROOT,DC=ADDS" -Properties FSMORoleOwner
$IM.FSMORoleOwner = (Get-ADDomainController -Identity ROOT-DC02).NTDSSettingsObjectDN
Set-ADObject -Instance $IM




On peut vérifier ensuite que la correction a bien été effectuée.



Il faut donc vérifier les maîtres d'Infrastructure de vos partitions d'application lorsque vous effectuez un metadata cleanup d'un contrôleur de domaine.

Il faut aussi intégrer cette vérification dans votre procédure de Disaster Recovery Active Directory.

J'espère que cet article vous a intéressé et que vous avez appris quelque chose, il ne vous reste plus qu'à vérifier si vous n'avez pas cette problématique dans votre environnement sans le savoir.