Audit and disable SSLv2 connections on your domain controllers

SSLv2 is considered as a weak cipher since a long time now but it still enabled by default on your domain controllers.

To disable it, you just have to set the following registry key value (http://support2.microsoft.com/default.aspx?scid=kb;EN-US;245030) :

  • Path : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server
  • Name : Enabled
  • Type : REG_DWORD
  • Data : 0

 

But, before you disable this cipher, you have to be sure that it’s not used anymore … The best way to do the job, is to activate the verbose of the SCHANNEL.

Set the following registry key :

  • Path : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\EventLogging
  • Name : EventLogging
  • Type : REG_DWORD
  • Data : 4

 

When it’s done, you should received some new events in your System log, with source « Schannel » and event Id « 36880 ».

The message contains the type of cipher used.

In this first example, TLS 1.0 is used.

 

In this second example, SSL 2.0 is used.

 

You just have to audit during a few days the cipher activities on your domain controller then disable the cipher and the schannel verbose mode.

Gérer efficacement la création des snapshots AD

Sommaire

 

 

Introduction

Les clichés instantanés de la base NTDS est une fonctionnalité Windows Server s’appuyant sur NTDSUTIL (un simple front end du VSS shadow copy en réalité) et l’outil DSAMAIN. Le premier permet la création de clichés instantanés du fichier « ntds.dit », le deuxième permet d’instancier la base de données depuis un des clichés réalisés.

J’avais d’ailleurs déjà traité le sujet il y a quelques temps au sein de deux articles :

 

Depuis lors, j’ai gagné un petit peu en expérience et je vais vous montrer comme optimiser la création de vos clichés Active Directory.

 

 

Les problématiques

La première grosse contrainte lorsque vous créer vos clichés instantanés à l’aide de NTDSUTIL est qu’il crée automatiquement un cliché instantané de l’ensemble de vos volumes. D’une part ça ne sert strictement à rien, d’autre part ça peut poser rapidement des problèmes sur la gestion des rotations de vos clichés ainsi que des problèmes d’espace disque.  Cela s’avère d’autant plus vrai lorsque le volume système est impacté…

Ci-dessous, vous voyez un exemple de création d’un cliché à l’aide de NTDSUTIL. Comme je dispose de deux volumes (C:\ et D:\), l’outil prend un cliché de chacun d’entre eux…

 

Le deuxième problème est la gestion des rotations… en effet, on pourrait essayer de fixer un nombre de clichés instantanés cependant cela peut s’avérer rapidement complexe car il faut tenir compte de l’évolution de l’espace disque utilisé sur la partition de votre base Active Directory mais également les autres volumes depuis que NTDSUTIL ne fait pas la différence.

 

 

Problématique 1 : réaliser un cliché d’un seul volume

La première chose à faire est de limiter la réalisation du cliché au seul volume contenant la base Active Directory. Cela induit donc de ne plus utiliser NTDSUTIL. Ça ne pose pas réellement de problème en réalité car les clichés instantanés réalisés par NTDSUTIL n’ont rien de plus que ceux réalisés depuis l’explorateur Windows. La seule chose que réalise NTDSUTIL et qu’il ajoute un TAG supplémentaire pour des besoins de gestion. En effet, lorsque vous utilisez NTDSUTIL pour lister, monter ou supprimer les clichés instantanés Active Directory, il s’appuie sur le TAG « SNAPAD » apposé sur chaque cliché instantané.

La solution que je propose est donc de passer par l’outil DISKSHADOW pour réaliser le cliché instantané qui permet premièrement de se focaliser uniquement sur le volume hébergeant la base NTDS. En second, il permet de continuer de gérer les clichés instantanés depuis NTDSUTIL.

Le script est disponible depuis le lien suivant : http://gallery.technet.microsoft.com/scriptcenter/Script-to-create-Active-2d389218

Ci-dessous, je lance le script pour réaliser un cliché et je liste le cliché créée à l’aide de NTDSUTIL. Nous voyons bien que non seulement il apparait bien depuis NTDSUTIL mais surtout que seul le volume stockant la base Active Directory est concerné.

 

 

Problématique 2 : gestion efficace de la rotation de vos clichés instantanés

Evaluer la taille d’un cliché est quasiment impossible surtout si vous en réalisez plusieurs à la suite. Vous pourriez y arriver au fur à mesure avec un peu de patience et une surveillance soutenue mais ça reste assez inefficace.

Le mieux est de s’appuyer sur ce que Microsoft propose déjà en matière de clichés instantanés. En effet, vous avez la possibilité de réserver un espace dédié à vos clichés et du coup de gérer de manière optimisée le nombre de clichés que vous pouvez conserver.

Pour cela, rien de plus simple. Faites un clic droit sur le volume contenant la base Active Directory et sélectionnez « Configurer les clichés instantanés… ».

 

Depuis la fenêtre « Clichés instantanés », cliquez sur le bouton « Paramètres… ». Une fois dans la fenêtre « Paramètres », définissez une limite pour le stockage des clichés instantanés à l’aide de l’option « Utiliser cette limite : ».

 

De manière automatique, Windows va désormais gérer la rotation tout en garantissant de ne pas dépasser un volume d’espace disque. En clair, lorsque la limite définie sera dépassée, le plus ancien cliché sera supprimé et ainsi de suite.

Ne stockez jamais de mot de passe dans une GPP (les préférences de stratégie de groupe)

Les GPP sont particulièrement utiles pour gérer un bon nombre de composants non pris en charge par défaut dans les objets de stratégies de groupe. Toutefois, dans certains de ces composants, vous pourriez être amené à spécifier des informations d’authentification… ce qu’il ne faut absolument jamais faire !

Les composants concernés sont :

  • Les sources de données
  • Les utilisateurs locaux
  • Les tâches planifiées
  • Les services
  • Les lecteurs réseaux

 

Chacun de ces composants offrent la possibilité de spécifier des informations d’authentification comme ci-dessous.

Si vous spécifiez un mot de passe depuis l’un de ces composants, il est encrypté et puis stocké dans le fichier de configuration (au format XML) du composant.

 

Dans l’exemple ci-dessous, j’ai ouvert le fichier XML « ScheduledTasks.xml » d’une GPO portant l’identifiant unique « A50C7725-0176-4FFF-B40A-F5852C0487B6 » depuis le dossier SYSVOL. Le chemin complet vers ce fichier est  \\mondomaine.fr\SYSVOL\mondomaine.fr\Policies\{A50C7725-0176-4FFF-B40A-F5852C0487B6}\Machine\Preferences\ScheduledTask

 

Comme vous pouvez le voir, le mot de passe est facilement récupérable. Toutefois il est encrypté. Pour autant, cette encryption est complètement inutile car Microsoft a publié la clé d’encryption (http://msdn.microsoft.com/en-us/library/cc422924.aspx).

Du ce fait, il suffit d’utiliser cette clé pour rapidement décrypter le mot de passe. Cerise sur le gâteau, vous avez des scripts pour cela comme par exemple le bout de script ci-dessous (bout de code récupéré depuis le lien https://github.com/mattifestation/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1)

{codecitation style= »brush: PowerShell »}

[CmdletBinding()]

Param (

[string] $Cpassword

)

 

try {

#Append appropriate padding based on string length

$Mod = ($Cpassword.length % 4)

switch ($Mod) {

‘1’ {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}

‘2’ {$Cpassword += (‘=’ * (4 – $Mod))}

‘3’ {$Cpassword += (‘=’ * (4 – $Mod))}

}

 

$Base64Decoded = [Convert]::FromBase64String($Cpassword)

#Create a new AES .NET Crypto Object

$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider

[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,

0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)

#Set IV to all nulls to prevent dynamic generation of IV value

$AesIV = New-Object Byte[]($AesObject.IV.Length)

$AesObject.IV = $AesIV

$AesObject.Key = $AesKey

$DecryptorObject = $AesObject.CreateDecryptor()

[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)

return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)

}

 

catch {Write-Error $Error[0]}

{/codecitation}

 

Et voilà le résultat ! C’est génial ou catastrophique… ça dépendra de votre point de vue Coquin


 

Maintenant, il faut trouver des solutions pour remédier à la situation.

La priorité est de faire passer l’information (en faisant tourner mon article par exempleContent) auprès des personnes concernées.

Il existe également une mise à jour de sécurité depuis le 13 mai 2014 (https://technet.microsoft.com/library/security/ms14-025) empêchant de spécifier des informations d’authentification depuis les GPP. La mise à jour est disponible depuis le lien suivant : http://www.microsoft.com/en-us/search/DownloadResults.aspx?q=KB2928120

Une fois installée, premièrement vous avez un message d’avertissement…

 

Et les informations d’authentification sont grisées (évidement ça pose quelques soucis pour les GPPs existantes…).

 

Le petit inconvénient de la KB est qu’il faudra la déployer sur tous les postes d’administration.

 

Enfin, une autre solution consiste à réaliser des scans réguliers de votre SYSVOL à l’aide du script dont je vous ai déjà parlé plus haut (https://github.com/mattifestation/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1). En effet, il permet de scanner l’intégralité du contenu du dossier SYSVOL et extrait les éventuels mots de passe.

 

 

Réplication AD – l’accès à la réplication a été refusé (Erreur 8453)

Dernièrement, j’ai eu un problème de réplication sur une de mes maquettes. L’erreur remontée par l’outil « repadmin » portait le code erreur « 8453 ». Le message indiquait que « L’accès à la réplication a été refusé ».

 

Fait étrange, une seule partition était concernée. En l’occurrence, il s’agissait de la partition de domaine. La partition de configuration et de schéma se répliquait correctement.

Afin de solutionner mon problème, je me suis référé à la KB Microsoft 2022387 (http://support.microsoft.com/kb/2022387). Hormis un problème de droits avec le compte utilisateur (peu probable étant administrateur du domaine), l’accès refusé pouvait provenir soir d’un problème sur l’attribut « userAccountControl » du compte ordinateur d’un des contrôleurs de domaine incriminé, soit d’un problème de droits sur la partition de domaine.

Le problème sur l’attribut « userAccountControl » ne semblait pas être la cause sachant que certaines partitions se répliquaient correctement. Par acquis de conscience, j’ai toutefois vérifié à l’aide de la commande « dcdiag /test:machineaccount ».

 

J’ai ensuite continué le diagnostic en testant les accès sur l’ensemble de mes partitions Active Directory à l’aide de la commande « dcdiag /test:ncssecdesc ».

BINGO !

 

Le test est particulièrement utile car il permet de lister l’ensemble des droits manquants. On pourrait d’ailleurs confirmer le résultat à l’aide de la commande « dsacls <PARTITION DN> » (distinguishedName de la partition concernée).

 

Clairement, les droits d’accès par défaut doivent être mis à jour sur la partition de domaine. Pour cela, le plus simple est d’utiliser l’outil « ADSIEDIT ».

 

Dans mon exemple, je me connecte donc à la partition de domaine « default naming context ». Dans votre cas, il pourrait peut-être s’agir de la partition de configuration, de schéma ou autre…

 

Il me suffit d’accéder aux propriétés de ma partition, et, depuis l’onglet « Sécurité », rajouter les droits manquants et lister par DCDIAG.

{gallery}87-ADREPL-ACCESSDENIED/01{/gallery}

 

 

 

 

 

 

 

 

 

Le cas échéant, on relance le test « dcdiag /test:ncsecdesc » pour valider que nous n’avons rien oublié.

 

La réplication devrait être de nouveau opérationnelle !

 

Pour votre information, Microsoft liste les droits par défaut pour les trois partitions par défaut d’une forêt:

Défragmentation hors-ligne de la base Active Directory

Sommaire

 

 

Introduction

Cet article va me permettre de vous expliquer rapidement ce qu’est une défragmentation hors-ligne de la base Active Directory et comment la réaliser avec succès.

 

 

Pourquoi faire une défragmentation hors-ligne ?

La défragmentation hors-ligne ne sert qu’à une seule chose : gagner de l’espace disque (en tout cas, rien ne laisse penser le contraire).

En réalité, la base Active Directory est régulièrement défragmentée en ligne. L’opération est réalisée automatiquement par le processus « Garbage Collection » (toutes les 12 heures par défaut). Il réorganise la base de données et libère de l’espace disque mais ne réduit pas physiquement le fichier « NTDS.DIT ». Seul le processus de défragmentation hors-ligne permet de réduire la taille du fichier « NTDS.DIT » en fonction de l’espace libéré par la défragmentation en ligne.

Il vous est d’ailleurs possible de visualiser la taille de disque que vous pourriez économiser. Pour cela, il suffit de modifier une clé de registre (http://technet.microsoft.com/en-us/library/cc816652(v=ws.10).aspx) :

  • Nom de la clé : « 6 Garbage Collection »
  • Chemin : « HKLM\SYSTEM\CurrentControlSet\services\NTDS\Diagnostics »
  • Valeur : « 1 »

 

Lors de la prochaine exécution du « Garbage Collection », vous obtiendrez l’évènement système portant l’id « 1646 » depuis le journal « Directory Service » ci-dessous. Dans cet exemple, nous voyons que nous pouvons gagner environ 100Mb d’espace disque.

 

 

Comment réaliser une défragmentation hors-ligne ?

Premièrement, Veillez à disposer d’une sauvegarde de votre base Active Directory (sauvegarde de l’état système). L’opération n’est pas risquée mais sachant que vous manipulez directement le fichier  « NTDS.DIT », il vaut mieux être prudent.

L’opération doit se réaliser hors-ligne, il faut donc arrêter le service Active Directory. L’avantage sur Windows Server 2008 est que nous pouvons le faire sans passer par le mode de démarrage « Restore Mode » (ou « DSRM »). Pour arrêter le service Active Directory, lancez simplement la commande « net stop ntds ».

 

Une fois le service arrêté, lancez « NTDSUTIL » et saisir les commandes suivantes dans l’ordre indiqué :

  • « Activate instance ntds »
  • « Files »
  • « Compact to [CHEMIN] »

 

L’assistant de compactage, vous invite à réaliser le remplacement de l’ancien fichier « NTDS.DIT » par le nouveau fichier compacté et à supprimer les journaux.

 

Mais avant tout, nous vérifions que le compactage a bien été réalisé. Par exemple, ci-dessous, nous voyons que le fichier « NTDS.DIT » a été réduit de près de 120Mb.

 

Remplacez donc le fichier « NTDS.DIT » existant par le nouveau fichier : « Copy [CHEMIN_DE_LA_BASE_COMPACTEE]  [CHEMIN_DE_LA_BASE_PRODUCTION] »

 

Supprimez les fichiers journaux « del  [CHEMIN_REPERTOIRE_LOGS]\*.log ».

 


Vérifications post-opératoires

Pour être sûr que le fichier compacté est intègre, vous pouvez utiliser de nouveau « NTDSUTIL », en lançant les commandes suivantes :

  • « NTDSUTIL »
  • « Activate instance ntds »
  • « Files »
  • « Integrity »

 

Si le test d’intégrité est OK, alors il ne vous reste plus qu’à redémarrer le service Active Directory à l’aide de la commande « net start ntds ».

 

Enfin, pour valider que le contrôleur de domaine est opérationnel, n’hésitez pas à utiliser l’outil « DCDIAG », de naviguer dans la base locale Active Directory avec la console « Utilisateurs et ordinateurs Active Directory », vérifiez t les réplications avec l’outil « repadmin ».

Réplication AD – Le nom principal de la cible n’est pas correct (-2146893022)

Sommaire

 

 

Descriptif

J’ai rencontré le problème dernièrement chez un client et plus récemment encore sur une de mes maquettes.

Le message d’erreur remonté est « The target principal name is incorrect » ou, en français « le nom principal de la cible est incorrect ».

Ci-dessous, un exemple concret obtenu depuis ma maquette avec l’outil « AD Replication status tools » (http://www.microsoft.com/en-us/download/details.aspx?id=30005).

 

Le même résultat mais, cette fois-ci, avec la commande « repadmin /showrepl * /csv » et une petite mise en forme sous Excel.

 

Clairement, ce message d’erreur apparait lorsque le mot de passe d’un ou plusieurs contrôleurs de domaine n’a pas été répliqué correctement entre tous les contrôleurs de domaine. Pour information, un compte ordinateur Active Directory dispose d’un mot de passe et le renouvelle automatiquement et par défaut tous les 30 jours. Les contrôleurs de domaine ne dérogent pas à la règle.

Pour étayer mes propos, nous pouvons voir dans l’exemple ci-dessous que l’objet DC01 a une date de changement de mot de passe (attribut « pwdLastSet ») différent entre lui-même et DC02.

 

On aurait pu également utiliser la commande « repadmin /showobjmeta <DC Source> <distinguishedName de l’objet> » pour identifier que les attributs relatifs au mot de passe ne sont pas synchronisés entre les deux contrôleurs de domaine.

 

 

 

Solution

 

  • Etape 1 : on identifie le contrôleur de domaine qui est maître d’opérations « PDCe » à l’aide de la commande « netdom query fsmo ». Dans notre exemple, il s’agit de « DC01 ».

 

  • Etape 2 : premièrement, on stoppe le service KDC sur le contrôleur de domaine impacté à l’aide de la commande « net stop kdc ». On purge ensuite les tickets kerberos avec la commande « klist purge ».

 

  • Etape 3 : on réinitialise le mot de passe du contrôleur de domaine impacté depuis le PDCe avec la commande « netdom resetpwd <dc> /userd:user@domain /passwordd:* » (<dc> est le nom du contrôleur de domaine sur lequel vous rencontrez le problème).

Remarque: si cela est possible, créez temporairement un lien de réplication bi-directionnel entre le PDCe et le contrôleur de domaine impacté.

 

  • Etape 4 : on force la synchronisation des réplications à l’aide de la commande  « repadmin /syncall ».

 

  • Etape 5 : on redémarre le service KDC sur le contrôleur de domaine impacté avec la commande « net start kdc ».

 

Le problème est résolu !

Réaliser une restauration complète « BareMetal » avec Windows Server Backup (2008R2 / 2012)

La restauration de type « BareMetal » est une restauration complète de votre système. Elle permet de s’affranchir de la réinstallation du système d’exploitation… et de limiter les étapes de restauration. La seule prérogative est que la sauvegarde utilisée soit également de type « BareMetal ».

Avant toute chose, si vous avez compressé votre sauvegarde à l’aide de mon script (disponible ICI), la première étape consiste donc à la décompresser. Pour cela, saisir la commande : « 7z.exe x [CHEMIN_COMPLET_DU_FICHIER] ».

Remarque : la commande décompresse le fichier dans le répertoire courant…

 

Renommer le dossier de la sauvegarde à restaurer en « WindowsImageBackup ». Cela permettra à l’outil de restauration de détecter votre sauvegarde. Bien entendu, le dossier contenant la sauvegarde décompressée devra être accessible via le réseau…

 

Maintenant, vous allez démarrer la machine dans l’environnement de récupération Windows (http://technet.microsoft.com/fr-fr/library/cc765966(v=ws.10).aspx).Pour accéder à Windows RE, vous pouvez soit sélectionner l’option de démarrage avancée « Réparer l’ordinateur » (à l’aide de la touche F8 avant que logo Windows apparaisse) soit démarrer à partir du DVD d’installation en sélectionnant l’option « Réparer l’ordinateur ».

{gallery}83_WBS_RESTOREBAREMETAL/01{/gallery}

 

 

 

 

 

 

 

 

Une fois dans l’environnement de récupération, nous allons sélectionner « Dépannage » et ensuite « Récupération de l’image système ».

 

Vous devriez recevoir instantanément un message d’avertissement signalant qu’aucune sauvegarde n’a été trouvé. Nous n’allons pas en tenir compte.

Remarque : ce n’est pas toujours le cas en réalité car vous pouvez très avoir un volume local dédié à la sauvegarde et donc ne pas avoir le message d’erreur.

 

Nous choisissons « Sélectionner une image système ». A l’étape suivante, nous cliquons sur le bouton « Avancé… ».

{gallery}83_WBS_RESTOREBAREMETAL/02{/gallery}

 

 

 

 

 

 

 

Nous choisissons « Chercher une image système sur le réseau » que vous soyez en DHCP ou non (je vais vous montrer comme définir une adresse IP si nécessaire). Si la carte réseau n’est pas détecté, vous pouvez en profiter pour installer le pilote.

Vous recevez également un message d’avertissement sur les risques encourus lorsque que vous connectez votre machine sur le réseau… Une fois le message validée, l’assistant tente la connexion au réseau.

{gallery}83_WBS_RESTOREBAREMETAL/03{/gallery}

 

 

 

 

 

 

 

 

A ce moment là, vous avez deux possibilités. Soit vous êtes en DHCP et vous continuez à suivre la procédure, soit vous n’avez pas de serveur DHCP et je vous propose de passer par la procédure décrite ICI.

Entrez l’emplacement réseau de votre sauvegarde. Par exemple : « \\192.168.0.201\Backups ».

 

L’assistant devrait vous proposer automatiquement la sauvegarde indiquée…

{gallery}83_WBS_RESTOREBAREMETAL/04{/gallery}

 

 

 

 

 

 

 

Sélectionner de formater et de repartitionner vos disques si nécessaire (en particulier si vous avez changé le disque dur).

 

Lorsque vous valider la restauration, un dernier message d’avertissement apparait vous signalant le caractère irréversible de l’opération. Une fois confirmée, la restauration débute.

 

Votre machine redémarre enfin et votre système est de nouveau opérationnel!

Script de sauvegarde pour Windows Server 2008 R2 et Windows Server 2012

Sommaire

 

 

Introduction

Dans cet article, je vous présente un script de sauvegarde assez complet pour Windows 2008 R2 et Windows Server 2012 qui devrait vous rendre pas mal de services !

 

 

Compatibilité

Le script a été testé sur Windows 2008 R2 et Windows Server 2012. Il devrait également être supporté sur du Windows Server 2012 R2 bien que je n’ai réalisé aucun test à ce jour.

 


Les fonctionnalités

Il prend en charge les fonctionnalités suivantes :

  • Gestion de la rotation quotidienne, hebdomadaire et mensuelle : la sauvegarde mensuelle est réalisée le premier jour du mois, la sauvegarde hebdomadaire est réalisée le lundi. Les autres jours, la sauvegarde est considérée comme étant quotidienne. Hormis le nom du fichier de sauvegarde pour réaliser la rotation, il n’y a aucune différence entre les 3 types.
  • Compression : elle est réalisée sur demande à l’aide de 7-Zip. J’ai constaté des ratios allant de 1 pour 10 donc fortement recommandé.
  • Synchronisation depuis un répertoire distante : la synchronisation se fait à l’aide de Robocopy et de l’option « /MIR ». Simple mais efficace…
  • Journalisation des tâches dans un fichier texte : un fichier est généré pour chaque tâche de sauvegarde. Un fichier mensuel est également créé pour obtenir un meilleur visuel sur le taux d’échecs et de réussites.
  • Notification par message électronique : un email est envoyé sur demande et à la fin de chaque tâche de sauvegarde.
  • Type de sauvegarde : vous avez le choix entre la sauvegarde de l’état système ou une sauvegarde complète de type BareMetal.

 

Certaines fonctionnalités peuvent être activées ou configurées selon vos besoins à l’aide de paramètres :

  • Compression : à l’aide du paramètre « Compress ». Par défaut le script ne compressera pas les sauvegardes à moins que vous spécifiez le paramètre.
  • Synchronisation : à l’aide du paramètre « Sync ». Par défaut le script ne synchronisera pas les sauvegardes à moins que vous spécifiez le paramètre.
  • Notification : à l’aide du paramètre « Notify ». Par défaut le script n’enverra pas de notification par email à moins que vous spécifiez le paramètre.

 

Enfin, pour faciliter l’usage et éviter les erreurs de configuration, le script s’appuie sur un fichier de configuration XML et d’un schéma XML embarqué.

 


Installation : Partie 1 – copie des sources

Récupérer le fichier Zippé depuis le lien Technet suivant : http://gallery.technet.microsoft.com/scriptcenter/The-ultimate-backup-script-819e52ee. Extrayez le contenu de l’archive dans le dossier de votre choix. Pour ma part, j’ai décidé de copier le contenu de l’archive dans le dossier « D:\WSB-Script ».

{gallery}84_WBS_SCRIPT/01{/gallery}

 

 

 

 

 

 

 

L’archive contient donc 4 fichiers dont deux situés dans un sous-répertoire « Tools ».

  • « Backup-Config.xml » : fichier de configuration de la sauvegarde que vous aurez à modifier selon vos besoins
  • « Backup-Task.ps1 » : le script en lui-même que vous n’aurez pas à modifier
  • « 7z.* » : le binaire et la dll nécessaire à l’utilisation de 7-Zip (vous pouvez normalement utiliser vos propres sources…)

 

 

Installation : Partie 2 – édition du fichier de configuration

Vous serez dans l’obligation de paramétrer la sauvegarde à l’aide du fichier de configuration « Backup-Config.xml » pour pouvoir exécuter le script. Pour faire les choses bien, j’ai utilisé un schéma XML au sein même du script afin de limiter la casse.

Certains informations sont optionnelles et dépendrons des paramètres d’exécution du script. Par exemple, les informations relatives à la notification par message électronique ne seront utilisées que si vous activer la notification leur du lancement du script.

Ci-dessous, je vous joins un exemple de configuration avec l’ensemble des paramètres possibles.

 

Le fichier est constitué de plusieurs sections liées à une fonctionnalité du script.

  • <GENERAL> : Cette section permet de spécifier la configuration de base de votre sauvegarde.

<MonthRetention> : le nombre de version à conserver pour les sauvegardes mensuelles (valeur par défaut : 2).
<WeekRetention> : le nombre de version à conserver pour les sauvegardes hebdomadaires (valeur par défaut : 4).
<DayRetention> : le nombre de version à conserver pour les sauvegardes quotidiennes (valeur par défaut : 15).
<MinimumSpaceInGB> : l’espace nécessaire par défaut pour réaliser une sauvegarde (valeur par défaut : 20Go). Le script est capable d’identifier la taille nécessaire pour une sauvegarde, à la seule condition que vous compressiez vos sauvegardes et que vous en ailler déjà réalisé une.
<BackupRootFolder> : Le répertoire de stockage de vos sauvegardes. A spécifier obligatoirement.

 

  • <DESTINATION> : Cette section concerne la synchronisation. Elle doit être configurée seulement si vous avez activé la synchronisation.

<SyncServerName> : le nom du serveur avec lequel vous allez vous synchroniser.
<SyncFolderName> : le nom du dossier partagé qui stockera la synchronisation.

 

  • <NOTIFICATION> : Cette section concerne la notification par message électronique. Elle doit être configurée seulement si vous avez activé la notification.

<SmtpServerName> : le nom d’hôte de votre serveur SMTP.
<SmtpServerPort> : le port du serveur SMTP.
<SmtpServerUsername> : Le nom d’utilisateur pour l’envoi.
<SmtpServerPassword> : Le mot de passe pour l’envoi.
<Ssl> : l’activation de la fonctionnalité TLS. Le type doit être un booléen (true/false).
<Recipient> : l’adresse de destination. Répétez le paramètre autant de fois que vous avez de destinataires.
<Sender> : L’adresse d’envoi.

 


Installation : Partie 3 – création de la tâche planifiée

Je ne vais pas vous expliquer comment créer une tâche planifiée car ce n’est pas vraiment l’objet de l’article. Je vais me contenter de vous fournir les informations sur la ligne de commande à spécifier depuis l’onglet « Actions » de votre tâche planifiée.

  • Action : « Démarrer un programme »
  • Programme/Script : « powershell.exe »
  • Ajouter des arguments : « -NoProfile -NonInteractive -ExecutionPolicy unrestricted -Command D:\WSB-Script\Backup-Task.ps1 -ConfigFile D:\WSB-Script\Backup-Config.xml -Compress -Sync -Notify »

 

Remarque : les arguments spécifiés permettront de réaliser une sauvegarde de l’état système et d’activer l’ensemble des fonctionnalités du script.

 

 

Exécution manuelle du script

Le fonctionnement est assez simple dès lors que vous avez bien complété votre fichier de configuration.

Exemple 1: Backup-Task.ps1 –ConfigFile e:\WSB-Script\Backup-Config.xml –Compress –Sync –Notify

Lancement d’une sauvegarde de l’état système avec l’activation de la compression, de la synchronisation et de la notification.

Exemple 2 : Backup-Task.ps1 –ConfigFile e:\WSB-Script\Backup-Config.xml –BackupType BareMetal

Lancement d’une tâche de sauvegarde de type BareMetal sans aucune fonctionnalité supplémentaire.

Exemple 3 : Backup-Task.ps1 –ConfigFile e:\WSB-Script\Backup-Config.xml –BackupType BareMetal  –Compress –Notify

Lancement d’une tâche de sauvegarde de type BareMetal avec compression et notification.

 

Lors de la première exécution, le script installera les fonctionnalités Windows nécessaires de manière automatique.

 

La sauvegarde se lance…

 

Une fois que vous voyez le message « L’opération de sauvegarde est terminée. ». Le script lance la synchronisation. Vous pouvez d’ailleurs vérifier que le processus « 7z.exe » est en pleine activité… Ce n’est pas très verbeux mais le script a pour vocation d’être exécuter via une tâche planifiée.

 

Si vous activez la notification, vous recevrez un message électronique dont je vous propose un exemple de format ci-dessous.

 

Vous pouvez également consulter le fichier de journalisation généré à chaque exécution.

 


Conclusion

Maintenant que nous avons vu ensemble comment mettre en place le script de sauvegarde. Je vous propose également de consulter deux articles relatifs à la restauration:

 


Restaurer l’état système avec Windows Server Backup (2008R2 / 2012)

Aujourd’hui, je vais vous montrer comment réaliser une restauration de l’état système avec une sauvegarde réalisée à l’aide de mon script (disponible ici).

 

Si vous avez compressé votre sauvegarde, la première étape consiste donc à la décompresser. Pour cela, saisir la commande : « 7z.exe x [CHEMIN_COMPLET_DU_FICHIER] ».

Remarque : la commande décompresse le fichier dans le répertoire courant…

 

Renommer le dossier de la sauvegarde à restaurer en « WindowsImageBackup ». Cela permettra à l’outil de restauration de détecter votre sauvegarde…

 

Ensuite, lancer la console « Sauvegarde Windows Server » à l’aide de la commande « wbadmin.msc ».

 

Depuis le panneau « Actions », cliquez sur « Récupérer… ». L’assistant de récupération se lance…

 

Vous allez choisir « Un autre emplacement » et cela tout simplement que si vous choisissez « Ce serveur (XX) », l’assistant va rechercher depuis son catalogue et ne trouvera pas votre sauvegarde…

 

La seconde particularité concerne l’emplacement à spécifier. Même si votre sauvegarde est stockée localement, nous allons spécifier « Dossier partagé distant » (cela induit que les partages administratifs sont activés sur le serveur…).

 

On va exploiter le partage administratif du volume hébergeant votre sauvegarde (par exemple « d$ » pour volume « d: »). Si les partages administratifs ne sont pas activés alors il faudra partager le dossier contenant votre sauvegarde pour le rendre accessible depuis l’assistant de récupération.

Nous allons donc spécifier le répertoire « d:\Backups » mais en spécifiant le partage administratif « \\localhost\d$\Backups ».

 

Si l’assistant de Récupération détecte bien la sauvegarde, il vous la proposera depuis l’étape « Sélectionner une date de sauvegarde ».

 

Sélectionnez le type de restauration que vous voulez réaliser. En l’occurrence, nous voulons restaurer l’état système donc sélectionnez « Etat du système ».

 

Nous restons l’état du système à son emplacement d’origine en choisissant « Emplacement d’origine ».

 

L’assistant nous avertit que la sauvegarde est stockée sur partage et des risques que cela entraine. Comme nous utilisons en fait le stockage local, nous pouvons donc ne pas en tenir compte.

 

On confirme la restauration et on passe le deuxième message d’avertissement concernant le caractère irréversible de l’opération ! La restauration se lance…

{gallery}81_RESTORESSYSTEM/01{/gallery}

 

 

 

 

 

 

 

Après la restauration et le redémarrage de la machine, vous devez obtenir un message comme ci-dessous.

Audit Active Directory : Part 3 – les comptes utilisateurs

Sommaire

 

 

Introduction

Autant d’un point de vue sécurité qu’à titre informatif, il peut être intéressant d’auditer vos comptes utilisateurs Active Directory.

Pour cela, j’ai réalisé un script PowerShell qui va vous permettre de générer un rapport Excel tel que présenté ci-dessous.

{gallery}78-AUDITAD-USERS{/gallery}

 

 

 

 

 

Le script disponible depuis le lien suivant : http://gallery.technet.microsoft.com/scriptcenter/Generate-Excel-report-48c3f3b4

L’objectif de cet article est donc de vous expliquer la méthodologie appliquée pour la réalisation de ce script. Cela vous permettra de comprendre son fonctionnement et d’analyser les données présentées.

 

 

Collecter les informations nécessaires

La première étape est bien entendu de collecter tous les comptes utilisateurs depuis votre annuaire Active Directory. L’information collectée devra nous permettre de quantifier les objets utilisateurs, d’en définir l’état et d’énumérer les différentes configurations existantes.

Le but n’est pas de collecter toutes les propriétés de chaque utilisateur sachant que cela peut s’avérer très consommateur et par forcément très pertinent.

Nous allons simplement nous focaliser sur les propriétés standards nécessaires à l’identification de chaque compte utilisateur (distinguishedName, sAMAccountName…). Je m’appuie également sur certains attributs spécifiques me permettant donc de qualifier la configuration et l’état de chaque compte utilisateur :

  • pwdLastSet : indique la date du dernier changement du mot de passe. Cet attribut va permettre d’identifier les comptes ayant un mot de passe de plus de XX jours.
  • lastLogonTimestamp : une fois le niveau fonctionnel de domaine Windows Server 2003 activé au sein de votre infrastructure Active Directory, les contrôleurs de domaine utilisent cet attribut pour identifier la date de dernière ouverture de session. L’attribut n’est pas 100% fiable sachant que certains comptes utilisateurs sont exclusivement utilisés via des portails Web qui ne vont pas permettre de mettre à jour cet attribut. Toutefois, il reste le meilleur moyen pour identifier si un  compte utilisateur est inactif ou non.
  • accountexpires : cet attribut contient la date d’expiration d’un compte utilisateur. Il permettra donc d’identifier les comptes ayant expirés.
  • userAccountControl : cet attribut est particulièrement riche en information car il contient de nombreux indicateurs sur la configuration de chaque utilisateur (http://support.microsoft.com/kb/305144/fr).

 

Depuis Windows Server 2003, certains indicateurs de l’attribut userAccountControl ont été remplacé par l’attribut construit « msds-user-account-control-computed ». Nous trouverons entre autres les informations de verrouillage du compte te de l’expiration du mot de passe. Nous devrons donc également l’exploiter.

Le script génère donc un fichier CSV avec les informations suivantes :

  • displayName, distinguishedname, samaccountname, userPrincipalName : la valeur de chacun de ces attributs pour identifier le compte utilisateur. La liste n’est pas exhaustive. Il est possible que vous ayez besoin d’autres attributs…
  • useraccountcontrol: la valeur cet attribut est fournie uniquement à titre indicatif sachant que durant la collecte, l’attribut est déjà traité.
  • isPreAuthNotRequired: si l’option est activée, cela induit que le compte peut s’affranchir de la pré-authentification Kerberos et donc de mécanismes de sécurité supplémentaires.
  • isActive: indique que le compte est actif depuis une période spécifique (par défaut depuis 180 jours). La valeur de la période peut être changée grâce à paramètre « InactiveDays » du script.
  • isDESKeyOnly: permet d’utiliser la norme DES pour l’option de chiffrement qui est considéré comme obsolète.
  • isDisabled: spécifie si le compte est désactivé.
  • isExpired: informe que le compte est expiré.
  • isLocked: signale que le compte est verrouillé. Bien entendu, si vous avez une politique de déverrouillage de compte, l’information ne sera pertinente qu’au moment de la collecte.
  • isPwdNotRequired: indique si le compte peut utiliser un mot de passe vide. Cette option peut représenter un risque en termes de sécurité.
  • isPwdEncryptedTextAllowed: autorise le stockage de mots de passe par le biais d’un chiffrement réversible et donc n’assure nullement la protection du mot de passe.
  • isPwdOld: indique si le mot de passe est considéré comme étant obsolète (par défaut 120 jours). La durée d’obsolescence peut être modifiée via le paramètre « PasswordAge » du script.
  • isPwdNeverExpires: informe que le mot de passe n’a pas d’expiration. Un mot de passe qui n’expire jamais peut représenter une faille de sécurité.
  • isPwdExpired: permet de savoir si le mot de passe du compte utilisateur est expire.

Le rapport Excel s’appuie donc exclusivement sur la collecte de ces données. Afin de vous faciliter la vie, le script stocke ces données dans un fichier CSV afin de permettre soit de le traiter selon vos besoins ou tout simplement de pouvoir collecter les données et de générer les informations de manière séparée.

Le paramètre « CollectOnly » du script va permettre de collecter uniquement les données sans générer le fichier Excel. Le paramètre « ExistingData », quant à lui, va permettre de générer le  rapport Excel à partir d’un fichier de collecte existant.

 

 

Informations utiles sur le rapport Excel

Comme vous avez pu le voir en introduction, le rapport Excel contient trois graphiques différents :

Volumetry of user accounts : ce graphique permet d’avoir le nombre total d’objets utilisateur de votre domaine. Il permet également de voir le pourcentage de comptes actifs/inactifs. Plus le pourcentage de comptes inactifs est élevé plus cela indique qu’il faudra intégrer une stratégie de cycle de vie sur les comptes utilisateurs.

Status of user accounts : le deuxième tableau liste les différents états possibles de vos comptes utilisateurs actifs et inactifs. J’ai décidé de scinder l’information entre les utilisateurs actifs et inactifs sachant qu’elle n’est pas forcément très pertinente pour des comptes inactifs… Le graphique se focalise sur l’état des comptes actifs. Notez également qu’un compte peut être dans plusieurs états simultanément… hormis pour l’état dit « standard » qui est exclusif.

Configuration of user accounts : à la manière du deuxième tableau, il liste les différentes configurations de vos comptes utilisateurs actifs et inactifs et fourni un graphique uniquement sur les utilisateurs actifs. Un compte utilisateur peut avoir plusieurs paramètres associés.

 

 

Conclusion

Avec cette troisième partie sur l’audit d’Active Directory, je vous ai proposé une solution rapide et simple pour collecter et traiter les informations de l’ensemble de vos comptes utilisateurs. Le prochain article se focalisera plus spécifiquement sur les comptes disposant de privilèges.